Setjmp 및 longjmp 사용Using setjmp and longjmp

setjmp 하 고 longjmp 는 로컬이 아닌를 실행 하는 방법을 제공 함께 사용 하는 goto합니다.When setjmp and longjmp are used together, they provide a way to execute a non-local goto. 이러한 표준 호출을 사용 하지 않고 전에 호출된 된 루틴에서 오류 처리 또는 복구 코드에 실행 제어를 전달할 C 코드에서 일반적으로 사용 되 나 반환 규칙.They are typically used in C code to pass execution control to error-handling or recovery code in a previously called routine without using the standard calling or return conventions.

주의

때문에 setjmplongjmp 를 지원 하지 않고 올바른 c + + 컴파일러 간에 이식 스택 프레임 개체 소멸 지역 변수의 최적화를 막아 성능을 저하 시킬 수 있으므로, c + +에서 사용 되는 권장 되지 않습니다 프로그램입니다.Because setjmp and longjmp don't support correct destruction of stack frame objects portably between C++ compilers, and because they might degrade performance by preventing optimization on local variables, we don't recommend their use in C++ programs. 사용 하는 것이 좋습니다 시도 하 고 catch 대신 생성 합니다.We recommend you use try and catch constructs instead.

사용 하려는 경우 setjmp 하 고 longjmp c + + 프로그램에서 포함 <setjmp.h > 또는 <setjmpex.h > 함수와 구조적 예외 처리 (SEH) 또는 c + + 예외 간에 올바른 상호 작용이 수행 하기 위해 처리 합니다.If you decide to use setjmp and longjmp in a C++ program, also include <setjmp.h> or <setjmpex.h> to assure correct interaction between the functions and Structured Exception Handling (SEH) or C++ exception handling.

Microsoft 전용Microsoft Specific

사용 하는 경우는 /EH 옵션을 c + + 코드, 스택 해제 중 로컬 개체에 대 한 소멸자가 호출 됩니다.If you use an /EH option to compile C++ code, destructors for local objects are called during the stack unwind. 그러나 사용 하는 경우 /EHs 하거나 /EHsc 컴파일 및 사용 하는 함수 중 하나를 noexcept 호출 longjmp, 해당 함수에 대 한 소멸자를 해제 한 다음 최적화 프로그램 상태에 따라, 발생할 수 있습니다.However, if you use /EHs or /EHsc to compile, and one of your functions that uses noexcept calls longjmp, then the destructor unwind for that function might not occur, depending on the optimizer state.

이식 가능한 코드의 경우는 longjmp 호출이 실제로 실행을 잘못 프레임 기반 개체가 소멸은 명시적으로 반드시 표준 및 다른 컴파일러에서 지원 되지 않습니다.In portable code, when a longjmp call is executed, correct destruction of frame-based objects is explicitly not guaranteed by the standard, and may not be supported by other compilers. 경고 수준 4에서 호출을 알 수 있도록 setjmp C4611 경고 발생: 'j 및 c + + 개체 소멸 사이의 상호 작용이 이식 가능 하지 않습니다.To let you know, at warning level 4, a call to setjmp causes warning C4611: interaction between '_setjmp' and C++ object destruction is non-portable.

Microsoft 전용 종료END Microsoft Specific

참고자료See also

C(구조적) 및 C++ 예외 혼합Mixing C (Structured) and C++ Exceptions