setjmp 및 longjmp 사용
setjmp와 longjmp를 함께 사용하면 로컬goto
이 아닌 메서드를 실행할 수 있습니다. 일반적으로 C 코드에서 표준 호출 또는 반환 규칙을 사용하지 않고 이전에 호출한 루틴에서 실행 제어를 오류 처리 또는 복구 코드 전달하는 데 사용됩니다.
주의
setjmp
longjmp
C++ 컴파일러 간에 스택 프레임 개체의 올바른 소멸을 지원하지 않으며 지역 변수에 대한 최적화를 방지하여 성능이 저하될 수 있으므로 C++ 프로그램에서 사용하지 않는 것이 좋습니다. 대신 사용하고 try
catch
구성하는 것이 좋습니다.
C++ 프로그램을 사용하기 setjmp
longjmp
로 결정한 경우 함수와 SEH(구조적 예외 처리) 또는 C++ 예외 처리 간의 올바른 상호 작용을 보장하기 위해 setjmp.h> 또는 <setjmpex.h>도 포함합니다<.
Microsoft 전용
/EH 옵션을 사용하여 C++ 코드를 컴파일하는 경우 스택 해제 중에 로컬 개체에 대한 소멸자가 호출됩니다. 그러나 /EHs 또는 /EHsc를 사용하여 컴파일하고 noexcept 호출longjmp
을 사용하는 함수 중 하나를 사용하는 경우 최적화 프로그램 상태에 따라 해당 함수에 대한 소멸자 해제가 발생하지 않을 수 있습니다.
이식 가능한 코드에서 호출이 실행될 때 longjmp
프레임 기반 개체의 올바른 소멸은 표준에 의해 명시적으로 보장되지 않으며 다른 컴파일러에서 지원되지 않을 수 있습니다. 경고 수준 4에서 경고 C4611을 발생시키는 setjmp
호출을 알려면 '_setjmp'과 C++ 개체 소멸 간의 상호 작용은 이식할 수 없습니다.
Microsoft 전용 종료
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기