Adakah "saiz int = 10;" Ungkapan Malar?
Coretan kod:
int main() { int size = 10; int arr[size]; }
menimbulkan persoalan sama ada tatasusunan panjang berubah (VLA) ialah ciri C yang sah.
Perspektif Piawaian
Piawaian C (8.3.4/1) memberi mandat bahawa saiz tatasusunan ialah ungkapan malar integral, yang "saiz" nampaknya bukan. Penyusun seperti GCC dan Clang menerima kod ini kerana sokongan mereka untuk VLA sebagai sambungan dalam C . Visual Studio, mematuhi piawaian, menolaknya.
Turutan Panjang Boleh Ubah
VLA ialah ciri C99 yang membenarkan tatasusunan dengan saiz yang ditentukan secara dinamik. GCC dan Clang melanjutkan fungsi ini kepada C . Walau bagaimanapun, VLA bukan sebahagian daripada standard C dan menggunakan bendera -pedantic dalam GCC/Clang akan menjana amaran atau ralat.
Ungkapan Malar Integral
Menurut Standard draf C (5.19/3), ungkapan pemalar kamiran ialah ungkapan jenis penghitungan kamiran atau tidak berskop, ditukar secara tersirat kepada prvalue, yang memenuhi kriteria untuk ungkapan malar teras.
Menjadikan "saiz" sebagai Ungkapan Malar
Untuk mematuhi piawaian, "saiz" mestilah diisytiharkan sebagai ungkapan pemalar kamiran. Ini boleh dicapai dengan:
Kesimpulan
Penerimaan GCC dan Clang terhadap VLA ialah sambungan dan bukan ciri standard dalam C . Penolakan Visual Studio adalah mematuhi standard. Untuk menggunakan kefungsian seperti VLA dalam standard C , adalah disyorkan untuk menggunakan const atau constexpr untuk menjadikan saiz tatasusunan sebagai ungkapan pemalar integral.
Atas ialah kandungan terperinci Adakah `int size = 10;` Ungkapan Malar yang Sah untuk Saiz Tatasusunan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!