Piawaian C menggariskan fungsi utama sebagai titik masuk asas untuk setiap program. Walau bagaimanapun, persoalan timbul: "Adakah boleh untuk memanggil main() dari dalam dirinya sendiri?"
Mengikut Piawaian C, no. Fungsi utama, setelah ditakrifkan dan dilaksanakan, menandakan permulaan dan penghujung program. Memanggil main() secara rekursif melanggar prinsip asas ini.
Walau bagaimanapun, dalam amalan, penyusun tertentu seperti Linux's g membenarkan panggilan tidak konvensional main() dalam main(). Tingkah laku ini tidak disokong secara eksplisit oleh standard tetapi dibenarkan oleh pelaksanaan pengkompil.
Sebagai contoh, pertimbangkan kod berikut:
<code class="c++">#include <iostream> #include <cstdlib> using namespace std; int main() { int y = rand() % 10; // random number generation cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
Kod ini melaksanakan penjanaan nombor rawak, dan jika nombor yang dijana tidak sama dengan 7, ia secara rekursif memanggil main().
Memeriksa kod pemasangan yang dijana oleh g mendedahkan bahawa main() digunakan sama seperti fungsi lain :
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
Perlu diperhatikan bahawa semasa g menyusun kod tersebut, ia menghasilkan amaran dengan bendera -pedantic untuk mengingatkan anda bahawa ia melanggar Standard C:
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Walaupun memanggil main() dalam dirinya sendiri mungkin berfungsi dalam sesetengah situasi, ia tidak dibenarkan secara rasmi oleh Standard C. Ini adalah pelanggaran tingkah laku standard dan boleh membawa kepada hasil yang tidak ditentukan merentas penyusun dan platform yang berbeza. Oleh itu, amat tidak digalakkan untuk bergantung pada amalan tidak konvensional ini dalam kod pengeluaran.
Atas ialah kandungan terperinci Bolehkah Anda Memanggil main() Secara Rekursif dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!