> 백엔드 개발 > C++ > `main()`은 항상 C 프로그램 실행의 진정한 시작을 표시합니까?

`main()`은 항상 C 프로그램 실행의 진정한 시작을 표시합니까?

Patricia Arquette
풀어 주다: 2024-12-05 09:55:15
원래의
675명이 탐색했습니다.

Does `main()` Always Mark the True Beginning of a C   Program's Execution?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