2012-08-12 1 views
-3

인라인 함수 내에서 goto 문을 사용할 수 있습니까? , 내가 컴파일러 수있는 상황이 발생할 인라인 등의 기능을 만드는 무시한다면 우리는 런타임 오류가 발생 것이라고 생각인라인 함수 내에 goto 문이 있습니까?

main() 
{ 
. 
. 
. 
label: 
. 
. 
. 
function1(); 
. 
. 
. 
. 
} 
void function1() 
{ 
. 
. 
. 
goto label; 
. 
. 
. 
} 

그러나 문제는 여기 :
이 예를 생각해 보자. 나 맞아? 어떤 사람이 이걸 나에게 되돌릴 수 있니?

+0

이것이 C 또는 C++ 또는 관련 언어라고 가정하면 함수 내에서만 goto를 사용할 수 있습니다. 위의 예제를 컴파일하려고하면 컴파일러에서 적절한 오류 메시지가 나타납니다. –

+0

@PaulR 고마워., – user221287

답변

2

당신이 C 또는 C++, inline (그리고 C++를 의미하는 경우 클래스 본문 내에서 정의) 중 하나가 컴파일러가 특정 방법으로 함수를 구현해야한다는 힌트 의미 가정.

컴파일러가이 문제를 무시할 수 있다는 점을 제외하고는 함수의 실제 의미를 변경하지 않습니다. 실제로 이것은 "이 코드를 소스 코드 측면에서 모든면에서 함수 호출로 취급하지만 컴파일 된 코드에서 별도의 함수로 취급해서는 안됩니다."라고 말합니다.

C/C++ 구문 (예 : goto 다른 범위의 레이블 지정)을 위반하는 것은 허용되지 않습니다.

또한 고려하십시오. 동일한 레이블이 다른 기능에 존재할 경우 어떤 범위를 사용해야합니까? 일반적으로 컴파일러가 무엇을 해야할지 결정할 수있는 방법이 없다면 컴파일러에게 할 것을 요구할 수없는 것입니다.

* 반대로 컴파일러는 키워드가없는 함수 호출을 인라인하거나 키워드가 있는지 여부에 관계없이 동일한 함수에 대한 다른 호출이 아닌 인라인 함수를 인라인 할 수 있습니다.