Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi `utama` Memanggil Sendiri secara Rekursif dalam C ?

Bolehkah Fungsi `utama` Memanggil Sendiri secara Rekursif dalam C ?

DDD
DDDasal
2024-12-18 18:52:11186semak imbas

Can the `main` Function Recursively Call Itself in C  ?

Bolehkah Fungsi utama Memanggil Sendiri dalam C ?

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:

  • Atur cara mungkin ranap.
  • Atur cara mungkin berjalan selama-lamanya.
  • Atur cara mungkin merosakkan ingatan.

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!

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