高级C语言教程-C语言函数setjmp()函数
生活随笔
收集整理的這篇文章主要介紹了
高级C语言教程-C语言函数setjmp()函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
**與刺激的abort()和exit()相比,goto語句看起來是處理異常的更可行方案。不幸的是,goto是本地的: 它只能跳到所在函數內部的標號上,而不能將控制權轉移到所在程序的任意地點(當然,除非你的所有代碼都在main體中)。為了解決這個限制,C函數庫提供了setjmp()和longjmp()函數,它們分別承擔非局部標號和goto作用。頭文件setjmp.h申明了這些函數及同時所需的jmp_buf數據類型。
原理非常簡單:
1.setjmp(j)設置“jump”點,用正確的程序上下文填充jmp_buf對象j。這個上下文包括程序存放位置、棧和框架指針,其它重要的寄存器和內存數據。當初始化完jump的上下文,setjmp()返回0值。
2. 以后調用longjmp(j,r)的效果就是一個非局部的goto或“長跳轉”到由j描述的上下文處(也就是到那原來設置j的setjmp()處)。當作為長跳轉的目標而被調用時,setjmp()返回r或1(如果r設為0的話)。(記住,setjmp()不能在這種情況時返回0。)
通過有兩類返回值,setjmp()讓你知道它正在被怎么使用。當設置j時,setjmp()如你期望地執行;但當作為長跳轉的目標時,setjmp()就從外面“喚醒”它的上下文。你可以用longjmp()來終止異常,用setjmp()標記相應的異常處理程序。**
函數的輸出
/home/andrew/文檔/IMPORTENT_C/cmake-build-debug/IMPORTENT_C ''setjmp'' is initializing ''j'' exception raised Case 3Process finished with exit code 0總結
以上是生活随笔為你收集整理的高级C语言教程-C语言函数setjmp()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【2017年第4期】专题:大数据标准
- 下一篇: 大数据环境下的存储系统构建:挑战、方法和