RULES(LAXDCL) を指定すると、コンパイラーは、宣言されていない 変数ごとに、I レベルのメッセージのみを発行します。 これに対し、RULES(NOLAXDCL) を指定すると、E レベルのメッセージが出力されます。
コードに十分な品質を与えようとするのであれば、 常に RULES(NOLAXDCL) を指定してコンパイルする必要があります。
しかし、Windows 上でこのオプションをデフォルトにした際、 非常に多くのユーザーから苦情が寄せられたため、現在ではデフォルトではありません。
次のコードを、RULES(NOLAXDCL) を指定してコンパイルするとします。
x: proc( starting_role ) returns( fixed bin(31) );
dcl starting_role fixed bin(31);
return( starring_role + 1 );
end;
すると、コンパイラーは、starring_role が宣言されていないという E レベル のメッセージを出力します。これにより、 この名前がほぼ確実にタイプミスであることが警告されます。 これは、このコンパイラー・オプションを指定する必要性を示す 1 つの 例です。
オプション RULES(NOLAXDCL) は、「実際に動作する」コードにもフラグを立てる場合があります。
read_in = fileread( file_in, addr(buffer), stg(buffer) );
if read_in = 0 then
leave;
read_in が宣言されていない場合でも、このコードは動作します。 しかし、read_in は属性として FLOAT を持つため、 これは好ましくありません。