Rumah >pembangunan bahagian belakang >C++ >Adakah Tatasusunan Panjang Boleh Ubah dalam C Menepati Piawaian?

Adakah Tatasusunan Panjang Boleh Ubah dalam C Menepati Piawaian?

Susan Sarandon
Susan Sarandonasal
2024-12-12 20:53:12394semak imbas

Do Variable-Length Arrays in C   Conform to the Standard?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Adakah Byte Sentiasa 8 Bit?Artikel seterusnya:Adakah Byte Sentiasa 8 Bit?