>백엔드 개발 >C++ >Windows의 C에서 __try의 목적과 구현은 무엇입니까?

Windows의 C에서 __try의 목적과 구현은 무엇입니까?

DDD
DDD원래의
2024-11-07 15:04:02138검색

What is the Purpose and Implementation of __try in C   on Windows?

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

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