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; }
이 코드는 의도한 목적을 달성합니다. 즉, 사각형을 출력합니다. 그러나 수수께끼 같은 측면은 user_main() 함수가 main()보다 먼저 실행된다는 사실에 있습니다. 프로그램의 포인트. GCC 4.5.0을 사용하여 -pedantic 옵션으로 이 코드를 컴파일하면 오류나 경고가 발생하지 않습니다.
이 관찰은 다음과 같은 질문을 촉발합니다: 이 코드가 표준을 준수합니까?
이 질문에 대답하려면, 우리는 "프로그램의 시작"이라는 문구의 의미를 더 깊이 탐구해야 합니다. 표준에서는 이 용어를 표준 자체의 맥락에 맞게 구체적으로 정의합니다. main() 이전에는 어떤 코드도 실행할 수 없다고 주장하지 않습니다. 대신, 프로그램의 시작이 main()이 시작되는 지점임을 설정합니다.
이 예제 코드의 경우 user_main()은 정의에 따라 프로그램이 "시작"되기 전에 실행됩니다. 표준에서 제공합니다. 따라서 이 코드는 완전히 호환됩니다. 설계상 이 예제를 포함하여 main()이 호출되기 전에 중요한 코드가 실행되는 경우가 많습니다.
따라서 표준 정의를 잘못 해석하면 오해가 발생합니다. 표준 논의를 위해 user_main()은 프로그램이 "시작"되기 전에 실행되며 이 동작은 표준을 완전히 준수합니다.
위 내용은 `main()`은 항상 C 프로그램 실행의 진정한 시작을 표시합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!