Rekursi dalam fungsi main(): Gelagat Pengkompil yang Tidak Dijangka
Panggilan ke fungsi main() biasanya tidak dibenarkan dalam C . Walau bagaimanapun, dalam amalan, ia mungkin boleh dilakukan pada beberapa platform, terutamanya pada sistem Linux dengan pengkompil g. Mari kita mendalami cara tingkah laku ini dicapai.
Dalam contoh kod yang disediakan:
<code class="cpp">#include <iostream> #include <cstdlib> int main() { cout << "!!!Hello World!!!" << endl; system("pause"); return main(); }</code>
Panggilan ke main() dalam fungsi main() membenarkan gelung tanpa henti. Walau bagaimanapun, ini bukan kelakuan C standard.
Sihir Pengkompil atau Tingkah Laku Tidak Ditakrifkan?
Adakah mungkin untuk mendapatkan fungsi berjalan semasa menggunakan pembolehubah ajaib atau makro? Tidak, tiada peruntukan sedemikian dalam Piawaian C.
Pengecualian Pengkompil Linux
Walaupun terdapat larangan Standard, pengkompil Linux g menyusun kod dengan panggilan main() dalam main() tanpa menimbulkan ralat. Ini disebabkan oleh tafsiran lembut pengkompil bagi Piawaian C.
Demonstrasi Praktikal
Pertimbangkan kod berikut:
<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 dengan g , kod ini menjana kod pemasangan yang kelihatan seperti:
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
Dalam kod pemasangan ini, utama dipanggil sama seperti fungsi lain. Panggilan ke main() dalam fungsi main() diterjemahkan ke dalam panggilan fungsi biasa.
Kesimpulan
Semasa memanggil main() dari dalam main() ialah tidak dibenarkan oleh Piawaian C, ia mungkin boleh dilakukan pada platform tertentu dengan penyusun khusus yang bertolak ansur dengan tingkah laku sedemikian. Walau bagaimanapun, adalah penting untuk menekankan bahawa ini bukan standard C dan boleh membawa kepada hasil yang tidak dijangka dalam persekitaran atau versi penyusun yang berbeza.
Atas ialah kandungan terperinci Bolehkah fungsi main() memanggil dirinya dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!