Rational Developer for System z
PL/I for Windows, Version 7.6, プログラミング・ガイド

ランタイムの相違を引き起こす言語エレメント

コンパイラーによる言語のインプリメンテーションの相違のために、PL/I for Windows と OS PL/I のもとで、プログラムが異なって実行される原因となるいくつかの 言語エレメントもあります。次のそれぞれの項目は、PL/I for Windows の動作の観点から説明します。

p <= 7 の場合、FIXED BIN(p) は 1 バイトにマップされる
精度が 7 以下で、FIXED BIN として宣言された変数がある場合、それらは、OS PL/I では 2 バイトを占有しますが、PL/I for Windows では 1 バイトのストレージを占有します。この変数が構造体の一部の場合は、通常、このことにより、構造体のマップ方法が変更されるため、プログラムの実行方法にも影響がでます。例えば、メインフレームで作成されたファイルから 構造体が読み込まれる場合は、少ないバイト数が読み込まれることになります。

この相違を回避するには、変数の精度を 8 から 15 まで (両端を含む) の値に変更してください。

AREA の INITIAL 属性は無視される
PL/I for Windows 製品では AREA の INITIAL 属性が無視されてしまうので、それを避けて INITIAL 文節は代入ステートメントに変換します。

例えば、次のコード断片では、配列のエレメントは a1、a2、a3、および a4 には初期化されません。

  dcl (a1,a2,a3,a4) area;
  dcl a(4) area init( a1, a2, a3, a4 );

しかし、コードを次のように書き直せば、希望するように、配列を初期化できます。

  dcl (a1,a2,a3,a4) area;
  dcl a(4) area;

  a(1) = a1;
  a(2) = a2;
  a(3) = a3;
  a(4) = a4;
ERROR メッセージの発行
ERROR 条件が発生した場合、以下の 2 つの条件が満たされると、PL/I for Windows では ERROR メッセージは発行されません。 ERROR メッセージは、SYSPRINT データ・セットにではなく、STDERR に送られます。デフォルトでは、これが端末になります。SYSPRINT が端末に送られる場合は、SYSPRINT バッファー内のすべての出力 (まだ SYSPRINT には書き込まれていない) は、ERROR メッセージが書き込まれる前に書き込まれます。
ADD、DIVIDE、および MULTIPLY はスケールされた FIXED BIN を戻さない
デフォルトである RULES(IBM) コンパイル時オプションでは、変数は、非ゼロのスケール因数を持った FIXED BIN として宣言できます。2 項演算、接頭部演算、および比較演算は、メインフレームと同じように、スケールされた FIXED BIN に関して 実行されます。しかし、ADD、DIVIDE、または MULTIPLY 組み込み関数が、非ゼロ因数を持つ 引数を持つか、非ゼロのスケール因数を持つ結果を指定する場合、PL/I for Windows コンパイラーは、メインフレーム・コンパイラーと同じように、組み込み関数を FIXED BIN としてではなく、FIXED DEC として評価します。

例えば、PL/I for Windows コンパイラーは、下の代入ステートメントの DIVIDE 組み込み関数を FIXED DEC 式として評価します。

  dcl (i,j) fixed bin(15);
  dcl x     fixed bin(15,2);
     .
     .
     .
  x = divide(i,j,15,2)
OVERFLOW および ZERODIVIDE の使用可能化
OVERFLOW および ZERODIVIDE の場合、ERROR 条件は、次の条件のもとで発生します。

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)