2016-06-09 6 views
2

SunOS 5.11 (Solaris 11.3)에서 Sun Studio 12.3에서 작업하고 있습니다. 그것 제공하는 가짜 경고 :가짜 "<function>은 값을 반환 할 것으로 예상됩니다"라는 경고?

"<file.h>", 라인 1 : 경고 : "< 기능 >은"값을 반환 할 것으로 예상된다.

이 함수는 기본 클래스 인터페이스의 일부이며 그렇게 보입니다. 기본 클래스 인터페이스 만 언급하면 ​​"왜 그렇게 할 수 있습니까?"라는 토론을 피할 수 있습니다. 아래와 같은 비 멤버 함수로 트리거 할 수 있습니다.

int foo() 
{ 
    throw runtime_error("Not implemented"); 
} 

비슷한 문제가 있음을 발견했습니다. 예를 들어, Xapian-core 변경 로그 상태 : 그것은 "슬로우"문 끝나는 기능을 위해 화재로

  • 함은, 일의 C++
    컴파일러에서 경고 "값을 반환 할 것으로 예상된다". 정품
    인스턴스는 경고 기능이 뛰어난 컴파일러가 포착합니다.

SunStudio C++ compiler pragma to disable warnings에 따르면, 나는 -erroff=voidretw를 사용할 수 있습니다. 나는 유효한 발견을 억제 할지도 모르기 때문에 -erroff=voidretw를 염려한다. 또한 #pragma으로 가면 사용자 코드로 상호 수분되는 것을 피하기 위해 푸시하고 팝업해야합니다. Sun Studio에서 경고 상태를 푸시하고 팝하는 방법을 모르겠습니다.

내 질문은 Sun Studio에서 헤더의 한 기능에 대한 경고를 어떻게 비활성화합니까? 내가 중복으로이를 닫 투표려고 생각 How to silence 'The last statement should return a value' warning? :


이 메시지가 다른 경우에도 중복 것 같습니다.

+1

과 기능의 종류를 표시 할 수 있습니다;'은'throw' 후. 물론 다른 컴파일러는 도달 할 수없는 코드에 대해 경고 할 것이므로 일부 Sun Studio 전용'# ifdef'로 둘러싸 야합니다. – Praetorian

+0

아무 것도 반환하지 않고 단순히 예외를 발생시키지 않으려면 왜 메서드를 void foo로 변경해야합니까?(). – sagar

+0

@sagar - 인터페이스입니다. 파생 클래스는 값을 반환합니다. – jww

답변

2

컴파일러는 C++ 11을 지원하는 경우는 noreturn 속성과 그 기능을 장식 할 수 있습니다

[[noreturn]] int foo() 
{ 
    throw runtime_error("Not implemented"); 
} 
0

어떤 약을?

int foo() 
{ 
    return throw runtime_error("Not implemented"), 0; 
} 

경고가 발생합니까?

2

썬 스튜디오는 그냥`반환 0을 추가 할 수 있습니다, 당신이 그 기능을 수정할 수 있습니다 경우

#pragma does_not_return(foo)