Adakah main() Benar-benar Titik Permulaan Program C?
Standard C, dalam seksyen 3.6.1/1, mengisytiharkan bahawa program mesti mempunyai fungsi global bernama utama, yang berfungsi sebagai titik permulaan yang ditetapkan. Walau bagaimanapun, analisis lanjut dan contoh kod ilustrasi telah mempersoalkan kesahihan pernyataan 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 mencapai tujuan yang dimaksudkan: ia mengeluarkan petak daripada integer dari 0 hingga 9. Walau bagaimanapun, aspek yang membingungkan terletak pada fakta bahawa fungsi user_main() dilaksanakan sebelum main(), iaitu kononnya titik permulaan program. Menyusun kod ini dengan pilihan -pedantic menggunakan GCC 4.5.0 tidak menimbulkan ralat atau amaran.
Pemerhatian ini menimbulkan soalan: adakah kod ini mematuhi Standard?
Untuk menjawab soalan ini, kita mesti mendalami maksud frasa "permulaan program." Piawaian mentakrifkan istilah ini khusus untuk konteks Piawaian itu sendiri. Ia tidak menegaskan bahawa tiada kod boleh dilaksanakan sebelum main(). Sebaliknya, ia menetapkan bahawa permulaan program ialah titik di mana main() bermula.
Dalam kes kod contoh ini, user_main() dijalankan sebelum atur cara "bermula," mengikut definisi disediakan oleh Standard. Oleh itu, kod ini mematuhi sepenuhnya. Mengikut reka bentuk, kod penting selalunya dilaksanakan sebelum main() dipanggil, termasuk contoh ini.
Oleh itu, salah tanggapan timbul daripada salah tafsir takrif Standard. Demi perbincangan Standard, user_main() dilaksanakan sebelum program "bermula", dan tingkah laku ini kekal mematuhi Standard sepenuhnya.
Atas ialah kandungan terperinci Adakah `main()` Sentiasa Menandakan Permulaan Sebenar bagi Perlaksanaan Program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!