F ランタイム スイッチ

すべての数値項目について、有効な数値データであるかをチェックします。
制約事項: これらのスイッチは、ネイティブ COBOL でのみサポートされます。

プロパティ:

デフォルト: オン
タイプ: 一般

説明:

データが有効でない場合は、ランタイム システム エラー 163 (「数字項目に無効な文字がある」) が生成されます。このスイッチを無効にすると、このチェックは実行されません。

このチェックは、CHECKNUM コンパイラ指令を指定して作成された生成コード、および中間コードに対してのみ実行されます。

ランタイム システム、および生成コードで、様々なタイプの数字の操作が最適化されます。数値オペランドの数値データが無効な場合には、これらの数値オペレーションの実行結果が無効になります。デフォルトでは、無効な数値データで数値演算が試行されると、ランタイム システムでランタイム システム エラー 163 が生成されます。

無効なデータは、中間コードと元のコードでの処理が異なります。プログラムの開発中は、数字フィールドのチェックを有効にすることをお勧めします。

ランタイム エラー 163 を受け取った場合は、コードを調整し、無効なデータが使用されないようにすることをお勧めします。+F スイッチを有効にし、ランタイム システム エラー 163 が検知されるまで、作成したプログラムをアニメートしていくと、コード中の無効な数値データを検索することができます。

数字フィールドの無効なデータを解決するための次のコンパイラ指令を 1 つ以上使用すると、コードを修正できない場合があります。

  • HOSTNUMCOMPARE - USAGE DISPLAY の整数型の数字データ項目と、英数字定数または表意定数を比較する操作を制御します。
  • HOSTNUMMOVE - MOVE 文の実行中に、数字フィールド内の無効な文字がコンパイラでチェックされないようにします。使用には注意が必要です。
  • SIGN-FIXUP - HOSTNUMCOMPARE または HOSTNUMMOVE も設定している場合に、MOVE 文および COMPARE 文で、メインフレームのコンパイラ オプション NUMPROC(NOPFD) および NUMPROC(PFD) のエミュレーションが制限されます。
  • SPZERO - USAGE DISPLAY の数字データ項目内にある空白文字をゼロとして扱われるようにします。この指令は非推奨です (SIGN-FIXUP を推奨)。
注: IBM メインフレームの動作との最大限の互換性を確保するために、HOSTNUMMOVE または HOSTNUMCOMPARE を CHARSET(EBCDIC) とともに使用することをお勧めします。CHARSET(ASCII) を使用すると、文字エンコードの違いにより互換性が失われることがあります。

例:

working-storage section. 
    01 item-a       pic 9.
procedure division.
    If item-a =  0.
        Display "zero"
    else
        display "nonzero"
    end-if.

変数項目、a は value 句で初期化されません。そのため、空白文字、x"20" が含まれます。F スイッチを有効にしてこのプログラムを実行すると、数字フィールドに、数値以外の値が含まれているかどうかがランタイム システムでチェックされ、含まれている場合はランタイム エラー 163 になります。