Rumah > pembangunan bahagian belakang > C++ > Adakah Permulaan Kendiri Pembolehubah Tidak Dimulakan dalam C/C Gelagat Tidak Ditakrifkan?

Adakah Permulaan Kendiri Pembolehubah Tidak Dimulakan dalam C/C Gelagat Tidak Ditakrifkan?

Patricia Arquette
Lepaskan: 2024-11-09 02:40:02
asal
1070 orang telah melayarinya

Is Self-Initialization of Uninitialized Variables in C/C   Undefined Behavior?

Pemulaan Kendiri Pembolehubah Tidak Dimulakan: Bahaya dan Piawaian

Coretan kod C/C di bawah:

int i = i;
Salin selepas log masuk

telah menimbulkan kebimbangan dalam kalangan pembangun, kerana ia menggunakan pembolehubah yang tidak dimulakan untuk memulakan dirinya sendiri. Penyusun moden menerima kod ini tanpa amaran, menimbulkan persoalan tentang kesahihannya dan kelakuan asas yang ditakrifkan oleh piawaian.

Penerimaan dan Piawaian Pengkompil

Mengikut piawaian C11, pembolehubah yang tidak dimulakan mempunyai nilai yang tidak tentu, yang boleh menjadi nilai yang tidak ditentukan atau perwakilan perangkap. Dalam situasi di mana nilai tak tentu menjadi nilai perangkap, menggunakannya boleh membawa kepada gelagat tidak ditentukan jika pelaksanaan menyokong bit padding dalam integer.

Walau bagaimanapun, jika pelaksanaan tidak menggunakan padding, nilainya tidak ditentukan, dan tiada gelagat yang tidak ditentukan.

Senario Tidak Ditakrifkan

Tingkah laku menggunakan pembolehubah tidak diinisialisasi untuk permulaan kendiri menjadi lebih tidak dapat diramalkan jika alamat pembolehubah tidak pernah diambil . Bahagian 6.3.2.1p2 piawaian C11 menjelaskan bahawa penggunaan sedemikian tidak ditentukan untuk objek tempoh storan automatik yang boleh diisytiharkan dengan kelas storan daftar.

Implikasi

Walaupun penerimaan pengkompil, menggunakan pembolehubah yang tidak dimulakan untuk permulaan kendiri adalah tidak digalakkan amalan. Ia boleh membawa kepada tingkah laku yang salah atau potensi tingkah laku yang tidak ditentukan bergantung pada pelaksanaan, menjadikan kod itu tidak boleh dipercayai. Sentiasa mulakan pembolehubah secara eksplisit untuk mengelakkan perangkap ini.

Atas ialah kandungan terperinci Adakah Permulaan Kendiri Pembolehubah Tidak Dimulakan dalam C/C Gelagat Tidak Ditakrifkan?. 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