> 백엔드 개발 > C++ > C에서 main()을 재귀적으로 호출할 수 있습니까?

C에서 main()을 재귀적으로 호출할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-02 20:45:02
원래의
354명이 탐색했습니다.

Can You Call main() Recursively in C  ?

C에서 자체 내에서 main() 호출

C 표준은 모든 프로그램의 기본 진입점으로 main 함수를 설명합니다. 그러나 "main() 자체를 내부에서 호출하는 것이 가능한가?"라는 질문이 생깁니다.

기능 제약 조건

C 표준에 따르면 no. 일단 정의되고 실행되면 main 함수는 프로그램의 시작과 끝을 표시합니다. main()을 재귀적으로 호출하는 것은 이 기본 원칙을 위반하는 것입니다.

실제 구현

그러나 실제로 Linux의 g와 같은 특정 컴파일러는 main() 내에서 main()의 색다른 호출을 허용합니다. 이 동작은 표준에서 명시적으로 지원되지는 않지만 컴파일러 구현에서는 허용됩니다.

예를 들어 다음 코드를 고려하세요.

<code class="c++">#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
    int y = rand() % 10; // random number generation
    cout << "y = " << y << endl;
    return (y == 7) ? 0 : main();
}</code>
로그인 후 복사

이 코드는 난수 생성을 수행합니다. 생성된 숫자가 7이 아니면 main()을 재귀적으로 호출합니다.

어셈블리 수준 분석

g에 의해 생성된 어셈블리 코드를 조사하면 main()이 다른 함수와 마찬가지로 호출된다는 것을 알 수 있습니다 :

<code class="assembly">main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret</code>
로그인 후 복사

컴파일러 경고

g가 이러한 코드를 컴파일하는 동안 C 표준을 위반한다는 사실을 상기시키기 위해 -pedantic 플래그와 함께 경고를 생성한다는 점에 주목할 가치가 있습니다.

g.cpp:8: error: ISO C++ forbids taking address of function '::main'
로그인 후 복사

결론

main() 자체 호출은 일부 상황에서 작동할 수 있지만 C 표준에서 공식적으로 승인한 것은 아닙니다. 이는 표준 동작을 위반하는 것이며 다양한 컴파일러와 플랫폼에서 정의되지 않은 결과를 초래할 수 있습니다. 따라서 프로덕션 코드에서 이러한 색다른 관행에 의존하는 것은 강력히 권장되지 않습니다.

위 내용은 C에서 main()을 재귀적으로 호출할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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