Adakah Main() benar-benar Permulaan Program C?
Piawaian C menyatakan dalam seksyen $3.6.1/1 bahawa setiap program mesti termasuk fungsi global bernama utama, yang berfungsi sebagai titik permulaan yang ditetapkan. Walau bagaimanapun, senario timbul di mana pernyataan ini nampaknya dicabar.
Pertimbangkan contoh 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 berjaya melaksanakan tujuan yang dimaksudkan dengan mencetak petak integer dari 0 hingga 9 sebelum memasuki fungsi utama(). Menariknya, kod tersebut disusun tanpa ralat atau amaran apabila menggunakan bendera -pedantic dalam GCC 4.5.0.
Pemerhatian ini menimbulkan persoalan tentang dakwaan Standard bahawa main() ialah titik permulaan program. Kod tersebut nampaknya melaksanakan fungsi yang ditentukan pengguna sebelum memasuki titik permulaan yang ditetapkan.
Takrifan "Mula"
Pertikaian bergantung pada takrifan tepat " permulaan program." Standard tidak mentakrifkan istilah ini secara eksplisit, meninggalkan ruang untuk tafsiran. Sesetengah mungkin berpendapat bahawa "mula" membayangkan pelaksanaan awal kod, yang dalam kes ini berlaku dalam user_main(). Orang lain mungkin berpendapat bahawa "mula" merujuk kepada titik permulaan yang ditetapkan seperti yang ditakrifkan oleh spesifikasi bahasa.
Perbezaan utama terletak pada tafsiran ayat C Standard:
Sesuatu program hendaklah mengandungi fungsi global yang dipanggil utama, iaitu permulaan program yang ditetapkan.
Standard pada dasarnya mentakrifkan istilah "mula" dalam konteks standard itu sendiri. Ia tidak menegaskan bahawa tiada kod dilaksanakan sebelum main() dipanggil. Sebaliknya, ia menetapkan main() sebagai titik permulaan yang ditetapkan program untuk semua perbincangan dan takrifan seterusnya.
Berdasarkan tafsiran ini, sampel kod yang disediakan kekal mematuhi Piawaian C. Fungsi user_main() dilaksanakan sebelum "permulaan" program seperti yang ditakrifkan oleh Standard. Pelaksanaan terdahulu ini tidak membatalkan titik permulaan yang ditetapkan bagi program di main().
Oleh itu, kesimpulannya ialah main() mengekalkan penetapannya sebagai titik permulaan program C, walaupun kod yang ditentukan pengguna mungkin dilaksanakan sebelum titik permulaan yang ditetapkan ini dicapai. Takrifan "mula" Standard menjelaskan pemahaman ini.
Atas ialah kandungan terperinci Adakah `main()` Benar-benar Baris Pertama Pelaksanaan dalam Program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!