プログラムが HP C RTL ルーチンの
setjmpまたは
longjmpを使用するときには,
LIB$ESTABLISHの代わりに
VAXC$ESTABLISHを使用する必要があります。
setjmpと
longjmp,または
sigsetjmpと
siglongjmpを参照してください。
VAXC$ESTABLISH関数は HP C for OpenVMS 関数からしか呼び出せません。この関数は,
HP C コンパイラがランタイム・スタック上に割り当てるデータ・スペースに依存しているからです。
HP C 関数から直接に OpenVMS システム・ライブラリ・ルーチン
LIB$ESTABLISHを呼び出すと,
setjmpおよび
longjmp関数で未定義の動作が発生します。
OpenVMS 例外に UNIX スタイルのシグナルを生成させるためには,ユーザ例外ハンドラは,自分が処理したくない例外を受信したときに
SS$_RESIGNALを返さなくてはなりません。
SS$_NORMALを返すと, UNIX スタイルのシグナルの生成は行われません。 UNIX シグナルは,メインの C プログラムのスタック・フレーム内の例外ハンドラによって生成されたときと同じように扱われます。すべての OpenVMS 例外が UNIX シグナルに対応しているわけではありません。 OpenVMS 例外と UNIX スタイルのシグナルの関係については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4 章を参照してください。
引数 NULL を指定して
VAXC$ESTABLISHを呼び出すと,そのルーチン内の既存のハンドラが取り消されます。
| 注意
OpenVMS Alpha システムでは,
VAXC$ESTABLISHは, HP C RTL 関数ではなく,コンパイラの組み込み関数として実装されている。 (Alpha only)
|