小编给大家分享一下Microsoft C++语言扩展中try-except语句有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站制作、西安网络推广、小程序定制开发、西安网络营销、西安企业策划、西安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供西安建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
Microsoft 专用
try-except语句是一项 Microsoft C++ 语言扩展,它使应用程序能够在正常终止执行的事件发生时获取对程序的控制权。 此类事件称为异常,处理异常的机制称为结构化异常处理。
异常可能基于硬件或软件。 即使应用程序无法从硬件或软件异常中完全恢复,结构化异常处理也可以显示错误信息并捕获应用程序的内部状态,从而帮助诊断问题。 这对于无法轻松重现的间歇性问题特别有用。
try-except-statement:
__try compound-statement
__except ( expression ) compound-statement
__try
子句后的复合语句是受保护节。 在 __except
子句后的复合语句是异常处理程序。 如果在控制节执行过程中引发了异常,处理程序将指定要采取的一系列措施。 执行过程如下所示:
执行受保护节。
如果在受保护节执行过程中未发生异常,则继续执行 __except
子句之后的语句。
如果在受保护节的执行过程中或受保护节调用的任何例程中发生异常,则会计算 __except
表达式,返回的值将确定该异常的处理方式。 有三个值:
EXCEPTION_CONTINUE_SEARCH
异常无法识别。 继续向上搜索堆栈查找处理程序,首先是所在的 try-except语句,然后是具有下一个最高优先级的处理程序。
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++语言扩展中try-except语句有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!