Permulaan Pengisytiharan Pembolehubah dalam C/C : Tingkah Laku Mengejutkan
Sintaks pengisytiharan dan permulaan yang biasa dalam C/C membenarkan permulaan bagi pembolehubah semasa pengisytiharan mereka. Walau bagaimanapun, tingkah laku pelik timbul apabila pembolehubah yang akan dimulakan muncul dalam ungkapan permulaan itu sendiri. Pertimbangkan coretan kod:
<code class="cpp">int x = x + 1;</code>
Kod ini berjaya menyusun, dan yang menghairankan, nilai x menjadi 1 selepas pelaksanaan. Tingkah laku ini mungkin kelihatan berlawanan dengan intuitif, kerana pembolehubah x nampaknya tidak diisytiharkan sebelum penggunaannya dalam permulaan.
Penjelasan: Titik Pengisytiharan dan Tingkah Laku Tidak Ditakrifkan
Dalam C , titik pengisytiharan untuk pembolehubah adalah serta-merta selepas pengisytiharan lengkap (jenis dan nama pembolehubah) dan sebelum pemula (jika ada). Oleh itu, dalam kod di atas, x wujud pada tanda sama, membenarkan ia digunakan di sebelah kanan.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa melainkan pembolehubah dimulakan dengan tempoh storan statik (cth., di luar fungsi), tingkah laku tidak ditentukan. Ini kerana x yang wujud sebelum permulaan mempunyai nilai arbitrari.
Piawaian C 03 menentukan bahawa untuk pembolehubah yang dimulakan dengan nilainya sendiri (tidak tentu), seperti dalam contoh dalam soalan, tingkah laku tidak ditentukan:
int x = x; // Example from the C++03 standard { int x = x; // Undefined behavior }
Implikasi Praktikal
Walaupun tingkah laku ini mungkin mengejutkan, adalah penting untuk mengelak daripada menggunakannya dalam kod pengeluaran. Melainkan pembolehubah diisytiharkan dengan tempoh storan statik, gelagat yang tidak ditentukan boleh membawa kepada keputusan dan ralat yang tidak dapat diramalkan.
Walau bagaimanapun, memahami tingkah laku ini boleh terbukti berguna dalam memahami ungkapan kompleks yang melibatkan pembolehubah yang baru diisytiharkan atau dalam menganalisis kod dengan pengamulaan yang tidak konvensional teknik.
Atas ialah kandungan terperinci Mengapakah `int x = x 1;` Berfungsi dalam C/C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!