Main()은 정말로 C 프로그램의 시작인가요?
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() 함수에 들어가기 전. 흥미롭게도 GCC 4.5.0에서 -pedantic 플래그를 사용할 때 코드는 오류나 경고 없이 컴파일됩니다.
이 관찰은 main()는 프로그램의 시작점입니다. 해당 코드는 지정된 시작점에 진입하기 전에 사용자 정의 기능을 실행하는 것으로 보입니다.
'시작'의 정의
논란은 '의 정확한 정의에 달려 있습니다. 프로그램 시작합니다." 표준에서는 이 용어를 명시적으로 정의하지 않으므로 해석의 여지가 있습니다. 어떤 사람들은 "시작"이 코드의 초기 실행을 의미한다고 주장할 수도 있습니다. 이 경우user_main()에서 발생합니다. 다른 사람들은 "시작"이 언어 사양에 정의된 대로 지정된 시작점을 참조한다고 주장할 수도 있습니다.
중요한 차이점은 C 표준 문장의 해석에 있습니다.프로그램은 다음을 포함해야 합니다. 프로그램의 지정된 시작인 main이라는 전역 함수입니다.표준은 본질적으로 표준 자체의 맥락에서 "시작"이라는 용어를 정의합니다.main()이 호출되기 전에는 코드가 실행되지 않는다고 주장하지 않습니다. 대신 main()을 모든 후속 논의 및 정의를 위한 프로그램의 지정된 시작점으로 설정합니다.
이 해석을 기반으로 제공된 코드 샘플은 C 표준을 준수합니다.user_main() 함수는 표준에 정의된 대로 프로그램이 "시작"되기 전에 실행됩니다. 이러한 사전 실행은 main()에서 지정된 프로그램 시작 지점을 무효화하지 않습니다.
따라서 결론은main()이 해당 지정을 유지한다는 것입니다. 지정된 시작점에 도달하기 전에 사용자 정의 코드가 실행될 수 있더라도 C 프로그램의 시작점입니다. 표준의 "시작" 정의는 이러한 이해를 명확하게 해줍니다.
위 내용은 `main()`은 정말로 C 프로그램의 첫 번째 실행 라인입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!