Rumah > Artikel > pembangunan bahagian belakang > Bolehkah g Memanggil `main()` secara Rekursif dalam C Walaupun Standard Melarangnya?
Memanggil main() secara rekursif dalam C
Piawaian C menetapkan bahawa memanggil main() secara rekursif tidak dibenarkan. Walau bagaimanapun, pengkompil g membenarkan amalan ini, membenarkan kod luar biasa seperti:
<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(); }
Setelah dilaksanakan:
> g++ g.cpp; ./a.out y = 3 y = 6 y = 7</code>
Memeriksa kod pemasangan mendedahkan bahawa utama digunakan sama dengan mana-mana fungsi lain :
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
Walaupun tingkah laku ini tidak diseragamkan, g nampaknya mempunyai pendekatan yang santai untuk menguatkuasakan standard, seperti yang dibuktikan oleh kekurangan bantahannya. Walau bagaimanapun, ia mengeluarkan amaran sarkastik apabila menggunakan bendera -pedantic:
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Atas ialah kandungan terperinci Bolehkah g Memanggil `main()` secara Rekursif dalam C Walaupun Standard Melarangnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!