setjmp/longjmp 사용Using setjmp/longjmp

setjmplongjmp 는 로컬이 아닌를 실행 하는 방법을 제공 함께 사용할 goto합니다.When setjmp and longjmp are used together, they provide a way to execute a non-local goto. setjmp와 longjmp는 표준 호출이나 반환 규칙을 사용하지 않고 전에 호출된 루틴에서 오류 처리 또는 복구 코드에 실행 제어를 전달하는 데 주로 사용됩니다.They are typically used 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++ 프로그램에서는 사용하지 않는 것이 좋습니다.However, because setjmp and longjmp do not support C++ object semantics, and because they might degrade performance by preventing optimization on local variables, we recommend that you do not use them in C++ programs. 사용 하는 것이 좋습니다 try / catch 대신 생성 합니다.We recommend that you use try/catch constructs instead.

사용 하려는 경우 setjmp / longjmp c + + 프로그램에 포함 될 수도 <setjmp.h > 또는 <setjmpex.h > 함수 및 c + + 예외 처리 간에 올바른 상호 작용이 하 합니다.If you decide to use setjmp/longjmp in a C++ program, also include <setjmp.h> or <setjmpex.h> to assure correct interaction between the functions and C++ exception handling. 사용 하는 경우 /EH 를 컴파일하려면 로컬 개체에 대 한 소멸자가 스택 해제 중 호출 됩니다.If you use /EH to compile, destructors for local objects are called during the stack unwind. 사용 하는 경우 /EHs 컴파일과 함수 호출 사용 하는 함수 중 하나를 nothrow 및 사용 하는 함수의 nothrow 호출 longjmp, 소멸자가 해제 하지 발생할 수 있으며, 그런 다음 최적화 프로그램에 따라.If you use /EHs to compile, and one of your functions calls a function that uses nothrow and the function that uses nothrow calls longjmp, then the destructor unwind might not occur, depending on the optimizer.

이식 가능한 코드에서 goto를 호출하는 비로컬 longjmp가 실행되면 프레임 기반 개체가 제대로 삭제되지 않을 수도 있습니다.In portable code, when a non-local goto that calls longjmp is executed, correct destruction of frame-based objects might be unreliable.

참고 항목See Also

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