为什么这个c语言代码会打印3个Hi! ,4个Bye! ?

setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。处理方式是:在调用setjmp()时把当前的堆栈环境保存到jmp_buf(一个结构体类型,下面简单介绍)类型的env中,以后调用longjmp()函数还原所保存的环境并将控制权返回给setjmp之后的调用点。关于这点,《C++编程思想》是这样解析的:使用setjmp()可以在程序中保存一个已知的无错误的状态,一旦发生错误,就可以通过调用longjmp()返回到该状态。同样,这使得错误发生的位置与保存状态的位置之间产生高度的耦合。

对于学习C++的朋友,有一点需要强调的是:由于setjmp()与longjmp()是属于C语言的函数,所以在C++的错误处理方式中,这两个函数并不会去调用析构函数,所以,当跳过了对象的析构操作时,先前产生的对象就会被正确清理掉(因为longjmp()函数可跳转到析构函数的作用范围以外的地方,这使得程序的行为存在不可预料的情况,对程序而言这绝对是有害的)。

}

我要回帖

更多关于 c语言心形代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信