ส่วน $ 3.6.1 / 1 จาก C ++ Standard อ่าน
โปรแกรมจะต้องมีฟังก์ชันโกลบอลที่เรียกว่าmainซึ่งเป็นจุดเริ่มต้นของโปรแกรม
ลองพิจารณารหัสนี้
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;
}
โค้ดตัวอย่างนี้ทำในสิ่งที่ฉันตั้งใจจะทำนั่นคือการพิมพ์กำลังสองของจำนวนเต็มตั้งแต่ 0 ถึง 9 ก่อนที่จะเข้าสู่main()
ฟังก์ชันซึ่งควรจะเป็น "start" ของโปรแกรม
ฉันยังรวบรวมด้วย-pedantic
ตัวเลือก GCC 4.5.0 มันไม่มีข้อผิดพลาดไม่เตือน!
ดังนั้นคำถามของฉันคือ
รหัสนี้เป็นไปตามมาตรฐานจริงหรือไม่?
หากเป็นไปตามมาตรฐานแล้วจะไม่ทำให้สิ่งที่มาตรฐานกล่าวเป็นโมฆะหรือไม่? main()
ยังไม่เริ่มโปรแกรมนี้! user_main()
ดำเนินการก่อนmain()
.
ฉันเข้าใจดีว่าในการเริ่มต้นตัวแปรส่วนกลางmain_ret
นั้นuse_main()
จะดำเนินการก่อน แต่นั่นเป็นสิ่งที่แตกต่างโดยสิ้นเชิง ประเด็นก็คือว่ามันไม่เป็นโมฆะคำสั่งยก $ 3.6.1 / 1 จากมาตรฐานในขณะที่main()
ไม่ได้เป็นจุดเริ่มต้นของโปรแกรม; มันเป็นจุดสิ้นสุดของโปรแกรมนี้จริงๆ!
แก้ไข:
คุณนิยามคำว่า 'เริ่มต้น' ได้อย่างไร?
มันทำให้คำจำกัดความของวลี"start of the program" ลดลง แล้วคุณนิยามมันอย่างไร?
main()
เป็นเหตุผลที่เพียงพอสำหรับการ"เริ่มโปรแกรม"