setjmp.h

本人首次發帖 ,謝謝大家!


首先該頭文件有三個:

setjmp 宏函數、longjmp函數、jmp_buf類型

setjmp用來保存jmp_buf類型的變量:

表示當前運行點的環境狀態, 然後longjmp函數來返回上次設置的運行環境變量

引用cplusplus例子: 

/* longjmp example */
#include <stdio.h>      /* printf */
#include <setjmp.h>     /* jmp_buf, setjmp, longjmp */

main()
{
  jmp_buf env;
  int val;

  val=setjmp(env);

  printf ("val is %d\n",val);

  if (!val) longjmp(env, 1);

  return 0;
}                                                                                                                                     

在第一次調用longjmp返回0,以後調用返回 longjmp設置的值,

引用cprograme例子 :

#include <iostream>
#include <csetjmp>
 
std::jmp_buf jump_buffer;

 void a(int count) 
{
    std::cout << "a(" << count << ") called\n";
    std::longjmp(jump_buffer, count+1);  // setjump() will return count+1
}
 
int main()
{
    int count = setjmp(jump_buffer);
    if (count != 9) {
        a(count);  // This will cause setjmp() to exit
    }
}

output:

a(0) called
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called

謝謝!

發佈了18 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章