Sekatan Rekursif dalam Fungsi utama() C
Dalam C , penggunaan rekursi dalam fungsi main() telah menjadi subjek perbahasan. Banyak pembangun telah memerhatikan bahawa Koleksi Pengkompil GNU (g ) membenarkan pengulangan dalam main() walaupun terdapat larangan dalam piawaian C.
Sekatan Standard
Mengikut C standard (3.6.1/3), rekursi dalam main() adalah secara eksplisit dilarang:
"Fungsi utama tidak boleh digunakan (3.2) dalam program."
Takrifan "Digunakan"
Standard juga mentakrifkan "digunakan" sebagai objek atau fungsi tidak terlebih beban:
"Objek atau fungsi tidak terlebih beban digunakan jika ia nama muncul dalam ungkapan yang berpotensi dinilai."
Oleh itu, memanggil main() dari dalam dirinya sendiri merupakan "penggunaan" dan oleh itu tidak dibenarkan mengikut standard.
Gelagat Pengkompil
Walaupun larangan standard, g menyusun kod berikut tanpa ralat:
int main() { main(); }
Percanggahan ini timbul kerana tahap pengoptimuman lalai g termasuk fungsi sebaris yang lebih kecil daripada ambang prakonfigurasi. Memandangkan rekursi dalam kod ini ialah panggilan fungsi tunggal, ia berkemungkinan berada di bawah ambang dan diselaraskan oleh g .
Kesimpulan
Walaupun g boleh membenarkan pengulangan dalam utama () dalam sesetengah kes, piawaian C melarangnya. Pembangun harus mematuhi keperluan standard untuk memastikan ketepatan program dan kemungkinan masalah.
Atas ialah kandungan terperinci Bolehkah Fungsi `main()` C Menjadi Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!