setjmp
프로그램의 현재 상태를 저장합니다.
구문
int setjmp(
jmp_buf env
);
매개 변수
env
환경이 저장되는 변수입니다.
반환 값
스택 환경에 저장한 후 0을 반환합니다. 호출로 longjmp
인해 반환되는 경우 setjmp
인수를 value
longjmp
반환하거나 인수가 value
longjmp
0 setjmp
이면 1을 반환합니다. 오류 반환이 없습니다.
설명
setjmp
함수는 longjmp
를 사용하여 나중에 복원할 수 있는 스택 환경을 저장합니다. setjmp
와 longjmp
를 함께 사용하면 비로컬 goto
를 실행할 수 있습니다. 일반적으로 일반적인 호출 또는 반환 규칙을 사용하지 않고 이전에 호출된 루틴에서 오류 처리 또는 복구 코드 실행 제어를 전달하는 데 사용됩니다.
setjmp
에 대한 호출은 현재 스택 환경을 env
에 저장합니다. longjmp
에 대한 후속 호출은 저장된 환경을 복원하고 컨트롤을 해당 setjmp
호출 바로 다음에 오는 포인터로 반환합니다. 컨트롤을 받는 루틴에 액세스할 수 있는 모든 변수(레지스터 변수 제외)는 longjmp
가 호출될 때 가지고 있던 값을 포함합니다.
네이티브 코드에서 관리 코드로 이동하는 데 사용할 setjmp
수 없습니다.
Microsoft 전용
Windows longjmp
의 Microsoft C++ 코드에서 예외 처리 코드와 동일한 스택 해제 의미 체계를 사용합니다. C++ 예외가 발생할 수 있는 동일한 위치에서 사용하는 것이 안전합니다. 그러나 이 사용법은 이식 가능하지 않으며 몇 가지 중요한 주의 사항이 함께 제공됩니다. 자세한 내용은 longjmp
를 참조하십시오.
Microsoft 전용 종료
참고 항목
이식 가능한 C++ 코드에서는 C++ 개체 의미 체계를 가정 setjmp
하고 longjmp
지원할 수 없습니다. 특히 setjmp
/longjmp
호출 쌍은 자동 개체를 setjmp
대체하고 longjmp
모든 자동 개체에 catch
throw
대해 사소한 소멸자를 호출하는 경우 정의되지 않은 동작을 가합니다. C++ 프로그램에서는 C++ 예외 처리 메커니즘을 사용하는 것이 좋습니다.
자세한 내용은 사용 setjmp
및 longjmp
를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
setjmp |
<setjmp.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
_fpreset
에 대한 예를 참조하세요.