ランタイム エラー

ランタイム エラーは、実行中に起こるプログラム例外です。次に、プログラム例外の例をいくつか示します。

上記のようなエラーが発生すると、ランタイム システムは適切な状態を発生させて応答します。プログラムが特定の状態に対してハンドラーを設定している場合、ハンドラーが呼び出されます。設定していない場合は、ランタイム システムがデフォルトのアクションを実行します。プログラムは、さまざまな状態に対するハンドラーを設定しますが、その設定方法は言語によって異なります。PL/I プロシージャは、ON ユニットを使用してハンドラーを設定できます。FORTRAN プロシージャは、I/O 文で ERR= および END= 指定子を使用して、特定の種類の例外のハンドラーを設定できます。その他の言語では、例外の処理方法は提供されていません。

ハンドラーが存在しない場合、ENDPAGE (f)、FINISH、UNDERFLOW、および ERROR 状態以外のほとんどの状態でランタイム システムが実行するデフォルト アクションは、単純に ERROR 状態を発生させることです。

メッセージ行の形式は次のとおりです。

*** Condition ERROR raised

別の状態に対するデフォルト アクションとして ERROR 状態が発生した場合は、上記の行に次の別の行が続きます。

*** Unhandled condition cccccc[for 000000 on file ffffff] at PC=xxxxxxxx

詳細は次のとおりです。

cccccc 条件の名前。プログラム例外の性質を示します。この性質については、本節の以降の説明を参照してください。
000000 I/O 操作の説明
ffffff ファイル名
xxxxxxxx     エラーが検出されたときの PC の 16 進数 (通常は、ランタイム ライブラリからのルーチンに含まれる命令のアドレス)

エラーがファイルの I/O 操作に関連する場合、メッセージのオプション部分が表示されます。

I/O エラーは、ファイルの操作に関連するプログラム例外です。順次入力でファイルの終わりが出現すると、ENDFILE 状態が発生する場合があります。また、ファイルを開く際のエラーは、通常 UNDEFINEDFILE 状態を発生させます。その他の I/O エラーに対してランタイム システムが使用する条件名は、次の形式をとります。

I0_ERROR_nnn

ここで、nnn は、特定のエラーのエラー コードです。これは、ランタイム システムのエラー コードまたは UNIX システムのエラー コードのいずれかになります。

AREA 状態は、次の 2 つの状況で発生します。(1) 割り当て用の空き記憶域が不十分な領域へ、基底付き変数の割り当てを試行した場合。(2) ある領域を別の領域に割り当てようと試行した際に、割り当てる領域の最大サイズが、割り当て先の領域の最大サイズを超える場合。

浮動小数点の例外は、OVERFLOW、UNDERFLOW、ZERODIVIDE、CONVERSION、INVALID_OPERAND、または INVALID_mmmm (ここで、mmmm は浮動小数点の関数または演算の名前) の状態を発生させます。

OVERFLOW 計算結果の大きさが巨大で、表現できないことを示します。
UNDERFLOW 計算結果の大きさが 0 に近すぎて、表現できないことを示します。
ZERODIVIDE ゼロでの除算が試行されたことを示します (ただし、ゼロをゼロで割る特殊な場合には、SIGFPE が発生します)。
注:

この状態は、整数の除算が実行された場合には認識されません。この場合、通常の計算エラーの ONCODE (99200) が返されます。

CONVERSION 浮動小数点値から整数への変換、サイズの異なる別の浮動小数点値への変換 (またはその逆)、文字ストリング表現への変換 (またはその逆) が正しく実行できない場合に発生します。
INVALID_OPERAND 浮動小数点関数 (SIN、COS、TAN、EXP、LOG など) に対するオペランドが、システムにより正確に処理できる範囲に該当しない場合の結果です。
INVALID_mmmm     通常、示されている浮動小数点関数または演算に対する無効なオペランドを示します。これは、オペランドが非数または正負の無限大であるか、あるいはその関数または演算の数学領域を逸脱している場合です。

RTS エラーは、I/O に関係しない、ランタイム システムにより検出されるプログラム例外です。これらのエラーに対する条件名は、次の形式をとります。

 RTS_ERROR_nnn

ここで、nnn は、表 B-1 にリストされているエラー コードのいずれかです。あるデータ型から別のデータ型への変換に関連する RTS エラーは、CONVERSION 状態としてレポートされる場合があります。

最後に、UNIX 信号は、システムにより検出されるエラーで、システムの信号メカニズムによりプログラムにレポートされます。信号条件名は次の形式をとります。

SIGxxxx

ここで、xxxx は信号の値に応じて異なります。さまざまな UNIX 信号の値については、ご使用の UNIX のマニュアルを参照してください。一部の UNIX システムでは、浮動小数点の例外は SIGFPE と表示されます。