首页后端开发ASP.NETMicrosoft C++ 语言扩展:try-except 语句结构化异常

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

时间2024-01-30 22:51:03发布访客分类ASP.NET浏览653
导读:收集整理的这篇文章主要介绍了Microsoft C++ 语言扩展:try-except 语句结构化异常,觉得挺不错的,现在分享给大家,也给大家做个参考。Microsoft 专用try-except 语句是一项 Microsoft C++ 语...
收集整理的这篇文章主要介绍了Microsoft C++ 语言扩展:try-except 语句结构化异常,觉得挺不错的,现在分享给大家,也给大家做个参考。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 表达式来计算,因此它被限制为单个值、条件表达式运算符或逗号运算符。 如果需要更大量的处理,表达式可调用返回上面列出的三个值之一的例程。

说明

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

说明

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

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

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

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

示例

下面是异常处理程序和终止处理程序的示例。 有关终止处理程序的详细信息,请参阅 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语言PHP的helloworld扩展

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

以上就是Microsoft C++ 语言扩展:try-except 语句结构化异常的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 区分C++常量表达式constcons...下一篇:C++解决方法:多线程同步经典案例...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员

若转载请注明出处: Microsoft C++ 语言扩展:try-except 语句结构化异常
本文地址: https://pptw.com/jishu/593143.html
区分C++常量表达式、const、constexpr(附代码) C++解决方法:多线程同步经典案例之生产者消费者问题

游客 回复需填写必要信息