【COBOL Compiler Enterprise Edition】引数の数が異なる1つの同じサブプログラムの呼び出しについて
質問内容
1つのプログラムで引数の数が異なるサブプログラムの呼び出しが混在している場合に、 コンパイル時にエラーとなるのはなぜですか。
Open COBOL Factory 21 MFAではコンパイルエラーとなりません。
[MAIN]
000000 MAIN.
000000 CALL "SUB1" USING ARG1.
000000 CALL "SUB1" USING ARG1 ARG2.
000000 CALL "SUB1" USING ARG1 ARG2 ARG3.
[SUB]
000000 LINKAGE SECTION.
000810 01 ARG1 PIC X(5).
000900 01 ARG2 PIC X(5).
000000 01 ARG3 PIC X(5).
001000 PROCEDURE DIVISION USING ARG1 ARG2 ARG3
回答内容
呼ぶプログラムのCALL命令の中のUSING句と、呼ばれるプログラムの手続き部の見出しのUSING句の作用対象の個数は同じでなければならない仕様となっています。
この仕様はMFAでもCOBOL EEでも同じですが、MFAはコンパイル時にチェックしないのに対し、COBOL EEではチェックするようになったためコンパイルエラーが出力されるようになりました。
呼ぶプログラムに引数の指定が無く、呼ばれるプログラムに引数の指定があった場合の、呼ばれるプログラムの引数の変数の値は不定(何が設定されるかわからない状態)になります。
値が不定の変数を参照しますと、動作不正や例外が発生する可能性があります。
これまでMFAで動作していたとしても、不定な値の内容によっては一致しない引数の場合に動作不正や例外が発生する可能性もあります。
対策といたしましては、mainプログラムの中でsubプログラムと引数の個数が合っていないCALLについて、個数を合わせるか別名のサブプログラムに変更するよう、プログラムの修正をお願いします。
【確認済みのバージョン】V1
【確認済みの対象OS】Windows
製品名カテゴリ
-
コンテンツID:
3150106340
-
公開日:
2013年10月17日
-
最終更新日:2013年10月17日
アンケート
サポート情報充実のためアンケートにご協力をお願いいたします。
コメント欄: