Rumah > pembangunan bahagian belakang > C++ > Adakah Perintah Penilaian Hujah Tak Tentu C Pernah Mempengaruhi Gelagat Program?

Adakah Perintah Penilaian Hujah Tak Tentu C Pernah Mempengaruhi Gelagat Program?

DDD
Lepaskan: 2024-12-26 17:25:12
asal
124 orang telah melayarinya

Does C  's Indeterminate Argument Evaluation Order Ever Affect Program Behavior?

Penyusun dan Perintah Penilaian Argumen Tak Tentu

Piawaian C membenarkan pelaksanaan menilai hujah fungsi dalam sebarang susunan. Adakah ini pernah memberi kesan kepada tingkah laku program?

Isu Anggapan

Pertimbangkan coretan kod berikut:

int i = 0;
foo(i++, i++);
Salin selepas log masuk

Jika hujah dinilai dari kiri ke kanan , saya akan dinaikkan dua kali sebelum dihantar kepada foo. Walau bagaimanapun, jika hujah dinilai dari kanan ke kiri, saya akan dinaikkan sekali sahaja. Bolehkah ini menyebabkan masalah?

Penyusun dan Penilaian Argumen

Walaupun susunan penilaian hujah bergantung pada pelaksanaan, kebanyakan penyusun mematuhi konvensyen panggilan seni bina sasaran. Pada x86, konvensyen panggilan Pascal menilai argumen dari kiri ke kanan, manakala konvensyen panggilan C (__cdecl) menilai mereka dari kanan ke kiri.

Penyusun sering mengambil kira perkara ini, terutamanya untuk program merentas platform, untuk mengelakkan perkara yang tidak dijangka tingkah laku.

Kesimpulan

Penilaian hujah susunan tidak bergantung kepada bahasa tetapi bergantung pada platform dan pelaksanaan. Walaupun piawaian tidak menentukan susunannya, pengkompil biasanya mengikut konvensyen panggilan seni bina sasaran dan boleh melaraskan susunan penilaian dengan sewajarnya. Ini memastikan kod yang ditulis dengan buruk akan berfungsi secara konsisten, berdasarkan konvensyen panggilan yang betul.

Atas ialah kandungan terperinci Adakah Perintah Penilaian Hujah Tak Tentu C Pernah Mempengaruhi Gelagat Program?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan