__C에서 try/catch/finally
C에서 예외 처리는 주로 try/catch/finally 블록을 통해 수행됩니다. 그러나 __try와 같이 이중 밑줄로 시작하는 덜 알려진 명령이 있습니다. 이 문서에서는 밑줄이 필요한 시기를 명확히 설명하는 것을 목표로 합니다.
Windows 시스템에서는 운영 체제 수준 메커니즘인 SEH(구조적 예외 처리)를 통해 예외가 지원됩니다. 컴파일러는 일반적으로 C 예외 구현을 위해 이 SEH 인프라를 활용합니다. throw 및 catch 키워드는 C 예외만 처리하며 해당 SEH 예외 코드는 0xe06d7363입니다.
SEH 예외를 처리하려면 C 프로그램에서 비표준 __try 키워드를 사용해야 합니다. 또한 __Exception은 catch와 유사하지만 활성 예외를 처리해야 하는지 여부를 결정하기 위해 예외 필터를 지정할 수 있습니다. __finally는 예외 처리 후 코드 실행을 활성화합니다.
이러한 개념을 설명하려면 아래 예제 프로그램을 고려하세요.
#include <windows.h> #include <iostream> class Example { public: ~Example() { std::cout << "destructed" << std::endl; } }; int filterException(int code, PEXCEPTION_POINTERS ex) { std::cout << "Filtering " << std::hex << code << std::endl; return EXCEPTION_EXECUTE_HANDLER; } void testProcessorFault() { Example e; int* p = 0; *p = 42; } void testCppException() { Example e; throw 42; } int main() { __try { testProcessorFault(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } __try { testCppException(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } return 0; }
위 내용은 C에서 `try`와 `catch` 대신 `__try`와 `__Exception`을 사용해야 하는 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!