의 실현에 호환되지 않으며 그 소리는 잘 컴파일합니다. 그러나, 표준 등의 단락이있다 :예외 사양 우리는 코드를</p> <pre><code>int main() { void f() throw(int); f(); return 0; } void f() { } </code></pre> <p>GCC를 다음 한 선언과 기능
n3376 15.4/4
함수의 선언 모든 예외, 모든 선언을 허용하는 noexcept-사양이 아닌 예외 사양이있는 경우, 그 함수의 정의 및 명시 적 전문화를 포함하여, 호환 예외 규정을 가져야한다.
그리고 다음과 같은 예를 들어
: GCC - 오류가 연타 -void f() throw(int);
int main()
{
f();
return 0;
}
void f() { }
을 경고하는 이유는이 조각에서 차이가? 감사.
다른 함수 내에서 선언 된 함수도 같은 이름의 함수 정의를 외부에서 참조합니까? 다른 함수 안에 함수를 선언한다는 것은 무엇을 의미합니까? – jogojapan
@ jogojapan,이 경우에 대해서는 표준에서 아무것도 찾을 수 없습니다. 그러나 어쨌든 여기에 정의되지 않은 참조가 없습니다. http://liveworkspace.org/code/3BA8in$0 undef ref가 있습니다. – ForEveR
예,하지만 (컴파일러 문제 일지라도) 문제는 예외 사양 처리와 관련이 없습니다. 예를 들어'f'를'main' 내부에'int'를 반환하는 것으로 선언하지만'main' 외부에서는'void'를 반환하는 것으로 선언하면 여전히 컴파일됩니다. 비록 당신이'f'를 호출하고 주장 된 반환 값을 사용한다 할지라도. 적어도 g ++ 및 clang과 관련하여 : http://liveworkspace.org/code/2l5YiJ$1 흥미롭게도 Intel 컴파일러는 경고를 발행합니다. – jogojapan