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

RULES

このオプションは、特定の言語機能を使用可能または使用不可にし、代替の選択肢が提供されている場合はセマンティクスを選択するために 使用できます。 これは一般プログラミング・エラーの診断に役立ちます。

構文図を読む構文図をスキップする             .-+---+-----------------------------------------.
             | '-,-'                                         |
             V   .-IBM--.                                    |
>>-RULES--(----+-+- ANS-+----------------------------------+-+--)-><
               | .-BYNAME---.                              |
               +-+-NOBYNAME-+------------------------------+
               | .-NODECSIZE-.                             |
               +-+-DECSIZE---+-----------------------------+
               | .-ELSEIF----.                             |
               +-+- NOELSEIF-+-----------------------------+
               | .-EVENDEC----.                            |
               +-+- NOEVENDEC-+----------------------------+
               | .-GOTO---.                                |
               +-+-NOGOTO-+--------------------------------+
               | .-NOLAXBIF-.                              |
               +-+-LAXBIF---+------------------------------+
               | .-NOLAXCTL-.                              |
               +-+-LAXCTL---+------------------------------+
               | .-LAXDCL---.                              |
               +-+-NOLAXDCL-+------------------------------+
               | .-NOLAXDEF-.                              |
               +-+-LAXDEF---+------------------------------+
               | .-LAXENTRY---.                            |
               +-+-NOLAXENTRY-+----------------------------+
               | .-LAXIF---.                               |
               +-+-NOLAXIF-+-------------------------------+
               | .-LAXINOUT---.                            |
               +-+-NOLAXINOUT-+----------------------------+
               | .-LAXLINK----.                            |
               +-+- NOLAXLINK-+----------------------------+
               | .-LAXMARGINS----------------------------. |
               +-+- NOLAXMARGINS--+--------------------+-+-+
               |                  |    .-STRICT---.    |   |
               |                  '-(--+-XNUMERIC-+--)-'   |
               | .-LAXPUNC----.                            |
               +-+- NOLAXPUNC-+----------------------------+
               | .-LAXQUAL-------------------------.       |
               +-+-NOLAXQUAL--+------------------+-+-------+
               |              |    .-LOOSE--.    |         |
               |              '-(--+-STRICT-+--)-'         |
               | .-LAXSCALE---.                            |
               +-+-NOLAXSCALE-+----------------------------+
               | .-LAXSEMI----.                            |
               +-+- NOLAXSEMI-+----------------------------+
               | .-LAXSTG----.                             |
               +-+- NOLAXSTG-+-----------------------------+
               | .-NOLAXSTRZ-.                             |
               +-+-LAXSTRZ---+-----------------------------+
               | .-MULTICLOSE---.                          |
               +-+-NOMULTICLOSE-+--------------------------+
               | .-PROCENDONLY---.                         |
               +-+-NOPROCENDONLY-+-------------------------+
               | .-STOP---.                                |
               +-+-NOSTOP-+--------------------------------+
               | .-UNREF----.                              |
               '-+- NOUNREF-+------------------------------'
 
IBM または ANS
IBM サブオプションの場合:

ANS サブオプションの場合:

BYNAME または NOBYNAME
NOBYNAME を指定すると、コンパイラーは E レベル・メッセージを伴うすべての BYNAME 割り当てにフラグを立てます。
DECSIZE または NODECSIZE
DECSIZE を指定すると、コンパイラーは、SIZE 条件が割り当てによって引き起こされる場合、SIZE 条件が使用不可になった ときに、FIXED DECIMAL 式の FIXED DECIMAL 変数へのすべての割り当てにフラグを立てます。

RULES(DECSIZE) を指定すると、コンパイラーは、大量のメッセージを出すことがあります。 これは、SIZE が使用不可にされた場合、X = X + 1 の形式のステートメントにはすべてフラグが立てられるためです (X が FIXED DECIMAL の場合)。

ELSEIF または NOELSEIF
NOELSEIF を指定すると、コンパイラーは IF ステートメントが直後に続くすべての ELSE ステートメントにフラグを立て、それを SELECT ステートメントとして書き換えるよう提案します。

このオプションは、ネストした一連の IF-THEN-ELSE ステートメントではなく、SELECT ステートメントの使用を実施するときに役立ちます。

