setjmp

提供: RAD Studio
移動先: 案内検索

setjmp.h:インデックス への移動


ヘッダーファイル

setjmp.h

カテゴリ

その他のルーチン

プロトタイプ

int setjmp(jmp_buf jmpb);

説明

ローカルでないジャンプを設定します。

setjmp は,完全なタスク状態を jmpb に受け取り,0 を返します。

後で jmpb を使って longjmp を呼び出すと,取得されたタスク状態が復元され,setjmp が値 val とともに戻ってきたかのように処理が続行されます。

Win32 の場合,タスク状態には次のものが含まれます。

  • セグメントレジスタは保存されない
  • レジスタ変数
  • EBX,EDI,ESI
  • スタックポインタ(ESP)
  • フレームポインタ(EBP)
  • フラグは保存されない

このタスク状態は,setjmp を使って共同ルーチンを実装するために十分な情報を保持しています。

longjmp の前に setjmp を呼び出す必要があります。setjmp を呼び出して jmpb を設定するルーチンは,引き続きアクティブである必要があり,longjmp が呼び出されるまで戻ることはできません。先に戻っていた場合の結果は予想できません。

setjmp は,プログラムの下位レベルのサブルーチンで発生するエラーや例外の処理に役立ちます。

戻り値

setjmp は,最初に呼び出されたときに 0 を返します。longjmp の呼び出しから戻る場合,setjmp は 0 以外の値を返します(例を参照)。



 #include <stdio.h>
 #include <setjmp.h>
 #include <stdlib.h>
 void subroutine(jmp_buf);
 int main(void)
 {
 
     int value;
     jmp_buf jumper;
     value = setjmp(jumper);
     if (value != 0)
     {
        printf("Longjmp with value %d\n", value);
        exit(value);
     }
     printf("About to call subroutine ... \n");
     subroutine(jumper);
     return 0;
 }
 void subroutine(jmp_buf jumper)
 {
     longjmp(jumper,1);
 }



移植性



POSIX Win32 ANSI C ANSI C++

+

+

+

+