Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi `main()` C Menjadi Rekursif?

Bolehkah Fungsi `main()` C Menjadi Rekursif?

Linda Hamilton
Linda Hamiltonasal
2024-11-28 22:54:14331semak imbas

Can C  's `main()` Function Be Recursive?

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!

Kenyataan:
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