Kod yang disediakan menunjukkan gelagat yang tidak ditentukan disebabkan limpahan integer. Limpahan integer berlaku apabila hasil operasi aritmetik melebihi nilai maksimum atau minimum yang boleh disimpan dalam jenis integer tertentu.
Penjelasan:
Dalam kes ini, operasi i*1000000000 menghasilkan limpahan integer kerana hasil darab dua integer 32-bit melebihi maksimum nilai yang boleh disimpan dalam integer 32-bit. Disebabkan oleh tingkah laku yang tidak ditentukan, apa sahaja boleh berlaku, termasuk:
Analisis Gelung Tak Terhingga:
Pengkompil mengoptimumkan gelung berdasarkan amaran tentang limpahan. Pengoptimuman menganggap bahawa i adalah kurang daripada atau sama dengan 2 selepas limpahan berlaku. Ini membawa kepada gelung tak terhingga kerana:
Kod Gelagat:
Keadaan penamatan yang salah dalam kod yang dioptimumkan membolehkan gelung diteruskan tanpa had, menghasilkan lebih daripada 4 baris output. Tingkah laku yang salah adalah hasil daripada tingkah laku yang tidak ditentukan yang disebabkan oleh limpahan integer.
Mencegah Tingkah Laku Tidak Ditakrifkan:
Untuk mengelakkan tingkah laku yang tidak ditentukan, pembangun hendaklah:
Atas ialah kandungan terperinci Mengapa Limpahan Integer Menyebabkan Gelagat Tidak Ditakrifkan dan Bilangan Talian Output Tidak Dijangka dalam Gelung C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!