>백엔드 개발 >C++ >명시적인 'return' 문이 없는 C 함수가 오류 없이 컴파일되는 이유는 무엇입니까?

명시적인 'return' 문이 없는 C 함수가 오류 없이 컴파일되는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-17 08:13:24520검색

Why Does a C   Function Without an Explicit `return` Statement Compile Without Error?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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