现在的位置: 首页 > 综合 > 正文

try-finally

2014年02月07日 ⁄ 综合 ⁄ 共 837字 ⁄ 字号 评论关闭

http://blog.sina.com.cn/s/blog_4ed1e0e40100awsl.html

http://blog.csdn.net/lh8350/article/details/7648408

http://www.cnblogs.com/this-543273659/archive/2011/08/08/2131268.html

http://hi.baidu.com/liobmi/item/ca2b0f0ec521dcdd73e67617

最后这货讲得相当通俗啊,俗不可耐啊,哈哈

Try-finally语句是微软对C语言做的扩展,以保证某个代码段执行中断之时程序能够执行“清除”代码。“清除”代码主要用于执行释放内存、关闭文件以及释放文件句柄等任务。如果一个函数中有多处需要进行错误检查,并且检查出错误后就需要从函数中退出,那么这时候try-finally语句就显得格外有用。

try-finally语句语法:

__try 复合语句
__finally 复合语句

 

__try后面的复合语句是受保护的区域。__finally后面的复合语句是终止处理语句。无论受保护区域是正常终止还是异常终止(比如goto,return,leave等),当它退出的时候,终止处理语句都要执行。

__leave在try-finally语句里有效。__leave的效果是直接跳到try-finally的结尾,立马执行终止处理语句。尽管goto语句能够达到相同的效果,但goto会导致堆栈展开( stack unwinding)。因此__leave语句更有效,因为它不包含堆栈展开。


 

用return语句或运行时函数longjmp退出try-finally语句属于异常终止。跳进__try语句是非法的,但跳出却是合法的。在跳离点与目的点的代码之间,所有的__finally语句都处于激活态。这就是所谓的“本地展开”。

 

正在执行try-finally语句的进程被杀死,那么终止处理语句将不会执行。

抱歉!评论已关闭.