Dilema Sukar untuk Pemulaan Saiz Tatasusunan dengan const int
Dalam alam C , penggunaan pemalar untuk permulaan saiz tatasusunan sering menimbulkan dilema yang membingungkan. Walaupun sesetengah situasi membenarkan amalan ini dengan lancar, yang lain mencetuskan ralat kompilasi samar.
Pertimbangkan coretan kod berikut:
<code class="cpp">const int size = 2; int array[size] = {0};</code>
Dalam contoh ini, pengkompil dengan senang hati membenarkan pengisytiharan tatasusunan dengan saiz yang ditentukan oleh 'saiz' pembolehubah malar. Sebabnya terletak pada sifat ungkapan permulaan untuk 'saiz'. Ia adalah ungkapan yang berterusan, bermakna ia boleh dinilai sepenuhnya pada masa penyusunan. Ini membolehkan pengkompil menentukan saiz tepat tatasusunan semasa penyusunan, memudahkan peruntukan memori dengan sewajarnya.
Berbeza dengan perkara di atas, lihat coretan ini:
<code class="cpp">int a = 2; const int size = a; int array[size] = {0};</code>
Di sini, pengkompil melemparkan patut, meratapi "ralat penyusunan." Inti masalahnya terletak pada ungkapan yang digunakan untuk memulakan 'saiz'. Ia melibatkan pembolehubah tidak tetap ('a'). Ini menurunkan ungkapan kepada alam ungkapan tidak tetap. Akibatnya, pengkompil tidak dapat memastikan saiz tatasusunan pada masa penyusunan.
Tingkah laku ini berpunca daripada keputusan asas oleh jawatankuasa piawaian C. Jawatankuasa mengutamakan kesederhanaan dan eksplisit daripada fleksibiliti. Melaksanakan yang terakhir akan memerlukan analisis aliran yang kompleks, membezakan antara ungkapan yang tidak boleh diubah suai seperti 'const int size = a;' dan ungkapan yang benar-benar tidak tetap seperti 'const int size = foo();'. Kerumitan sedemikian dianggap tidak diingini.
Oleh itu, peraturan kekal: saiz tatasusunan hanya boleh dimulakan menggunakan ungkapan malar. Ini memastikan bahawa pengkompil boleh menentukan saiz tatasusunan dengan jelas, memastikan peruntukan memori boleh diramal dan penyusunan lancar. Sentiasa ingat peraturan ini apabila menceburi dunia pemulaan saiz tatasusunan.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Saiz Tatasusunan dengan Pembolehubah `const int` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!