Latest web development tutorials

C 庫宏– setjmp()

C 標準庫 - <setjmp.h> C標準庫- <setjmp.h>

描述

C庫宏int setjmp(jmp_buf environment)把當前環境保存在變量environment中,以便函數longjmp()後續使用。 如果這個宏直接從宏調用中返回,則它會返回零,但是如果它從longjmp()函數調用中返回,則它會返回一個傳給longjmp作為第二個參數的非零值。

聲明

下面是setjmp() 宏的聲明。

int setjmp(jmp_buf environment)

參數

  • environment --這是一個類型為jmp_buf的用於存儲環境信息的對象。

返回值

這個宏可能不只返回一次。 第一次,在直接調用它時,它總是返回零。 當調用longjmp 時帶有設置的環境信息,這個宏會再次返回,此時它返回的值會傳給longjmp 作為第二個參數。

實例

下面的實例演示了setjmp() 宏的用法。

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

int main()
{
   int val;
   jmp_buf env_buffer;

   /* 保存 longjmp 的调用环境 */
   val = setjmp( env_buffer );
   if( val != 0 ) 
   {
      printf("从 longjmp() 返回值 = %s\n", val);
      exit(0);
   }
   printf("跳转函数调用\n");
   jmpfunction( env_buffer );
   
   return(0);
}

void jmpfunction(jmp_buf env_buf)
{
   longjmp(env_buf, "w3cschool.cc");
}

讓我們編譯並運行上面的程序,這將產生以下結果:

跳转函数调用
从 longjmp() 返回值 = w3cschool.cc

C 標準庫 - <setjmp.h> C標準庫- <setjmp.h>