최근 스택 오버 플로우의이 사건에 대해 생각했습니다 : 확실히 프로그램을 충돌무한 재귀 호출은이 경우 스택 오버플로를 발생시켜야합니까?
int f()
{
return f();
}
int main(void)
{
f();
return 0;
}
합니다. 하지만 내 질문은 왜 이것이 무한 루프와 같은 것이 아닌가? 컴파일러는 반환 라인에서 재귀 호출의 경우 호출 된 함수의 반환 점이 호출자의 반환 점이므로 호출하는 함수의 정보를 유지할 필요가 없음을 알 수 있습니다. 자,이 경우에 내가 컴파일러는 스택에 호출을 함수의 정보를 유지할 필요가 동의 누군가가 나에게 그것을 설명하면 내가 뭔가를 누락 확인을 위해
int f()
{
int x = f();
return x;
}
int main(void)
{
f();
return 0;
}
을, 나는 감사하겠습니다 . 감사합니다
감사합니다. D. 이것은 매우 유용하고 완전한 설명입니다. 그렇습니다. 제가 염려했던 것입니다 : 컴파일러가 얼마나 똑똑 할 수 있는지. – Juste
@ Nicolas- 기꺼이 도와주세요! BTW, 여기에 답이 마음에 든다면 (내 것이 아니더라도) 질문을 받아 들여서 해결해야한다고 표명해야합니다. – templatetypedef
xD 완료. 나는 아직도이 사이트를 탐색하는 법을 배우고있다. 나는 거의 모든 대답을 좋아했지만, 당신의 것이 가장 완벽합니다. 감사합니다 ^^ – Juste