## Mengapakah `i = i ` Tingkah Laku Tidak Ditakrifkan dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-10-26 02:34:02
asal
746 orang telah melayarinya

## Why is `i = i  ` Undefined Behavior in 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++;
Salin selepas log masuk

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;
    Salin selepas log masuk
  • Pilihan 2:

    i = 3;
    ++i;
    i = i - 1;
    Salin selepas log masuk
  • Pilihan 3:

    i = 3;
    i = i;
    ++i;
    Salin selepas log masuk

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!
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!