當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C語言 setjmp用法及代碼示例

C語言setjmp頭文件(setjmp.h)中setjmp宏的用法及代碼示例。

用法:

int setjmp (jmp_buf env);
節省調用環境以實現跳遠
具有函數形式的宏env包含有關該代碼執行點上調用環境當前狀態的信息,以便可以在以後的調用中將其恢複longjmp

呼喚longjmp信息存儲在env恢複相同的狀態,並將控件返回到同一點(對setjmp),該值被評估為特定的非零值。

調用環境的狀態包括所有可訪問對象的值,但函數本地自動持續時間的值除外,這些值沒有volatile限定的類型,並且在調用之前會發生變化longjmp;這些具有不確定的值。

的調用setjmp應該單獨是一個表達式語句,或者在選擇或迭代語句中作為(可能取反的)整個控製表達式進行評估,或者與整數常量表達式進行比較。否則,會導致未定義的行為

參數

env
類型的對象jmp_buf存儲環境信息的位置。

返回值

該宏可能返回不止一次:第一次,直接調用它;在這種情況下,它始終返回零。
什麽時候longjmp調用時將信息設置為env,宏再次返回;這次它返回傳遞給的值longjmp如果它不為零,則作為第二個參數,或者1如果為零。

示例

/* setjmp example: error handling */
#include <stdio.h>      /* printf, scanf */
#include <stdlib.h>     /* exit */
#include <setjmp.h>     /* jmp_buf, setjmp, longjmp */

main()
{
  jmp_buf env;
  int val;

  val = setjmp (env);
  if (val) {
    fprintf (stderr,"Error %d happened",val);
    exit (val);
  }

  /* code here */

  longjmp (env,101);   /* signaling an error */

  return 0;
}


函數用途setjmp設置一個catch-point,以後可以由它調用longjmp表示錯誤。

輸出:
Error 101 happened



相關用法


注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C setjmp function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。