C main() 함수의 재귀 제한
C에서는 main() 함수 내에서 재귀를 사용하는 것이 일반적이었습니다. 논쟁의 주제. 수많은 개발자들이 C 표준의 금지 사항에도 불구하고 GNU 컴파일러 컬렉션(g)이 main()에서 재귀를 허용한다는 사실을 관찰했습니다.
표준 제한 사항
C 표준(3.6.1/3), main()의 재귀는 명시적으로 금지됨:
"main 함수는 프로그램 내에서 사용해서는 안 됩니다(3.2)."
"사용됨"의 정의
표준도 "사용된"을 객체 또는 오버로드되지 않은 함수로 정의합니다:
"객체 또는 오버로드되지 않은 함수는 이름이 잠재적으로 평가되는 표현식에 나타나는 경우 사용됩니다."
따라서 main() 자체를 호출하는 것은 "사용"으로 간주되므로 표준에 따라 허용되지 않습니다.
컴파일러 동작
표준의 금지에도 불구하고 g는 다음 코드를 없이 다음 코드를 컴파일합니다. 오류:
int main() { main(); }
이러한 불일치는 g의 기본 최적화 수준에 미리 구성된 임계값보다 작은 인라인 함수가 포함되어 있기 때문에 발생합니다. 이 코드의 재귀는 단일 함수 호출이므로 임계값 아래로 떨어질 가능성이 높으며 g 에 의해 인라인됩니다.
결론
g는 기본에서 재귀를 허용할 수 있습니다. () 경우에 따라 C 표준에서는 이를 엄격히 금지합니다. 개발자는 프로그램의 정확성과 잠재적인 위험을 보장하기 위해 표준의 요구 사항을 준수해야 합니다.
위 내용은 C의 `main()` 함수가 재귀적일 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!