>  기사  >  백엔드 개발  >  C에서 __try 키워드를 언제, 왜 활용해야 합니까?

C에서 __try 키워드를 언제, 왜 활용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-06 13:16:02719검색

When and Why Should You Utilize the __try Keyword in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.