2011-02-09 8 views
0

void가 아닌 값을 반환하는 함수가 있습니다. 호출자 측에서는 return 문이 원래 함수에서 호출되었는지 여부를 감지하려고합니다.함수에서 no-return 문을 검색하는 방법

나는 비 void 함수가 아무 것도 반환하지 않도록하고 gcc에 경고를 던질 것이라고 알고 있습니다. 하지만 반환 된 여부 또는 컨트롤 끝에 함수 도달 여부를 기반으로 런타임 오류를 인쇄 할 싶습니다.

호출 수신자는 사용자가 정의합니다. 방금 선언문을 제공합니다. 그래서, 기본적으로 나는 피 호출자 함수의 구현자가 "return"문을 건너 뛰지 않도록하고 싶다.

+0

"발신자 측"을 의미합니까? –

+1

컨트롤이 끝나면 결과는 정의되지 않은 동작입니다. 만약 당신이 이것을 원한다면 당신은 어떤 플랫폼 - 특정 코드에 깊이 들어가야 할 필요가 있다고 생각합니다. 왜 그런 일이 자주 일어나지 않기 때문에 최소한 경험상 프레임 워크를 만들려고 노력하면 거의 이득을 얻지 못하는 것처럼 보입니다. – GManNickG

+0

@ 예레미아 예. 지적 해 주셔서 고마워요. 편집 됨. – deeJ

답변

1

호출자가 함수를 반환하는 방법 (예외를 throw하는지 또는 반환할지 여부는 제외)을 결정할 수 없습니다. 당신이 할 수있는 유일한 방법은 함수가 컴파일러 경고를 사용하여 명시 적으로 반환하지 못하도록하거나 함수의 끝에서 제어가 끝나지 않게하려는 런타임 오류 호출을 넣는 것입니다. 당신이 할 수있는 한 가지 트릭은 함수에서 리턴 타입에 런타임 오류를주는 기본 생성자가 있어야한다는 것입니다. 모든 return 문은 다른 생성자를 사용해야합니다. 일단 그렇게하면 GCC 경고를 얻기 위해 함수의 끝에 오류 호출을 추가하거나 반환 유형을 변경하면됩니다. 당신이 정말로 원하는 것은 오류 코드를 반환, 또는 void 이외의 반환 값의 형태와 기능이 return하지 않는 경우 예외를

0

는 행동이 정의되어 있지 소리.

즉, 런타임에 컴파일러 오류 (실제로는 C# 컴파일러가 오류라고 간주 함)가 있는지 확인할 수 없습니다.

함수가 끝에 도달했는지 알고 싶으면 알려진 값을 반환하거나 예외를 throw하십시오.