C Try/Catch/Finally 차단 및 __try 키워드
SEH(구조적 예외 처리)는 운영 체제 수준 예외 처리 메커니즘입니다. Windows에서 지원됩니다. Windows용 컴파일러는 일반적으로 SEH를 활용하여 C 예외를 구현합니다.
C 키워드 throw 및 catch는 C 예외를 독점적으로 처리하는 반면, Microsoft Visual C(MSVC) 컴파일러는 SEH 예외를 처리하기 위해 비표준 __try 및 __Exception 키워드를 제공합니다.
__try 블록:
비표준 __try 블록은 C의 try 블록과 마찬가지로 예외가 발생할 수 있는 범위를 정의합니다. 그 뒤에는 __just 및 __finally 블록이 옵니다.
__excess Block:
__Exception 블록은 C의 catch 블록과 유사하지만 더 많은 유연성을 제공합니다. 여기에는 활성 예외를 처리해야 하는지 여부를 평가하는 예외 필터 표현식이 있습니다.
__finally 블록:
__finally 블록에는 예외 처리 후에 실행되는 코드가 포함되어 있습니다. C#의 finally 블록과 유사하지만 표준 C에서는 직접적으로 동일하지는 않습니다.
__try 블록의 사용 사례:
SEH 예외에는 운영 체제에서 생성된 예외가 포함될 수 있습니다. 시스템, SEH를 사용하는 상호 운용 코드 또는 ".NET" 예외 코드를 사용하는 관리 코드. C에서 이러한 예외를 포착하려면 __try 블록을 __Exception 블록과 함께 사용해야 합니다.
예제 프로그램:
예제 프로그램은 SEH 예외와 C 소멸자가 어떻게 될 수 있는지 보여줍니다. SEH 예외 해제 중에 호출되었습니다.
#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; } int main() { __try { Example e; int* p = 0; *p = 42; // intentially generating a processor fault } __except (filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } return 0; }
출력:
Filtering c0000005 destructed caught
위 내용은 C에서 __try 키워드를 언제, 왜 활용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!