Microsoft C++ 语言扩展:try-except 语句结构化异常


本文摘自PHP中文网,作者php是最好的语言,侵删。

Microsoft 专用

try-except 语句是一项 Microsoft C++ 语言扩展,它使应用程序能够在正常终止执行的事件发生时获取对程序的控制权。 此类事件称为异常,处理异常的机制称为结构化异常处理。

异常可能基于硬件或软件。 即使应用程序无法从硬件或软件异常中完全恢复,结构化异常处理也可以显示错误信息并捕获应用程序的内部状态,从而帮助诊断问题。 这对于无法轻松重现的间歇性问题特别有用。

语法

try-except-statement
__try compound-statement

__except ( expression ) compound-statement

__try 子句后的复合语句是受保护节。 在 __except 子句后的复合语句是异常处理程序。 如果在控制节执行过程中引发了异常,处理程序将指定要采取的一系列措施。 执行过程如下所示:

  1. 执行受保护节。

  2. 如果在受保护节执行过程中未发生异常,则继续执行 __except 子句之后的语句。

  3. 如果在受保护节的执行过程中或受保护节调用的任何例程中发生异常,则会计算 __except 表达式,返回的值将确定该异常的处理方式。 有三个值:
  4. EXCEPTION_CONTINUE_SEARCH 异常无法识别。 继续向上搜索堆栈查找处理程序,首先是所在的 try-except 语句,然后是具有下一个最高优先级的处理程序。
  5. EXCEPTION_CONTINUE_EXECUTION 异常可识别,但被关闭。 从出现异常的点继续执行。

    EXCEPTION_EXECUTE_HANDLER 异常可识别。 通过执行 __except 复合语句来转移对异常处理程序的控制,然后在异常发生处继续执行。

由于 __except 表达式将作为 C 表达式来计算,因此它被限制为单个值、条件表达式运算符或逗号运算符。 如果需要更大量的处理,表达式可调用返回上面列出的三个值之一的例程。

System_CAPS_ICON_note.jpg 说明

结构化异常处理适用于 C 和 C++ 源文件。 但是,这不是专门为 C++ 设计的。 您可通过使用 C++ 异常处理来确保提高代码的可移植性。 此外,C++ 异常处理机制灵活得多,因为它可以处理任何类型的异常。

System_CAPS_ICON_note.jpg 说明

对于 C++ 程序,应使用 C++ 异常处理,而不是结构化异常处理。 有关详细信息,请参阅《C++ 语言参考》中的异常处理。

应用程序中的每个例程可以有自己的异常处理程序。 __except 表达式在 __try 体的范围内执行。 这意味着它可以访问在该处声明的任何局部变量。

__leave 关键字在 try-except 语句块中有效。 __leave 的效果是跳转到 try-except 块的末尾。 执行将在异常处理程序结束后恢复。 尽管可使用 goto 语句来达到相同的结果,但 goto 语句会导致堆栈展开。 由于 __leave 语句不涉及堆栈展开,因此更有效。

使用 longjmp 运行时函数退出 try-except 语句被视为异常终止。 跳转到 __try 语句是非法的,但跳出该语句是合法的。 如果有进程在执行 try-except 语句的过程中取消,则不会调用异常处理程序。

示例

下面是异常处理程序和终止处理程序的示例。 有关终止处理程序的详细信息,请参阅 try-finally 语句。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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");

这是上面的示例的输出,右侧还添加了注释:

1

2

3

4

5

6

7

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语言PHP的helloworld扩展

c语言 结构体函数:PHP的语言结构和函数的区别

以上就是Microsoft C++ 语言扩展:try-except 语句结构化异常的详细内容!

相关阅读 >>

关于C++中的引用总结

perl和C++的区别是什么?perl和C++的简单比较

const在C++中的意思

C++实现逐行读取txt文件中的字符串以及文件文本的复制

C++学习路线

C++类型转换

在c/C++中如何使用extern关键字

C++万能头文件是什么?

C++ 布尔类型和引用的用法详解

C++】深入了解继承方式基础知识及其与访问限定符的关系

更多相关阅读请进入《C++》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...