프로그램의 현재 상태를 저장합니다.
구문
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에 대한 예를 참조하세요.