> 백엔드 개발 > C++ > 본문

내 C g 컴파일러가 구조를 반환하는데도 반환 문 없이 함수를 컴파일하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-27 03:36:13
원래의
760명이 탐색했습니다.

Why Does My C   g   Compiler Compile a Function Without a Return Statement, Even Though It Returns a Structure?

C에서 반환 문 생략

문제:

개발자가 Windows용 g 버전을 사용할 때 예기치 않은 동작이 발생했습니다. Strawberry Perl을 통해 얻었습니다. g 컴파일러는 함수가 구조체를 반환함에도 불구하고 void가 아닌 함수에서 return 문을 생략할 수 있도록 허용했습니다.

심층 분석:

코드 조각 제공됨:

struct boundTag Box::getBound(int side) {
    struct boundTag retBoundTag;
    retBoundTag.box = this;
    switch (side)
    {
        // set retBoundTag.bound based on value of "side"
    }
}
로그인 후 복사

이와 같이 void가 아닌 함수에서 return 문을 생략하면 정의되지 않은 동작이 발생합니다. ISO C -98 표준은 다음을 지정합니다.

함수의 끝에서 흘러나오는 것은 값이 없는 반환과 동일합니다. 이로 인해 값 반환 함수에서 정의되지 않은 동작이 발생합니다.

왜 경고 없이 컴파일됩니까?

반환 문을 생략하는 동안은 정의되지 않습니다. 동작에 따라 일부 컴파일러는 기본적으로 경고를 발행하지 않을 수 있습니다. 보다 철저한 경고를 활성화하려면 컴파일 시 -Wall 옵션을 사용하는 것이 좋습니다.

Return 문 생략의 결과

비-문에서 return 문 생략 void 함수는 예측할 수 없는 결과를 초래할 수 있습니다. 이 함수는 초기화되지 않은 값을 반환하거나 프로그램 충돌을 일으킬 수 있습니다. 또한, 후속 코드에서 반환된 값을 사용하면 예상치 못한 결과가 발생할 수 있습니다.

결론

이 경우 g 컴파일러에서는 return 문 생략을 허용했지만, ISO C 표준을 준수하고 항상 void가 아닌 함수에 return 문을 포함하는 것이 중요합니다. return 문을 생략하면 정의되지 않은 동작과 예측할 수 없는 결과가 발생할 수 있습니다.

위 내용은 내 C g 컴파일러가 구조를 반환하는데도 반환 문 없이 함수를 컴파일하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