Rumah >pembangunan bahagian belakang >C++ >Adakah `int size = 10;` Ungkapan Malar yang Sah untuk Saiz Tatasusunan dalam C ?

Adakah `int size = 10;` Ungkapan Malar yang Sah untuk Saiz Tatasusunan dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-12-09 21:15:10499semak imbas

Is `int size = 10;` a Valid Constant Expression for Array Sizing in C  ?

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:

  • Menggunakan const: const int size = 10;
  • Menggunakan constexpr: constexpr int size = 10;

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!

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