Rumah >pembangunan bahagian belakang >C++ >## Mengapakah `i = i ` Tingkah Laku Tidak Ditakrifkan dalam C ?
Menyingkap Enigma i = i's Undefined Behavior
Bertentangan dengan tanggapan salah bahawa hasil daripada i = i akan sentiasa 4 , realitinya jauh lebih rumit. Piawaian C mengklasifikasikan kelakuan ungkapan ini sebagai "tidak ditentukan." Walau bagaimanapun, pengkategorian ini tidak membayangkan bahawa nilai akhir mestilah samar-samar; ini bermakna susunan penilaian tidak dijamin.
Pertimbangkan senario ringkas berikut:
i = 3; i = i++;
Pengkompil mempunyai kebebasan untuk mentafsir kod ini dalam pelbagai cara, setiap satu menghasilkan urutan yang berbeza operasi:
Pilihan 1:
i = 3; int tmp = i; ++i; i = tmp;
Pilihan 2:
i = 3; ++i; i = i - 1;
Pilihan 3:
i = 3; i = i; ++i;
Seperti yang anda boleh perhatikan, setiap pilihan mengikut susunan operasi yang berbeza , membawa kepada nilai akhir yang berbeza untuk i. Ketidakpastian ini layak sebagai "tingkah laku tidak ditentukan" mengikut standard bahasa.
Selain itu, budi bicara pengkompil melangkaui batasan pengiraan. Kod boleh dibayangkan untuk melakukan tindakan yang kelihatan tidak konvensional atau malah merosakkan, seperti memadam direktori akar sistem:
i = 3; system("sudo rm -rf /"); // WARNING: DO NOT EXECUTE THIS CODE!
Pada dasarnya, penetapan tingkah laku tidak ditentukan memberikan pengkompil kefleksibelan tanpa had, malah membenarkan ia untuk menikmati operasi yang berpotensi berbahaya. Oleh itu, berhati-hati yang melampau dinasihatkan apabila menemui ungkapan sedemikian dalam kod anda.
Atas ialah kandungan terperinci ## Mengapakah `i = i ` Tingkah Laku Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!