Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saiz Tatasusunan Tidak Boleh Dimulakan dengan Pembolehubah `const int` dalam C ?

Mengapa Saiz Tatasusunan Tidak Boleh Dimulakan dengan Pembolehubah `const int` dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-10-28 05:29:02624semak imbas

Why Can't Array Sizes Be Initialized with `const int` Variables in C  ?

Mengapa Had Saiz Tatasusunan dengan Const Int Kadangkala Dikuatkuasakan?

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?

Penjelasan

Piawaian C menentukan had saiz tatasusunan ini berdasarkan sifat ungkapan yang digunakan untuk memulakan saiz.

Ungkapan Malar

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.

Ungkapan Bukan Malar

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.

Ketidakbolehubahan adalah Tidak Relevan

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.

Kerumitan Analisis Aliran

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!

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