Mengapakah gelung ini menghasilkan "amaran: lelaran 3u memanggil tingkah laku yang tidak ditentukan" dan mengeluarkan lebih daripada 4 baris?
GCC menghasilkan amaran " amaran: lelaran 3u memanggil tingkah laku yang tidak ditentukan" kerana ia mengesan bahawa operasi limpahan integer yang ditandatangani i * 1000000000 dalam keadaan gelung menghasilkan tingkah laku yang tidak ditentukan. Mengikut piawaian C, gelagat yang tidak ditentukan boleh membawa kepada apa-apa sahaja, termasuk output yang tidak dijangka.
Mengapakah nilai i dipecahkan oleh operasi limpahan?
Limpahan integer berlaku apabila hasil operasi aritmetik melebihi nilai maksimum yang boleh diwakili untuk jenis data. Dalam kes ini, jenis data ialah int, yang mempunyai nilai maksimum 2,147,483,647. Apabila limpahan integer berlaku, hasilnya dipenggal dan dililitkan kepada nilai minimum jenis data, iaitu -2,147,483,648. Ini bermakna nilai i dipecahkan oleh operasi limpahan dan menjadi sama dengan -2,147,483,648.
Mengapakah gelung mengeluarkan lebih daripada 4 baris?
Gelung keadaan dinilai kepada benar manakala i kurang daripada 4. Walau bagaimanapun, disebabkan limpahan integer, nilai i rosak dan menjadi sama dengan -2,147,483,648. Nilai ini tidak kurang daripada 4, tetapi ia masih merupakan nilai integer yang sah dan gelung akan terus dilaksanakan sehingga ia mencapai nilai yang lebih besar daripada 4 atau apabila syarat penamatan dipenuhi.
Atas ialah kandungan terperinci Mengapa Limpahan Integer Bertanda Menyebabkan Gelung Menghasilkan Gelagat Tidak Ditakrifkan dan Keluaran Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!