EVENDEC または NOEVENDEC
NOEVENDEC を指定すると、コンパイラーは、偶数の精度を指定するすべての FIXED DECIMAL 宣言にフラグを立てます。
GOTO|NOGOTO
NOGOTO を指定すると、BEGIN ブロックの外にあるものを除き、すべての GOTO ステートメントにフラグが立てられます。
LAXBIF または NOLAXBIF
LAXBIF を指定すると、コンパイラーは、空のパラメーター・リストなしで使用した場合でも、NULL などの組み込み関数にコンテキスト宣言を作成します。
LAXCTL または NOLAXCTL
LAXCTL を指定すると、固定エクステントを使用して CONTROLLED 変数を宣言しても、CONTROLLED 変数を異なるエクステントに 割り当てることができます。 NOLAXCTL を指定すると、CONTROLLED 変数を異なるエクステントに割り当てる場合に、そのエクステントをアスタリスクとして 指定するか、非定数式として指定する必要があります。

NOLAXCTL の場合、以下のコードは正しくありません。

    dcl a bit(8) ctl;
    alloc a;
    alloc a bit(16);

しかし、次のコードは NOLAXCTL でも有効です。

    dcl b bit(n) ctl;
    dcl n fixed bin(31) init(8);
    alloc b;
    alloc b bit(16);
LAXDCL または NOLAXDCL
LAXDCL を指定すると、暗黙宣言が可能になります。NOLAXDCL を指定すると、BUILTIN の場合と SYSIN および SYSPRINT ファイル の場合を除いて、暗黙宣言およびコンテキスト宣言はすべて不可能になります。
LAXDEF または NOLAXDEF
LAXDEF を指定すると、いわゆる無許可の定義が、コンパイラーのメッセージなしに受け入れられます (コンパイラーが通常作成する E レベル・メッセージも出ません)。
LAXENTRY または NOLAXENTRY
LAXENTRY を指定すると、プロトタイプ化されていないエントリー宣言が可能になります。 NOLAXENTRY を指定すると、コンパイラーは、プロトタイプ化されていないすべてのエントリー宣言 (つまり、パラメーター・リストを指定していないすべての ENTRY 宣言) にフラグを立てます。 これは、ENTRY にパラメーターがない場合、単に ENTRY としてではなく、ENTRY() として宣言する必要があることを意味していることに注意してください。
LAXIF または NOLAXIF
RULES(NOLAXIF) を指定すると、コンパイラーは、BIT(1) NONVARYING 属性を持たないすべての IF、WHILE、UNTIL、および WHEN 文節にフラグを立てます。

NOLAXIF の場合、以下のすべてにフラグが立てられます。

  dcl i fixed bin;
  dcl b bit(8);
  ...
  if i then ...
  if b then ...
LAXINOUT | NOLAXINOUT
NOLAXINOUT を指定すると、コンパイラーは、すべての ASSIGNABLE BYADDR パラメーターが入力 (および場合により 出力) パラメーターであると想定し、そのため、このようなパラメーターが初期化されていないと考えられる場合は警告を 出します。
LAXLINK または NOLAXLINK
NOLAXLINK を指定すると、コンパイラーは、以下のいずれかが一致しない場合に、2 つの ENTRY 変数または定数のすべての代入または比較にフラグを立てます。
LAXMARGINS または NOLAXMARGINS
NOLAXMARGINS を指定すると、STRICT および XNUMERIC サブオプションの設定に応じて、右マージンの後に 非ブランク文字がある行にコンパイラーがフラグを立てます。 このオプションは、誤って右マージンから押し出された終了コメントなどの コードの検出に役立ちます。

NOLAXMARGINS および STMT オプションがプリプロセッサーのいずれかとともに使用される場合、NOLAXMARGINS オプションが 原因でフラグが立てられたステートメントはステートメント・ゼロとして報告されます。 (これは、すべてのプリプロセッサーが完了してからステートメントの番号付けが行われるためです。 ただし、ソースが読み取られると同時にマージンの外側にあるテキストが検出されます。)

STRICT
STRICT サブオプションを指定すると、右マージンの後に 非ブランク文字がある行にコンパイラーがフラグを立てます。
XNUMERIC
XNUMERIC サブオプションを指定すると、右マージンの後に 非ブランク文字がある行にコンパイラーがフラグを立てます。 ただし、右マージンが 72 列目であり、73 列目から 80 列目のすべてに数字が入っている場合、 コンパイラーはフラグを立てません。
LAXPUNC または NOLAXPUNC
NOLAXPUNC を指定すると、コンパイラーは想定される句読点が欠落している場所 に E レベル・メッセージのフラグを立てます。

