setjmp 및 longjmp 사용

setjmp와 longjmp를 함께 사용하면 로컬goto이 아닌 메서드를 실행할 수 있습니다. 일반적으로 C 코드에서 표준 호출 또는 반환 규칙을 사용하지 않고 이전에 호출한 루틴에서 실행 제어를 오류 처리 또는 복구 코드 전달하는 데 사용됩니다.

주의

setjmplongjmp C++ 컴파일러 간에 스택 프레임 개체의 올바른 소멸을 지원하지 않으며 지역 변수에 대한 최적화를 방지하여 성능이 저하될 수 있으므로 C++ 프로그램에서 사용하지 않는 것이 좋습니다. 대신 사용하고 trycatch 구성하는 것이 좋습니다.

C++ 프로그램을 사용하기 setjmplongjmp 로 결정한 경우 함수와 SEH(구조적 예외 처리) 또는 C++ 예외 처리 간의 올바른 상호 작용을 보장하기 위해 setjmp.h> 또는 <setjmpex.h>도 포함합니다<.

Microsoft 전용

/EH 옵션을 사용하여 C++ 코드를 컴파일하는 경우 스택 해제 중에 로컬 개체에 대한 소멸자가 호출됩니다. 그러나 /EHs 또는 /EHsc를 사용하여 컴파일하고 noexcept 호출longjmp을 사용하는 함수 중 하나를 사용하는 경우 최적화 프로그램 상태에 따라 해당 함수에 대한 소멸자 해제가 발생하지 않을 수 있습니다.

이식 가능한 코드에서 호출이 실행될 때 longjmp 프레임 기반 개체의 올바른 소멸은 표준에 의해 명시적으로 보장되지 않으며 다른 컴파일러에서 지원되지 않을 수 있습니다. 경고 수준 4에서 경고 C4611을 발생시키는 setjmp 호출을 알려면 '_setjmp'과 C++ 개체 소멸 간의 상호 작용은 이식할 수 없습니다.

Microsoft 전용 종료

참고 항목

C(구조적) 및 C++ 예외 혼합