Gelagat Pembolehubah Tidak Dimulakan Digunakan Sebagai Pemula Sendiri
Kod dalam C/C ini menimbulkan persoalan tentang kelakuannya:
int i = i;
Walaupun terdapat pembolehubah yang tidak dimulakan, kod ini disusun tanpa amaran dan ralat. Mengapa ini berlaku, dan apakah yang dikatakan piawai tentang kelakuannya?
Nilai Tidak Tentu dan Kebergantungan Pelaksanaan
Apabila pembolehubah seperti i digunakan untuk memulakan dirinya sendiri, ia mengandungi nilai yang tidak tentu. Nilai ini sama ada boleh menjadi nilai yang tidak ditentukan atau perwakilan perangkap. Nilai yang tidak ditentukan tidak ditakrifkan oleh standard dan bergantung kepada pelaksanaan. Perwakilan perangkap, jika disokong oleh pelaksanaan, mencetuskan gelagat yang tidak ditentukan apabila digunakan.
Gelagat Tidak Ditakrifkan dengan Padding
Jika pelaksanaan memperuntukkan bit padding dalam jenis integer, dan jika nilai tak tentu ialah perwakilan perangkap, kemudian menggunakannya menghasilkan tingkah laku yang tidak ditentukan. Ini kerana mengakses perwakilan perangkap menyebabkan hasil yang tidak dijangka.
Nilai Tidak Ditentukan tanpa Padding
Walau bagaimanapun, jika pelaksanaan tidak memperuntukkan bit padding dalam integer, nilai tak tentu ialah hanya tidak ditentukan. Dalam kes ini, tiada gelagat yang tidak ditentukan dan nilai sebenar i ditentukan oleh pelaksanaan.
Gelagat Tidak Ditakrifkan dengan Alamat Diambil
Selain itu, tingkah laku itu boleh menjadi tidak ditakrifkan walaupun saya tidak mengambil alamatnya, seperti yang dinyatakan dalam piawaian C11:
"Jika nilai nilai menetapkan objek tempoh storan automatik yang boleh diisytiharkan dengan kelas storan daftar (tidak pernah alamat diambil), dan objek itu tidak dimulakan, tingkah lakunya tidak ditentukan."
Oleh itu, kelakuan kod ini bergantung kepada pelaksanaan dan boleh tidak ditentukan bergantung pada pelbagai faktor.
Atas ialah kandungan terperinci Mengapa Adakah `int i = i;` Menyusun dengan Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!