ステートメント "I = (1 * (2);" を例にとると、コンパイラーはセミコロンの前に右側の閉じ括弧を入れるべきであった と想定します。RULES(NOLAXPUNC) を指定した場合、このステートメント に対しては E レベル・メッセージのフラグが立てられ、指定していない場合は W レベル・メッセージのフラグが立てられます。

LAXQUAL | NOLAXQUAL
NOLAXQUAL(LOOSE) を指定すると、コンパイラーは、レベル 1 ではなく、ドット修飾のない構造体メンバーへのすべての参照にフラグを立てます。 次の例を見てください。
dcl
  1 a,
    2 b,
      3 b fixed bin,
      3 c fixed bin;

c   = 11;   /* would be flagged */
b.c = 13;   /* would not be flagged */
a.c = 17;   /* would not be flagged */

NOLAXQUAL(STRICT) を指定すると、コンパイラーは、レベル 1 の名前を含まない構造体メンバーへのすべての参照にフラグを立てます。 次の例を見てください。

dcl
  1 a,
    2 b,
      3 b fixed bin,
      3 c fixed bin;

c   = 11;   /* would be flagged */
b.c = 13;   /* would be flagged */
a.c = 17;   /* would not be flagged */
LAXSCALE|NOLAXSCALE
NOLAXSCALE を指定すると、コンパイラーは、すべての FIXED BIN(p,q) または FIXED DEC(p,q) 宣言にフラグを立てます (q < p または p > q)。
LAXSEMI または NOLAXSEMI
NOLAXSEMI を指定すると、コンパイラーは、コメントの内部に現れるすべてのセミコロンにフラグを立てます。
LAXSTG または NOLAXSTG
NOLAXSTG を指定すると、コンパイラーは、B がたとえパラメーターであっても (ここが重要な部分である)、変数 A が ADDR(B) および STG(A) > STG(B) に BASED として宣言されている宣言にフラグを立てます。

コンパイラーは、B が AUTOMATIC または STATIC ストレージにあると、前からこの種の問題にフラグを立てますが、B がパラメーターであるときには、デフォルトでこれにフラグを立てません (お客様によっては、実引数を記述しないでプレースホルダー属性で B を宣言するからです)。 パラメーターおよび引数の宣言が一致しない (または一致する必要のある) お客様にとって、RULES(NOLAXSTG) を指定することは、より多くのストレージ・オーバーレイの問題を検出するのに役立つ可能性があります。

LAXSTRZ または NOLAXSTRZ
LAXSTRZ を指定すると、コンパイラーは、余分のビットがすべてゼロである (または、余分の文字がすべてブランクで ある) 場合に、長すぎる定数値に初期化された、または割り当てられた ビット変数または文字変数にフラグを立てません。
MULTICLOSE または NOMULTICLOSE
NOMULTICLOSE を指定すると、コンパイラーはステートメントの複数のグループ のクローズを強制するすべてのステートメントにフラグを立て、E レベル・メッセージを出します。
PROCENDONLY|NOPROCENDONLY
NOPROCENDONLY を指定すると、PROCEDURE を閉じる END ステートメントでその PROCEDURE が指定されていない場合 (つまり、END キーワードのすぐ後にセミコロンが続く場合)、その END ステートメントにフラグが立てられます。
STOP|NOSTOP
NOSTOP を指定すると、すべての STOP および EXIT ステートメントにフラグが立てられます。
UNREF または NOUNREF
NOUNREF を指定すると、コンパイラーは、レベル 1 の AUTOMATIC 変数 (参照されておらず、かつそれが構造体または共用体であれば、参照されているサブエレメントを含まない変数) すべてにフラグを立てます。

デフォルト: RULES (IBM BYNAME NODECSIZE EVENDEC ELSEIF GOTO NOLAXBIF NOLAXCTL LAXDCL NOLAXDEF LAXENTRY LAXIF LAXINOUT LAXLINK LAXPUNC LAXMARGINS(STRICT) LAXQUAL LAXSCALE LAXSEMI LAXSTG NOLAXSTRZ MULTICLOSE PROCENDONLY STOP UNREF)


Terms of use | Feedback

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