コードの一部をコンパイルしているときに、次の新しいメッセージが表示 されることもあります。
IBM1220I W Result of comparison is always constant
新しいコンパイラーは、例えば次のようなコードがあった場合にこのメ ッセージを出力します。
DCL ZWSTRING CHAR(80);
DCL ZWSTRING2 CHAR(8);
ZWSTRING = 'E R R O R';
.....
IF ZWSTRING2 = 'E R R O R' THEN
このメッセージが出力される理由は、「E R R O R」は最後の文字がブランク ではない CHAR(9) であるため、決して CHAR(8) フィールドに等しくなること はないからです。
このメッセージを生成するコードは、問題があるため詳しく調 べる必要があります。 実際に、このメッセージで DO ループ・ステートメントが示されている場 合に何も処置をとらなかった場合、コードで無限ループが発生する可能性が あります。 コンパイラーは、例えば次のような 3 つの実行可能ステートメントのすべてに ついてこのメッセージを出力し、最後のステートメントでは、LEAVE ステー トメントにより終了されない限りループが無限に実行されます。
DCL ZZ9 PIC'ZZ9';
DCL N FIXED BIN(15);
IF ZZ9 < 0 THEN ...
IF ZZ9 <= 999 THEN ...
DO N = 1 TO 32768; ...; END;
なお、LEAVE (または GOTO) ステートメントにより終了されるまで「無限に 」実行したいループがある場合は、このループ・ステートメントを DO FOREVER を使用してコーディングするのが最適な方法です。