>  기사  >  백엔드 개발  >  C에서 `main()`을 재귀적으로 호출하는 것이 허용됩니까?

C에서 `main()`을 재귀적으로 호출하는 것이 허용됩니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 19:23:02267검색

Is Recursively Calling `main()` Allowed in C  ?

C에서 재귀적으로 Main 함수 호출

제공된 코드 조각은 C에서 자체 내에서 main() 함수를 재귀적으로 호출하려고 시도합니다. 그러나 엄격한 C 규정에서는 이 동작이 허용되지 않는다는 점에 유의하는 것이 중요합니다.

C에서 main()을 재귀적으로 호출하는 것이 허용됩니까?

C 표준에 따르면 , main() 함수를 포함하여 함수는 자신을 직접 호출할 수 없습니다. 이 제한은 무한 재귀를 방지하고 프로그램 종료를 보장하기 위한 것입니다.

g를 사용한 실제 구현

언어 표준에도 불구하고 실제로 main()을 재귀적으로 호출하는 것이 가능합니다. GNU C 컴파일러(g)를 사용합니다. g는 이와 관련하여 표준을 엄격하게 적용하지 않으며, 재귀적 main() 호출이 포함된 코드를 컴파일하고 실행할 수 있도록 허용합니다.

예제 코드

다음 수정된 코드 조각 g를 사용한 재귀 main() 호출을 보여줍니다.

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

int main() {
    int y = rand() % 10; // returns 3, then 6, then 7
    cout << "y = " << y << endl;
    return (y == 7) ? 0 : main();
}</code>

컴파일하고 실행하면 이 코드는 다음과 같은 출력을 생성합니다.

y = 3
y = 6
y = 7

Assembly Analysis

이 코드에 대해 생성된 어셈블리를 검사하면 g가 재귀적인 main() 호출을 다른 함수 호출처럼 처리한다는 사실이 드러납니다.

main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret

참고:

이 동작은 g 를 사용하여 가능하지만 보장되지는 않는다는 점에 유의하는 것이 중요합니다. 다른 컴파일러는 C 표준을 엄격하게 준수하여 컴파일 오류나 예상치 못한 동작이 발생할 수 있습니다. 따라서 재귀적인 main() 호출을 사용하는 것은 권장되지 않습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.