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

Patricia Arquette
Lepaskan: 2024-10-26 04:56:30
asal
818 orang telah melayarinya

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>
Salin selepas log masuk
<code class="cpp">i = 3;
++i;
i = i - 1; // Final value: 4</code>
Salin selepas log masuk
<code class="cpp">i = 3;
i = i;
++i; // Final value: 3</code>
Salin selepas log masuk

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!

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!