Microsoft 관련
try-Exception 문은 실행을 정상적으로 종료하는 이벤트가 발생할 때 응용 프로그램이 프로그램을 제어할 수 있도록 하는 Microsoft C++ 언어 확장입니다. 이러한 이벤트를 예외라고 하며, 예외를 처리하는 메커니즘을 구조적 예외 처리라고 합니다.
예외는 하드웨어 또는 소프트웨어 기반일 수 있습니다. 애플리케이션이 하드웨어 또는 소프트웨어 예외로부터 완전히 복구할 수 없는 경우에도 구조적 예외 처리는 오류 정보를 표시하고 애플리케이션의 내부 상태를 캡처하여 문제를 진단하는 데 도움이 될 수 있습니다. 이는 쉽게 재현할 수 없는 간헐적인 문제에 특히 유용합니다.
try-Exception-statement:
__try compound-statement
__제외 ( expression ) compound-statement
__try
하위 문장 뒤의 복합문은 보호된 부분입니다. __out
절 뒤의 복합 문은 예외 처리기입니다. 컨트롤 섹션 실행 중에 예외가 발생하면 핸들러는 수행할 일련의 작업을 지정합니다. 실행 과정은 다음과 같습니다. __try
子句后的复合语句是受保护节。 在 __except
子句后的复合语句是异常处理程序。 如果在控制节执行过程中引发了异常,处理程序将指定要采取的一系列措施。 执行过程如下所示:
执行受保护节。
__except
子句之后的语句。
__except
表达式,返回的值将确定该异常的处理方式。 有三个值:EXCEPTION_CONTINUE_SEARCH
异常无法识别。 继续向上搜索堆栈查找处理程序,首先是所在的 try-except 语句,然后是具有下一个最高优先级的处理程序。
EXCEPTION_CONTINUE_EXECUTION
异常可识别,但被关闭。 从出现异常的点继续执行。
EXCEPTION_EXECUTE_HANDLER
异常可识别。 通过执行 __except
复合语句来转移对异常处理程序的控制,然后在异常发生处继续执行。
由于 __except
|
---|
__Exception 표현식이 평가되고 반환된 값이 결정됩니다. 이 예외를 처리하는 방법. 세 가지 값이 있습니다.
|
__Exception 표현식은 C 표현식으로 평가되므로 단일 값, 조건식 연산자 또는 쉼표 연산자로 제한됩니다. 보다 광범위한 처리가 필요한 경우 표현식은 위에 나열된 세 가지 값 중 하나를 반환하는 루틴을 호출할 수 있습니다. |
애플리케이션의 각 루틴에는 고유한 예외 처리기가 있을 수 있습니다. __out
표현식은 __try
본문 범위 내에서 실행됩니다. 이는 거기에 선언된 모든 지역 변수에 액세스할 수 있음을 의미합니다. __except
表达式在 __try
体的范围内执行。 这意味着它可以访问在该处声明的任何局部变量。
__leave
关键字在 try-except 语句块中有效。 __leave
的效果是跳转到 try-except 块的末尾。 执行将在异常处理程序结束后恢复。 尽管可使用 goto
语句来达到相同的结果,但 goto
语句会导致堆栈展开。 由于 __leave
语句不涉及堆栈展开,因此更有效。
使用 longjmp
运行时函数退出 try-except 语句被视为异常终止。 跳转到 __try
__leave
키워드는 try-Exception
__leave
의 효과는 try-Exception
블록의 끝으로 점프하는 것입니다. 예외 처리기가 종료되면 실행이 재개됩니다.goto
문을 사용하여 동일한 결과를 얻을 수 있지만 goto
문을 사용하면 스택이 펼쳐집니다. __leave
문은 스택 해제를 포함하지 않으므로 더 효율적입니다.
longjmp
런타임 함수를 사용하여 try-Exception
문을 종료하는 것은 비정상 종료로 간주됩니다.__try
문으로 점프하는 것은 불법이지만, 여기서 점프하는 것은 합법적입니다. try-Exception 문을 실행하는 동안 프로세스가 취소되면 예외 처리기가 호출되지 않습니다.
Example다음은 예외 처리기와 종료 처리기의 예입니다. 종료 처리기에 대한 자세한 내용은 try-finally 문을 참조하세요.. . . puts("hello"); __try{ puts("in try"); __try{ puts("in try"); RAISE_AN_EXCEPTION(); }__finally{ puts("in finally"); } }__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){ puts("in except"); } puts("world");
hello in try /* fall into try */ in try /* fall into nested try */ in filter /* execute filter; returns 1 so accept */ in finally /* unwind nested finally */ in except /* transfer control to selected handler */ world /* flow out of handler */
위 내용은 Microsoft C++ 언어 확장: try-Exception 문 구조적 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!