2011-09-05 6 views
1

예외가 처리되지 않은 경우 컴파일 타임 오류 또는 경고를 얻는 방법이 있습니까?C++에서 처리되지 않은 예외 검사

public void f() 
{ 
    g(); // <-- Java compiler reports "Unhandled exception" error here. 
} 

public void g() throws Exception 
{ 
} 

는 g ++ 또는 MSVC가 비슷한 작업을 수행 할 수 있습니다 예를 들어, 자바 코드를 고려? 또는이 작업을 수행 할 수있는 외부 코드 파싱 도구가 있습니까? 나는 이것을 달성하기 위해 Eclipse CDT의 C++ 파서를 프로그래밍 방식으로 확장 할 수 있다고 생각하지만, 더 쉬운 솔루션이 있습니까?

+0

내가 심비안 C++에 대해 좋아하는 한 가지는 기능에 예외를 던질 수있는 코드가 포함되어 있으면 'L'로 끝나는 함수 이름의 명명 규칙/'나가기'입니다. 끊임없이 문서를 참조하지 않고 발생할 수있는 일을 정확히 알고 있습니다. – James

답변

6

간단히 말해서, 아니오. C++ 예외 스펙은 Java의 예외 스펙과 다른 의미를 갖기 때문에 이제는 사용되지 않으므로 가능하면 피하는 것을 고려해야합니다.

C++에서 예외 사양에 의해 요청 된 검사는 런타임에만 적용됩니다. C++에서 함수가 예외 스펙을 위반하면 "unexpected"핸들러가 호출됩니다. 예외 지정이있는 함수에서 임의의 예외를 던질 가능성이있는 함수를 호출하는 것은 컴파일 타임 오류가 아닙니다.

ISO/IEC 14882 : 2011 15.4 [except.spec]/11 :

실행될 때 발생하거나 함유 기능을 허용하지 않는 예외가 발생 될 수 있으므로, 단지 표현을 거절하지 않는다 구현 .

+0

글쎄, 나는 이것을 할 "표준"방법이 없을 거라고 생각했다. 나는 (이미 존재하는) 코드 내에서 잠재적 인 오류를 발견하는 것이 유용 할 수 있기 때문에 적어도이 외부 파서가 존재하는지 궁금하다. – emkey08

+0

@ emkey08 : 다시 아니요. 시행하기 란 불가능합니다. Java와 달리 모든 함수는 호출 함수에 예외 사양이 있어도 예외를 throw 할 수있는 예외에 관계없이 다른 함수를 호출 할 수 있기 때문에 예외 사양을 위반하는지 정적으로 검사하는 것은 불가능하지는 않더라도 불가능합니다. (예 : 사용 가능한 소스가없는 라이브러리 함수를 고려하십시오.) 더 자세히 살펴보면 예외가 실제로 발생하는지 여부는 런타임 환경에 따라 달라 지거나 입력이 컴파일 시간 검사를 시도하는 데 유효하지 않을 수도 있습니다. –

+1

필자는 실제로 컴파일러가 선택적으로 생성 할 수있는 경고로 생각했다. 프로그래머의 눈을 잠재적으로 버그가있는 코드에 그려 넣기 위해서였다. "서명 된 값과 부호없는 값의 비교"경고와 같은 것 - 잠재적 인 문제를 더 빨리 발견 할 수있는 상황에 도움이 될 수있는 사항입니다. – emkey08

0

짧은 대답 : 아니오. C++에는 검사 된 예외가 없습니다. 당신은 외부 도구를 사용하려고 할 수는 있지만 TBH는 아무도 본적이 없다. 인터페이스를 올바르게 문서화하십시오.

관련 문제