Rumah >pembangunan bahagian belakang >C++ >Adakah Tatasusunan Panjang Boleh Ubah dalam C Menepati Piawaian?
Turutan Panjang Pembolehubah dalam C : Meneroka Ketekalan dan Pematuhan Standard
Coretan kod C di bawah telah menimbulkan persoalan sama ada ia mematuhi bahasa standard, terutamanya berkenaan ungkapan malar:
int main() { int size = 10; int arr[size]; }
Dalam C Standard (8.3.4/1), saiz tatasusunan mestilah "ungkapan pemalar bersepadu." Saiz, dalam contoh di atas, nampaknya tidak mempunyai sifat ini.
Tatasusunan Panjang Pembolehubah (VLA) dan Status Kompilasi
Kod berjaya disusun dengan gcc 4.8 dan Clang 3.2 kerana kedua-dua penyusun menyokong tatasusunan panjang berubah (VLA) sebagai sambungan dalam C . Walau bagaimanapun, Visual Studio CTP menolak kod dengan mesej ralat yang menunjukkan bahawa saiz adalah sifar. Tingkah laku ini selaras dengan Standard C, yang tidak membenarkan tatasusunan saiz berubah-ubah.
Amaran Pengkompil dan Sambungan Bahasa
Sesetengah penyusun, seperti gcc dan clang, memberikan amaran apabila menggunakan VLA dengan bendera -pedantic. Bendera ini memberi amaran tentang potensi ciri bukan standard, menunjukkan bahawa kod tersebut melanggar Standard C. Dalam kes ini, kekurangan saiz malar untuk tatasusunan menjadikan penggunaan VLA tidak sesuai.
Ungkapan Malar Integral
Ungkapan malar bersepadu, mengikut piawaian draf C (5.19 .3), mesti memenuhi syarat tertentu. Dalam keadaan ini, saiz yang dimulakan dengan literal melayakkannya sebagai ungkapan pemalar integral. Walau bagaimanapun, untuk mematuhi Piawaian C, "const" atau "constexpr" harus digunakan untuk mengisytiharkannya secara eksplisit seperti:
const int size = 10;
atau
constexpr int size = 10;
Kesimpulan
Walaupun tatasusunan panjang berubah memberikan fleksibiliti, penggunaannya mesti seimbang dengan pematuhan standard. Penyusun seperti Visual Studio mematuhi C Standard dan menolak kod yang melanggar peraturannya. Dengan memahami konsep ungkapan pemalar integral dan mempertimbangkan sambungan bahasa, pembangun boleh memastikan bahawa kod mereka memenuhi kedua-dua keperluan kefungsian dan penyeragaman.
Atas ialah kandungan terperinci Adakah Tatasusunan Panjang Boleh Ubah dalam C Menepati Piawaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!