C에서 __try, try/catch/finally 이해
C에서 try/catch/finally 블록은 일반적으로 예외 처리에 사용됩니다. . 그러나 Windows에만 적용되는 이중 밑줄 __try를 사용하는 대체 구문이 있습니다.
__try를 사용해야 하는 경우
Windows에서는 예외 처리가 구조적을 통해 구현됩니다. 예외 처리(SEH). MSVC 컴파일러로 Windows를 대상으로 하는 경우 __try 구문을 사용하여 SEH 예외를 포착할 수 있습니다.
SEH 및 C 예외
MSVC 컴파일러는 C 예외를 다음에 매핑하는 코드를 생성합니다. 예외 코드 0xe06d7363("msc")을 사용하는 SEH 인프라. 이를 통해 SEH 예외가 발생할 때 C 소멸자를 호출할 수 있습니다.
소멸자를 위한 컴파일러 최적화
MSVC 컴파일러는 소멸자 코드가 생성되지 않도록 코드를 최적화합니다. 객체의 수명 내에 throw 문이 없습니다. 모든 SEH 예외를 일관되게 포착하는 데 필요한 /EHa 컴파일 옵션을 사용하면 이러한 최적화를 억제할 수 있습니다.
SEH 예외 유형
SEH에는 많은 예외 유형이 있습니다. 운영 체제에서 정의한 것과 특정 응용 프로그램에서 사용하는 것을 포함합니다. .NET 예외와 같은 관리형 예외는 예외 코드 0xe0434f4d("com")를 사용합니다.
__try, __Exception 및 __finally
SEH 예외를 포착하려면 __try C catch 블록처럼 작동하지만 더 많은 기능을 제공하는 __Exception과 함께 사용됩니다. __finally를 사용하면 예외 처리 후 코드가 실행될 수 있습니다.
예제 코드
제공된 코드는 __try, __Exception 및 __finally를 사용하여 두 SEH 예외를 모두 포착하는 방법을 보여줍니다. (널 포인터 액세스로 인해 발생) 및 C 예외(정수 발생으로 인해 발생).
출력에서는 두 예외 모두에 대해 소멸자가 호출되었으며 __Exception이 예외를 성공적으로 포착했음을 보여줍니다.
위 내용은 Windows의 C에서 __try의 목적과 구현은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!