Adakah Infinite Recursion Undefined Behavior (UB)?
Dalam bidang pengaturcaraan C, persoalan sama ada rekursi infinite merupakan Undefined Behavior ( UB) telah menjadi topik perdebatan. Walaupun senario tertentu yang melibatkan gelung telah dikenal pasti sebagai UB, masih tidak pasti sama ada rekursi tak terhingga itu sendiri termasuk di bawah klasifikasi ini.
Dalam C 11, program yang mengandungi gelung tak terhingga tanpa kesan sampingan, seperti ditunjukkan di bawah, dianggap UB:
<code class="cpp">int main() { while (true) {} }</code>
Ini didokumenkan dalam piawaian C sebagai 1.10p24: "Pelaksanaan mungkin menganggap bahawa mana-mana urutan akhirnya akan melakukan salah satu daripada yang berikut: menamatkan, membuat panggilan ke fungsi I/O perpustakaan , akses atau ubah suai objek yang tidak menentu, atau lakukan operasi penyegerakan atau operasi atom." Memandangkan gelung tak terhingga tanpa kesan sampingan tidak akan melakukan mana-mana tindakan ini, tindakan ini dianggap UB.
Timbul persoalan sama ada program berikut, yang melibatkan pengulangan tak terhingga, juga membentuk UB:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
Walaupun program di atas boleh diandaikan secara intuitif sebagai UB, piawaian tersebut tidak secara eksplisit menangani senario khusus ini. Petikan yang berkaitan dalam 1.10p24 merujuk kepada gelung, bukan rekursif.
Walau bagaimanapun, perlu diperhatikan bahawa rekursi yang berlebihan boleh menyebabkan had pelaksanaan bilangan panggilan fungsi rekursif bersarang dilampaui. Perkara ini selalu berlaku dan boleh mengakibatkan tingkah laku yang tidak ditentukan, tanpa mengira klasifikasi UB rekursi itu sendiri.
Atas ialah kandungan terperinci ## Adakah Rekursi Infinite dalam C Dianggap Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!