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++);
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!