Phần $ 3,6,1 / 1 từ Tiêu chuẩn C ++ đọc,
Một chương trình sẽ chứa một hàm toàn cục gọi là main , là khởi đầu được chỉ định của chương trình.
Bây giờ hãy xem xét mã này,
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;
}
Mã mẫu này thực hiện những gì tôi dự định làm, tức là in bình phương số nguyên từ 0 đến 9, trước khi nhập vào main()
hàm được coi là "bắt đầu" của chương trình.
Tôi cũng đã biên dịch nó với -pedantic
tùy chọn, GCC 4.5.0. Nó không có lỗi, thậm chí không cảnh báo!
Vì vậy, câu hỏi của tôi là,
Là mã này thực sự phù hợp tiêu chuẩn?
Nếu đó là tiêu chuẩn phù hợp, thì nó không làm mất hiệu lực những gì Tiêu chuẩn nói? main()
không bắt đầu chương trình này! user_main()
thực hiện trước main()
.
Tôi hiểu rằng để khởi tạo biến toàn cục main_ret
, use_main()
trước tiên thực hiện nhưng đó là một điều hoàn toàn khác; vấn đề là, nó làm mất hiệu lực tuyên bố được trích dẫn $ 3,6,1 / 1 từ Tiêu chuẩn, vì main()
KHÔNG phải là bắt đầu của chương trình; nó là trong thực tế cuối của này chương trình!
BIÊN TẬP:
Làm thế nào để bạn xác định từ 'bắt đầu'?
Nó nắm rõ định nghĩa của cụm từ "bắt đầu chương trình" . Vì vậy, làm thế nào chính xác để bạn xác định nó?
main()
là "bắt đầu chương trình"