v60NumWithCharBehavior

v60NumWithCharBehavior ビルド記述子オプションは、割り当てと比較で EGL が NUM 型を処理する方法に影響を与えます。

バージョン 7 から、EGL は、CHAR 値に対する割り当てまたは比較時に他の数値型を処理するときと同じ方法で NUM 型を方法で処理します。

v60NumWithCharBehavior ビルド記述子オプションが YES に設定されている場合は、EGL は、以前のバージョンと VisualAge® Generator で行っていた方法で NUM 型変数を処理します。動作の違いは微妙で複雑です。このオプションは、VisualAge Generator をエミュレートする必要がある場合のみ YES に設定する必要があります。詳しくは、このトピックの例を参照してください。

VisualAge Generator およびバージョン 6.0 では、データを移動および割り当てるときに、生成される COBOL プログラムに対する動作が異なります。VisualAge Generator では、数値が移動または割り当てられる前に数値の符号が変更されませんでしたが、バージョン 6.0 では符号が変更されていました。つまり、VisualAge Generator は修正なしのバイト移動を行い、バージョン 6.0 は、表示可能な NUM 値になるように符号を設定した後でバイト移動を実行します。ほとんどの場合、この違いはわかりませんが、上位ニブルに 16 進数 C (x'Cx') を持つバイトが NUM フィールドに含まれているとき、移動に影響を及ぼす可能性があります。したがって、望まれる結果が VisualAge Generator の動作を完全にエミュレートすることである場合は、追加のシンボリック・パラメーター VAGNUMWITHCHARBEHAVIOR も YES の値に設定する必要があります。

v60NumWithCharBehavior オプションは、spacesZeroblanksAsZero などの他のビルド記述子オプションの動作に影響を与えることがあります。 詳しくは、spacesZeroおよびblanksAsZeroを参照してください。

NO
EGL は、NUM 型をその他すべての数値型と同じように処理する必要があります。
YES
EGL は、NUM 型を VisualAge Generator での場合と同じように処理する必要があります。

デフォルト値

v60NumWithCharBehavior のデフォルト値は、vagCompatibility ビルド記述子オプションに依存します。
  • vagCompatibility が YES に設定されている場合は、v60NumWithCharBehavior のデフォルト値は YES です。
  • vagCompatibility が NO に設定されている場合は、v60NumWithCharBehavior のデフォルト値は NO です。

オプションの手動設定

ほとんどの場合、v60NumWithCharBehavior ビルド記述子オプションを手動で設定する必要はありません。

  • VisualAge Generator からマイグレーションした場合は、v60NumWithCharBehavior を手動で設定する必要はありません。これは、vagCompatibility を YES に設定すると、このオプションは自動的に YES に設定されるためです。
  • VisualAge Generator からマイグレーションしなかった場合は、v60NumWithCharBehavior を手動で設定する必要はありません。これは、vagCompatibility を NO に設定すると、このオプションは自動的に NO に設定されるためです。
  • vagCompatibility ワークスペース設定が YES に設定されている新規アプリケーションを作成している場合に、VisualAge Generator のデフォルトの動作を継承しないようにするには、v60NumWithCharBehavior および vagCompatibility ビルド記述子オプションを明示的に NO に設定する必要があります。

v60NumWithCharBehavior を YES に設定すると、以下の比較を行うことができます。
if( "2009-03-26" > 0)
  ...
end

0 は比較のために "0" に変換されます。 バージョン 7 の動作では、0 は数値であり、"2009-03-26" は無効な数値であるため比較は失敗します。

v60NumWithCharBehavior を YES に設定すると、EGL は、バイト移動を使用して NUM を CHAR に割り当てます。
num_var NUM = -4;
char_var CHAR(1);

char_var = num_var; // value of char_var is 't'
char_var の値は次のようになります。
  • デバッガーおよび Java™ 生成では + 't' (x'74')
  • 生成される COBOL では + 'M' (x'D4')
これらの値には、ASCII と EBCDIC で負の数を表現する方法の違いが反映されています。

バージョン 7 の動作では、char_var の値は -4 です。