Adakah Main() Permulaan Sebenar Program C? Menganalisis Coretan Kod Counterintuitive
Dalam bidang C , fungsi main() sering digembar-gemburkan sebagai titik permulaan pelaksanaan program. Walau bagaimanapun, sampel kod pelik mencabar andaian ini.
Pertimbangkan kod berikut:
int square(int i) { return i*i; } int user_main() { for ( int i = 0 ; i < 10 ; ++i ) std::cout << square(i) << endl; return 0; } int main_ret= user_main(); int main() { return main_ret; }
Kod ini nampaknya mencetak petak integer dari 0 hingga 9 sebelum memasuki fungsi yang seolah-olah bermula, utama (). Tambahan pula, ia menyusun tanpa ralat atau amaran di bawah bendera -pedantic dalam GCC 4.5.0.
Ini menimbulkan persoalan: Adakah kod ini mematuhi Piawaian C, yang menetapkan dalam seksyen 3.6.1/1 bahawa " Sesuatu program hendaklah mengandungi fungsi global yang dipanggil utama, yang merupakan permulaan program yang ditetapkan"?
Merungkai Definisi Standard
Untuk menjawab soalan ini, kita mesti menyelidiki semantik definisi Standard. Standard mentakrifkan istilah "mula" dalam konteks penggunaannya sendiri. Ia tidak mengisytiharkan bahawa tiada kod mendahului seruan main. Sebaliknya, ia menetapkan fungsi utama sebagai titik dari mana program memulakan pelaksanaannya.
Dalam hal ini, kod contoh mematuhi Standard. Walaupun user_main() melaksanakan sebelum permulaan main(), ini berlaku sebelum atur cara "bermula" mengikut definisi Standard.
Kesimpulan
Jujukan luar biasa pelaksanaan dalam coretan kod ini tidak membatalkan penegasan Standard bahawa main() menandakan permulaan program. Takrifan "mula" Standard membenarkan kod prolog dilaksanakan sebelum main(), seperti yang ditunjukkan oleh sampel kod yang menarik ini. Oleh itu, program ini kekal mematuhi sepenuhnya walaupun tingkah lakunya berlawanan dengan intuisi.
Atas ialah kandungan terperinci Adakah Fungsi `main()` C Benar-Benar Menandakan *Permulaan* Pelaksanaan Program?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!