Memanggil Fungsi Utama Secara Rekursif dalam C
Coretan kod memberikan percubaan untuk memanggil fungsi main() secara rekursif dalam dirinya sendiri dalam C . Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini tidak dibenarkan dalam pematuhan C yang ketat.
Adakah Panggilan Rekursif main() Dibenarkan dalam C ?
Mengikut Standard C , fungsi tidak boleh memanggil dirinya secara langsung, termasuk fungsi main(). Sekatan ini bertujuan untuk mengelakkan pengulangan tak terhingga dan menjamin penamatan program.
Pelaksanaan Praktikal dengan g
Walaupun standard bahasa, adalah mungkin untuk memanggil main() secara rekursif dalam amalan menggunakan pengkompil GNU C (g ). g tidak menguatkuasakan standard dengan ketat dalam hal ini, membenarkan kod dengan panggilan main() rekursif untuk menyusun dan melaksanakan.
Kod Contoh
Coretan kod yang diubah suai berikut menunjukkan panggilan main() rekursif menggunakan g :
<code class="cpp">#include <cstdlib> #include <iostream> using namespace std; int main() { int y = rand() % 10; // returns 3, then 6, then 7 cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
Apabila disusun dan dilaksanakan, kod ini akan menjana output berikut:
y = 3 y = 6 y = 7
Analisis Perhimpunan
Memeriksa pemasangan yang dijana untuk kod ini mendedahkan bahawa g memperlakukan panggilan rekursif main() seperti mana-mana panggilan fungsi lain:
main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret
Nota:
Sementara tingkah laku ini boleh dilakukan dengan g , adalah penting untuk ambil perhatian bahawa ia tidak dijamin. Penyusun lain mungkin mematuhi Piawaian C dengan ketat, mengakibatkan ralat penyusunan atau tingkah laku yang tidak dijangka. Oleh itu, menggunakan panggilan main() rekursif bukanlah amalan yang disyorkan.
Atas ialah kandungan terperinci Adakah Memanggil `main()` Secara Rekursif Dibenarkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!