coblongjmp 関数で、ローカルでない GO TO をエラーや例外処理に使用できるようにします。
#include "cobsetjmp.h"
int cobsetjmp(struct cobjmp_buf *buf);
buf | 現在の実行環境が保存されるバッファー。 |
cobsetjmp() 関数は、buf で指定されたバッファーに、現在の COBOL プログラムと C 関数の環境を保存します。 cobsetjmp() 関数は、0 の値を返却する C ライブラリ関数 setjmp() を呼び出します。
cobsetjmp() を呼び出した C 関数のどこかからか、C や COBOL サブプログラムから coblongjmp() が続けて呼び出されると、cobsetjmp() 呼び出しの直後に実行が回復されます。
coblongjmp() 呼び出し後、cobsetjmp() は 0 でない値を返却し、cobsetjmp() 呼び出し後にその値がテストされます。
coblongjmp() と cobsetjmp() 関数の使用には、次のような制限があります。
なし
次の例は、coblongjmp() と cobsetjmp() 関数の使用法を示しています。
void some_c_func(void) { struct cobjmp_buf buf; if (cobsetjmp(&buf) != 0) { cobprintf("Returned from coblongjmp\n"); return; } /* ここに有効なプログラムコードを記述 - たとえば COBOL の呼び出し */ coblongjmp(&cobjmp_buf); }