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

Susan Sarandon
Lepaskan: 2024-10-28 05:29:02
asal
623 orang telah melayarinya

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>
Salin selepas log masuk
<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0}; // Compile Error</code>
Salin selepas log masuk

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>
Salin selepas log masuk

dan

<code class="cpp">int a = foo();
const int size = a;</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!