Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Status Bukan Standard
Walaupun C tidak menyokong Tatasusunan Panjang Berubah (VLA) secara rasmi ), kedua-dua pengkompil g dan clang secara mengejutkan menerimanya sebagai sintaks yang sah. Ini menimbulkan persoalan tentang gelagat pengkompil dan kedudukan standard pada VLA.
Penerimaan Pengkompil
Penyusun C seperti g dan clang membenarkan VLA sebagai sambungan bukan standard. Ini mungkin disebabkan oleh keserasian sejarah dengan penyusun C lama yang membenarkan pengisytiharan sedemikian.
Definisi Standard
Piawaian C melarang VLA mengikut peraturan tatabahasa dalam [dcl. tatasusunan]. Hanya ungkapan malar dibenarkan untuk menentukan saiz tatasusunan. Dalam kod contoh yang disediakan, n bukan ungkapan tetap, menjadikan pengisytiharan VLA tidak sah mengikut standard.
Butiran Pelaksanaan
Walaupun bukan standard, VLA dalam C sering dilaksanakan dengan memperuntukkan memori pada tindanan dan menggunakan gelung untuk mengakses elemen. Walau bagaimanapun, tingkah laku ini bergantung kepada pengkompil dan mungkin berbeza-beza merentasi pelaksanaan yang berbeza.
Implikasi
Pengesyoran
Untuk kemudahalihan kod dan untuk memastikan pematuhan dengan standard C, adalah disyorkan untuk menggunakan peruntukan memori dinamik (cth., baru[]) untuk mencipta tatasusunan yang saiznya tidak diketahui pada masa penyusunan.
Atas ialah kandungan terperinci Mengapakah g dan clang Menerima Tatasusunan Panjang Berubah (VLA) dalam C Walaupun Piawaian Melarangnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!