C에서 정의되지 않은 값을 반환하는 함수
라이브러리에 표시된 코드 조각에서 Min이라는 함수는 다음과 같이 정의됩니다.
static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out) { tvec3::Min(a,b,out); out.w = min(a.w,b.w); }
예기치 않게 이 함수는 반환 유형이 명시적으로 void로 선언되지 않았기 때문입니다.
C 11 초안 표준 섹션 6.6.3에 따르면 이 동작은 정의되지 않았습니다. 표준에는 "함수의 끝에서 흘러나오는 것은 값이 없는 반환과 동일하다"고 명시되어 있으며 "이로 인해 값을 반환하는 함수에서 정의되지 않은 동작이 발생합니다."
이 시나리오에서 컴파일러는 다음과 같습니다. 모든 경우에 문제를 정확하게 진단하는 것은 어려울 수 있으므로 오류나 경고를 제공할 의무는 없습니다.
그러나 -Wall 플래그를 사용하면 GCC와 Clang 모두 생성하라는 메시지를 받을 수 있습니다. 다음과 유사한 경고:
warning: control reaches end of non-void function [-Wreturn-type]
이 경고를 오류로 변환하여 더 높은 수준의 코드 품질을 보장하려면 -Werror=return-type 플래그를 활용할 수 있습니다. 또한 포괄적인 오류 감지를 위해 -Wextra -Wconversion -pedantic 플래그를 사용하는 것이 좋습니다.
Visual Studio에서 앞서 언급한 코드는 오류 C4716을 발생시킵니다.
error C4716: 'Min' : must return a value
모든 코드가 그렇지 않은 경우 경로가 값을 반환하면 경고 C4715가 대신 발행됩니다.
위 내용은 명시적인 'return' 문이 없는 C 함수가 오류 없이 컴파일되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!