作者在 2010-08-05 00:24:37 发布以下内容
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语句都处于激活态。这就是所谓的“本 地展开”。