고려하는 기능 foo()
그 수도 결코 종료 : 그것은 최종 리턴 문을 생략하는 유효한 C가는
int foo(int n) {
if(n != 0) return n;
else for(;;); /* intentional infinite loop */
return 0; /* (*) */
}
인가? 마지막 문장을 생략하면 정의되지 않은 동작이 발생합니까?
고려하는 기능 foo()
그 수도 결코 종료 : 그것은 최종 리턴 문을 생략하는 유효한 C가는
int foo(int n) {
if(n != 0) return n;
else for(;;); /* intentional infinite loop */
return 0; /* (*) */
}
인가? 마지막 문장을 생략하면 정의되지 않은 동작이 발생합니까?
당신은 무한 루프 이후 지난 return
한 Statment를 생략 할 수 있습니다. 그러나 모든 경로가 돌아 오지 않는 것처럼 편집 경고를받을 수 있습니다. 함수에 무한 루프가있는 것은 좋지 않습니다. 루프를 깰 수있는 하나의 조건을 유지하십시오. 그 무한 루프가 정말이 경우에 필요한 경우
어쨌든 그 후 return
문은 죽은 코드입니다. 그것을 제거하면 무한 동작이되지 않습니다. 이 return 문없이 돌아 않더라도 당신이 반환 값을 사용하지 않는
void
기능이 없으면 return
문을 전혀 사용하지 않거나 모든 경로가 return
문을 가지고있는 것은 유효합니다. 예를 들어
:
// This is a valid function definition.
int foo(void)
{
}
또는
// This is a valid function definition.
int bar(void)
{
if (printf(""))
{
exit(1);
}
return 0;
}
하지만
foo
의 반환 값을 판독하는 동작이 정의된다.
foo(); // OK
int a = foo(); // Undefined behavior
int b = bar(); // OK
그것은 그것을 생략 컴파일러 경고를 줄 수 있습니다. –
그 'return 0;'의 무엇이 잘못 되었나요? – deepmax
@MM. 그것이 내가 알고 싶은 것입니다. – fuz