Dalam C , saiz tatasusunan boleh ditentukan menggunakan integer malar. Walau bagaimanapun, fleksibiliti ini mempunyai had, seperti yang ditunjukkan oleh contoh berikut:
<code class="cpp">const int size = 2; int array[size] = {0}; // Allowed</code>
<code class="cpp">int a = 2; const int size = a; int array[size] = {0}; // Compile Error</code>
Mengapakah contoh pertama berjaya disusun manakala yang kedua gagal?
Piawaian C menentukan had saiz tatasusunan ini berdasarkan sifat ungkapan yang digunakan untuk memulakan saiz.
Dalam contoh pertama, saiz const int = 2; ialah ungkapan malar kerana nilai saiz diketahui pada masa penyusunan. Memandangkan pengkompil mengetahui saiz tatasusunan, ia boleh memperuntukkan memori yang diperlukan semasa penyusunan.
Dalam contoh kedua, const int size = a; bukan ungkapan malar kerana nilai a tidak ditentukan sehingga masa jalan. Ini menghalang pengkompil daripada mengetahui saiz tatasusunan semasa penyusunan, menjadikannya mustahil untuk memperuntukkan memori pada masa penyusunan.
Perhatikan bahawa contoh kedua masih mempunyai nilai berterusan yang berkesan untuk saiz , tetapi ini tidak dipertimbangkan oleh pengkompil. Peraturan memfokuskan pada jenis ungkapan yang digunakan, dan int a = 2; menggunakan pembolehubah boleh ubah, menjadikannya ungkapan tidak tetap.
Membenarkan permulaan masa jalan untuk peruntukan masa kompilasi memerlukan analisis aliran. Pengkompil perlu membezakan antara ungkapan seperti:
<code class="cpp">int a = 2; const int size = a;</code>
dan
<code class="cpp">int a = foo(); const int size = a;</code>
di mana ungkapan saiz adalah sama, tetapi nilai sebenar bergantung pada tingkah laku masa jalan. Kerumitan ini dianggap tidak perlu oleh jawatankuasa C.
Atas ialah kandungan terperinci Mengapa Saiz Tatasusunan Tidak Boleh Dimulakan dengan Pembolehubah `const int` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!