반환 값이 누락된 함수: 런타임 동작 탐색
void가 아닌 함수에 반환 문이 없으면 동작에 대한 우려가 높아집니다. 런타임에 프로그램의. VisualStudio 2008은 다음 코드에서 누락된 반환 값에 대해 적절하게 경고합니다.
int doSomethingWith(int value) { int returnValue = 3; bool condition = false; if(condition) // returnValue += value; // DOH return returnValue; } int main(int argc, char* argv[]) { int foo = 10; int result = doSomethingWith(foo); return 0; }
경고에도 불구하고 프로그램은 컴파일되고 실행됩니다. 하지만 'doSomethingWith' 함수의 반환 값은 기대했던 것과 다릅니다.
정의되지 않은 동작인가요?
ISO C 표준(6.6. 3) 상태:
"함수의 끝에서 흘러나오는 것은 값이 없는 반환과 같습니다. 이로 인해 값을 반환하는 함수에서 정의되지 않은 동작이 발생합니다."
이는 다음을 의미합니다. 프로그램의 동작은 예측할 수 없습니다. 이 특정 인스턴스에서는 반환 값이 0으로 설정됩니다.
결과 값은 어떻게 계산됩니까?
함수가 명시적으로 값을 반환하지 않는 경우 컴파일러는 컨텍스트에 따라 반환 유형을 결정하려고 시도합니다. 이 경우 함수가 'int'를 반환하도록 선언되었으므로 컴파일러는 반환 값을 0으로 초기화합니다.
POD가 아닌 데이터 유형은 어떻게 되나요?
POD가 아닌 데이터 유형에 대한 반환 값이 누락된 함수의 동작은 훨씬 더 예측하기 어렵습니다. 명시적인 초기화 없이 컴파일러는 기본값을 가정할 수 없으며 반환 값은 가비지 데이터가 될 가능성이 높습니다.
결론
제공된 예제의 프로그램은 초기화 없이 실행될 수 있습니다. 눈에 띄는 문제가 있으므로 정의되지 않은 동작에 의존하는 것은 결코 권장되지 않습니다. 이는 미묘하고 디버깅하기 어려운 문제로 이어질 수 있습니다. void가 아닌 모든 함수에는 적절한 반환 값을 설정하는 명시적인 반환 문이 있는지 항상 확인하세요.
위 내용은 C 함수에 반환 값이 없으면 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!