Rumah > pembangunan bahagian belakang > C++ > Adakah `main()` Benar-benar Baris Pertama Pelaksanaan dalam Program C?

Adakah `main()` Benar-benar Baris Pertama Pelaksanaan dalam Program C?

Mary-Kate Olsen
Lepaskan: 2024-12-14 01:02:06
asal
505 orang telah melayarinya

Is `main()` Really the First Line of Execution in a C   Program?

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan