-

「Functions HI-TECH C LONGJMP」の版間の差分

提供: HI-TECH C for CP/M Fan WIKI(JP)
移動先: 案内検索
(ページの作成:「<strong>LONGJMP</strong> ==概要== #include <setjmp.h> void longjmp(jmp_buf buf, int val) ==詳細== <strong>Longjmp</strong>()は<strong>setjmp</strong>()...」)
 
(相違点なし)

2017年12月29日 (金) 18:38時点における最新版

LONGJMP

概要

#include <setjmp.h>

void      longjmp(jmp_buf buf, int val)


詳細

Longjmp()はsetjmp()と連携して、ローカルでないgotoのためのメカニズムを提供します。この機能を使うためにはsetjmp() 外部レベルの関数からjmp_buf引数と共に呼び出される必要があります。 setjmp()からの呼び出しは0を返します。このレベルの実行に戻るには、内部レベルの実行から同じjmp_buf引数と共に呼び出される必要があります。

setjmp() をよびだした関数はlongjmp()が呼び出された時にはアクティブである必要があることに注意してください。 不正データを含むスタック利用のせいで、このルールの違反は、災害を引き起こします。longjmp() のval引数は明らかに?setjmp()から返されたものです。 純粋な?setjmp() 呼び出しからのそれと区別するために これはゼロであってはダメです。

#include <setjmp.h>

static jmp_buf  jb_err;

main()
{
    if(setjmp(jb_err)) {
    printf("An error occured0);
    exit(1);
    }
    a_func();
}

a_func()
{
    if(do_whatever() != 0)
    longjmp(jb_err, 1);
    if(do_something_else() != 0)
    longjmp(jb_err, 2);
}

上記の longjmp()呼び出しは決して値を返しません? setjmp()は値を返すようですが、longjmp()に与えられた引数と同じです??

参照

setjmp