주 ()에 있는 주 ()를 c로 호출하기
전화 가능한가요?main()
내부에main()
c에서 기능합니까?
예, C를 사용하면 메인 함수를 호출할 수 있습니다(C++는 호출하지 않음)
전화하는 것은 정말로 허용됩니다.main()
다른 재귀적 코드에 사용되는 것과 동일한 방식으로 스택 오버플로를 피하더라도 다음과 같은 종료 조건이 적용됩니다.
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Running main with argc = %d, last = '%s'\n",
argc, argv[argc-1]);
if (argc > 1)
return main(argc - 1, argv);
return 0;
}
로 실행될 때testprog 1 2 3
, 출력:
Running main with argc = 4, last = '3'
Running main with argc = 3, last = '2'
Running main with argc = 2, last = '1'
Running main with argc = 1, last = 'testprog'
하지만 그것은 일화적인 증거일 뿐이기 때문에, 우리는 기준으로 눈을 돌려야 합니다.ISO C11 섹션4 Conformance
상태:
1/ 본 국제 표준에서 "할 것"은 구현 또는 프로그램에 대한 요구 사항으로 해석되며, 반대로 "할 것"은 금지 사항으로 해석됩니다.
2/ 제약 조건 또는 런타임 제약 조건을 벗어나 나타나는 "해야 한다" 또는 "하지 말아야 한다" 요구 사항을 위반하면 동작이 정의되지 않습니다.미정의 행위는 이 국제 표준에서 "미정의 행위"라는 단어 또는 행위에 대한 명시적인 정의를 생략함으로써 달리 표시됩니다.이 세 가지는 강조점에 차이가 없습니다; 그들은 모두 "정의되지 않은 행동"을 묘사합니다.
3/ 특정되지 않은 행동을 포함하는 다른 모든 면에서 올바른, 올바른 데이터로 작동하는 프로그램은 올바른 프로그램이어야 하며 5.1.2.3에 따라 행동해야 합니다.
자, 기준 어디에도 명시적인 금지 조항이 없기 때문에main()
그 자체를 부르는 것, 위의 조항 3은 통제적인 측면입니다.
추가 지원은 두 곳(나의 굵은 글씨체)에서 볼 수 있습니다(첫 번째 섹션).5.1.2.2.3 Program termination
:
1/ 다음의 리턴 타입인 경우
main
함수는 다음과 호환되는 유형입니다.int
, 최초 전화에서 에의 귀환.main
함수는 를 호출하는 것과 같습니다.exit
function 은 값을 반환합니다.main
그 논거로서 기능합니다.
그다음에 구간별로.7.21.3 Files
:
5/ 파일은 동일 또는 다른 프로그램 실행에 의해 나중에 다시 열 수 있으며 내용은 회수 또는 수정될 수 있습니다(시작 시 위치를 변경할 수 있는 경우).만약에
main
함수는 원래 호출자에게 반환됩니다. 또는 만약exit
함수가 호출되며, 프로그램 종료 전에 열려 있는 모든 파일이 닫힙니다(hence 모든 출력 스트림이 플러시됨).
이 두 하위 섹션 모두 다음에 대한 다른 호출이 있을 가능성을 뒷받침합니다.main()
최초/최초의 것 이상으로
네, 메인() 함수 내에서 메인()을 호출할 수 있습니다.
함수 자체가 함수를 호출하는 과정을 Recursion(재귀)이라고 합니다.
자, 메인() 함수 내에서 메인() 함수를 호출할 수 있지만, 프로그램을 종료하려면 메인() 함수를 호출하지 않는 조건이 있어야 합니다.
그렇지 않으면 프로그램이 무한히 되돌아와 실행되지 않습니다.
네, 가능합니다.
간단한 프로그램:
int main()
{
printf("Anything");
main();
return 0;
}
설명:
A call stack
아니면function stack
는 몇 가지 관련된 목적으로 사용되지만, 이를 사용하는 주된 이유는 각 활성 서브루틴이 실행이 완료되면 컨트롤을 반환해야 하는 지점을 추적하기 위해서입니다.
A stack overflow
콜 스택에서 메모리가 너무 많이 사용될 경우 발생합니다.
main()
를 반복적으로 호출하고 반환 주소는 스택에 저장됩니다.스택 메모리가 가득 찬 후.보여줍니다.stack overflow error
.
언급URL : https://stackoverflow.com/questions/4238179/calling-main-in-main-in-c
'programing' 카테고리의 다른 글
문자열에서 숫자가 아닌 문자를 모두 빨리 제거 (0) | 2023.10.16 |
---|---|
iPython 노트북에서 디버그하는 올바른 방법은 무엇입니까? (0) | 2023.10.16 |
WooCommerce 3의 상점 페이지에 있는 상품 페이지에 더 연결된 읽기로 카트에 추가하기 버튼 바꾸기 (0) | 2023.10.16 |
%NOTFOUND가 페치 후 null을 반환할 수 있습니까? (0) | 2023.10.16 |
C 캐시 레벨 및 크기 결정을 위한 프로그램 (0) | 2023.10.16 |