Masalah:
Kod berikut disusun tanpa ralat tetapi memasuki tak terhingga gelung:
int main() { return main(); }
Jawapan:
Memanggil fungsi utama dari dalam dirinya sendiri dalam C menghasilkan tingkah laku yang tidak ditentukan. Tingkah laku yang tidak ditentukan bermakna apa-apa sahaja boleh berlaku, termasuk:
Piawaian C menyatakan dengan jelas bahawa fungsi utama tidak boleh dinamakan dengan ungkapan. Apabila panggilan utama memanggil sendiri, pengkompil mesti mengeluarkan mesej diagnostik dan bukan menyusun kod.
Walaupun keperluan standard ini, sesetengah pengkompil mungkin tidak mengeluarkan mesej diagnostik dan membenarkan atur cara untuk menyusun. Walau bagaimanapun, melaksanakan program sedemikian menimbulkan gelagat yang tidak ditentukan.
Gelagat Penyusun:
Penyusun tidak perlu menguatkuasakan semua peraturan piawaian C, termasuk peraturan yang melarang utama daripada memanggil dirinya sendiri. Mereka mungkin mengeluarkan amaran atau ralat, tetapi gelagat yang tepat berbeza-beza merentas tetapan pengkompil dan pengkompil yang berbeza.
Implikasi:
Panggilan utama secara rekursif adalah menyalahi undang-undang dalam C . Walaupun pengkompil membenarkannya, atur cara mempamerkan tingkah laku yang tidak ditentukan dan tidak boleh dipercayai.
Atas ialah kandungan terperinci Bolehkah Fungsi `utama` Memanggil Sendiri secara Rekursif dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!