C-standard-library-c-macro-setjmp

提供:Dev Guides
移動先:案内検索

Cライブラリマクロ-setjmp()

説明

Cライブラリマクロ* int setjmp(jmp_buf environment)は、関数 longjmp()が後で使用できるように、現在の *environment を変数環境に保存します。 このマクロがマクロ呼び出しから直接戻る場合、ゼロを返しますが、* longjmp()*関数呼び出しから戻る場合、2番目の引数としてlongjmpに渡された値を返します。

宣言

以下は、setjmp()マクロの宣言です。

int setjmp(jmp_buf environment)

パラメーター

  • environment -これは、環境情報が保存されているjmp_buf型のオブジェクトです。

戻り値

このマクロは複数回返す場合があります。 最初に、直接呼び出しで、常にゼロを返します。 環境に設定された情報でlongjmpが呼び出されると、マクロは再び戻ります。現在、2番目の引数としてlongjmpに渡された値を返します。

次の例は、setjmp()マクロの使用法を示しています。

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

int main () {
   int val;
   jmp_buf env_buffer;

  /*save calling environment for longjmp*/
   val = setjmp( env_buffer );

   if( val != 0 ) {
      printf("Returned from a longjmp() with value = %s\n", val);
      exit(0);
   }

   printf("Jump function call\n");
   jmpfunction( env_buffer );

   return(0);
}

void jmpfunction(jmp_buf env_buf) {
   longjmp(env_buf, "finddevguides.com");
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

Jump function call
Returned from a longjmp() with value = finddevguides.com