C ++ 표준의 $ 3.6.1 / 1 섹션은 다음과 같습니다.
프로그램 은 프로그램 의 지정된 시작 인 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()
(가) 프로그램의 "시작"있어야한다 기능.
또한 -pedantic
GCC 4.5.0 옵션으로 컴파일했습니다 . 경고하지 않고 오류가 없습니다!
제 질문은
이 코드는 실제로 표준을 준수합니까?
표준 준수 인 경우 표준의 내용을 무효화하지 않습니까? main()
이 프로그램의 시작이 아닙니다! user_main()
전에 실행되었습니다 main()
.
나는 그 전역 변수를 초기화 이해 main_ret
의 use_main()
첫 번째가 실행을하지만 전혀 다른 일이다; 포인트는, 즉 않는 등, $ 3.6 / 1 표준에서 인용 문을 무효화 main()
하지 않 시작 프로그램; 그것은 실제로입니다 끝 의 이 프로그램!
편집하다:
'시작'이라는 단어를 어떻게 정의합니까?
"프로그램 시작" 구의 정의로 요약됩니다 . 정확히 어떻게 정의합니까?
main()
되는 매우 중요한 포인트라고 생각합니다