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

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

DDD
Lepaskan: 2024-12-18 18:52:11
asal
183 orang telah melayarinya

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();
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan