Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah \"i = i ;\" Dianggap Kelakuan Tidak Ditakrifkan dalam C ?

Mengapakah \"i = i ;\" Dianggap Kelakuan Tidak Ditakrifkan dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 04:56:30819semak imbas

Why is

Adakah i = i Tingkah Laku Tertakrif atau Tingkah Laku Tidak Tertakrif?

Piawaian C menyatakan bahawa pernyataan "i = 3; i = i ; " mempamerkan tingkah laku yang tidak ditentukan. Pernyataan ini memberikan nilai 3 kepada pembolehubah i, diikuti dengan penetapan hasil ungkapan "i " kepada i.

Walau bagaimanapun, nampaknya nilai akhir i adalah jelas 4, tanpa mengira susunan penilaian. Oleh itu, mengapakah ia dianggap sebagai tingkah laku yang tidak ditentukan dan bukannya tingkah laku yang tidak ditentukan?

Sifat Tingkah Laku Tidak Tertakrif

Istilah "tingkah laku tidak ditentukan" menandakan bahawa tingkah laku sesuatu program tidak boleh diramalkan dengan pasti dan boleh berbeza-beza antara pelaksanaan atau pengoptimuman yang berbeza. Ini berbeza dengan "tingkah laku tidak ditentukan", di mana tingkah laku itu tidak ditakrifkan secara eksplisit tetapi mungkin masih konsisten merentas pelaksanaan.

Dalam kes "i = 3; i = i ;," terdapat beberapa potensi pesanan penilaian yang boleh dipilih oleh pengkompil, masing-masing dengan hasil yang berbeza. Contohnya:

<code class="cpp">i = 3;
int tmp = i;
++i;
i = tmp; // Final value: 4</code>
<code class="cpp">i = 3;
++i;
i = i - 1; // Final value: 4</code>
<code class="cpp">i = 3;
i = i;
++i; // Final value: 3</code>

Oleh kerana nilai akhir i berbeza-beza bergantung pada pelaksanaan, tingkah laku dianggap tidak ditentukan.

Implikasi Tingkah Laku Tidak Tertakrif

Dalam kes yang melampau, pengkompil mungkin dibenarkan untuk memancarkan kod yang menyebabkan atur cara memusnahkan diri, seperti dalam contoh berikut:

Oleh itu, walaupun terdapat keputusan yang jelas, "i = 3; i = i ;" sememangnya tingkah laku yang tidak ditentukan mengikut piawaian C, dengan kemungkinan akibat yang tidak dapat diramalkan.

Atas ialah kandungan terperinci Mengapakah \"i = i ;\" Dianggap Kelakuan Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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