>백엔드 개발 >C++ >C에서 반환 값이 없는 함수에 대해 컴파일러가 오류를 발생시켜야 합니까?

C에서 반환 값이 없는 함수에 대해 컴파일러가 오류를 발생시켜야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 06:43:13918검색

Should Compilers Throw Errors for Functions Lacking Return Values in C  ?

함수가 Void가 아닌 반환 유형을 선언했지만 값을 반환하지 못하는 경우 컴파일러가 가비지를 반환하는 것이 허용됩니까?

The 반환 유형이 void가 아닌 함수에 return 문이 없으면 컴파일러 동작에 대한 의문이 제기됩니다. 이러한 경우 컴파일러가 가비지를 반환하는 것처럼 보일 수 있지만 이는 이상적인 솔루션이 아닙니다.

왜 오류가 아닌가요?

C에서는 반환 값은 정의되지 않은 동작을 나타냅니다. 그러나 대부분의 컴파일러는 오류 대신 경고를 발행합니다. 이는 함수가 실제로 끝에서 실행되는지 아니면 예외를 통해 종료되는지 여부를 컴파일러가 판단하는 것이 항상 간단하지 않기 때문입니다.

다음 예를 고려하세요.

int func1() {
    return; // error
}

int func2() {
    // does not return anything
}

이 경우 func2 이론적으로는 오류가 발생해야 하지만 그렇지 않습니다. 이는 컴파일러가 func2가 예외를 통해 종료되지 않을 것이라고 보장할 수 없기 때문에 실제로 함수의 끝에서 실행되는지 증명하기 어렵기 때문입니다.

오류를 발생시키지 말아야 하는 이유 ?

분명히 문제가 있는 초기화되지 않은 변수와는 달리 함수의 반환 값 부족이 항상 문제가 되는 것은 아닙니다. 예:

int func3() {
    func4();
}

func4에서 예외가 발생하는 경우 func3의 누락된 반환 값은 중요하지 않습니다. 그러나 컴파일러는 특히 별도로 컴파일된 코드를 고려할 때 func4가 throw할지 여부를 항상 결정할 수는 없습니다.

결론적으로 반환 값이 없는 함수에 대한 C의 정의되지 않은 동작은 이상적이지는 않지만 컴파일러는 일반적으로 경고를 발행합니다. 함수의 실제 실행 경로를 결정하는 복잡성으로 인한 잠재적인 오탐을 방지하기 위해 오류 대신 사용합니다.

위 내용은 C에서 반환 값이 없는 함수에 대해 컴파일러가 오류를 발생시켜야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.