プログラムをメインフレームから Windows ベースのワークステーションに移行して、この新しい環境でコンパイルする場合は、正しいコンパイラー・オプションを選択して、メインフレームでの COBOL 言語の機能を可能にする必要があります。 COPY ステートメントを使用して、プログラムの移植に役立てることもできます。
正しいコンパイラー・オプションの選択: COBOL for Windows では、特定のメインフレーム COBOL コンパイラー・オプションが適切でない場合、そのコンパイラー・オプションはコメントとして扱われます。 これにより、予測不能な結果が生じる可能性があります。コンパイラーは、オブジェクトに W レベルのメッセージでフラグを立てます。
メインフレーム COBOL の言語機能の可能化: 次の言語機能は、メインフレーム COBOL では有効ですが、COBOL for Windows でのコンパイル時にはエラーが発生するか、または予測不能な結果が生じる可能性があります。 次の表に、考えられる問題に対する解決策を示します。
| メインフレーム上の言語機能 | COBOL for Windows の動作 | 解決策または制約事項 |
|---|---|---|
| ACCEPT および DISPLAY ステートメント | COBOL 環境変数を検査して、DISPLAY または ACCEPT ステートメントのターゲットを判別します。 | メインフレーム・プログラムが ACCEPT または DISPLAY ステートメントのターゲットとしてホスト DD 名を期待する場合は、値が適切なファイル名に設定された同等の環境変数を使用して、これらのターゲットを定義します。 |
| ASSIGN 文節 | assignment-name に基づいたシステム・ファイル名に対し、異なる構文およびマッピングを使用します。 | ASSIGN 文節 (「COBOL for Windows 言語解説書」) を参照してください。 |
| CALL ステートメント | ファイル名を CALL 引数として使用できません。 | |
| CLOSE ステートメント | FOR REMOVAL 句、WITH NO REWIND 句、および UNIT/REEL 句をコメントとして扱います。 | これらの句を移植可能プログラムに使用しないでください。 |
| LABEL RECORD 文節 | LABEL RECORD IS data-name 句、USE. . . AFTER. . . LABEL PROCEDURE 句、および GO TO MORE-LABELS 句をエラーとして扱います。 | z/OS QSAM 対応のユーザー・ラベル処理に依存するプログラムは移植できません。 |
| PROCEDURE-POINTER データ項目 | 4 バイト (メインフレーム上で 8 バイト) です。 | |
| RERUN 文節 | RERUN 文節をコメントとして扱います。 | |
| SHIFT-IN、SHIFT-OUT 特殊レジスター | CHAR(EBCDIC) コンパイラー・オプションが有効でないと、これらのレジスターが検出されたときに E レベルのメッセージが出されます。 | CHAR(EBCDIC) コンパイラー・オプションを使用します。 |
| SORT-CONTROL 特殊レジスター | このレジスターによって識別されたシステム・ファイル名のファイル命名規約に従います。 | Windows ワークステーションとメインフレームでは命名規則が異なることに注意してください。 |
| STOP RUN | マルチスレッド・プログラムではサポートされません。 | STOP RUN を、C exit() 関数への呼び出しと置き換えます。 |
| WRITE ステートメント | WRITE. . . ADVANCING を環境名 C01-C12 または S01-S05 で指定した場合は、ADVANCING句を無視します。 |
移植の問題に役立つ COPY ステートメントの使用: 多くの場合、COPY ステートメントを使用してプラットフォーム固有のコードを分離すると、移植性の問題を回避することができます。 例えば、あるプラットフォーム用のコンパイル時にプラットフォーム固有のコードを組み込み、別のプラットフォーム用のコンパイル時にはそのコードを除外することができます。また、COPY REPLACING 句を使用して、ファイル名などの移植不可能なソース・コード・エレメントをグローバル変更することも可能です。
関連参照
ランタイム環境変数
付録A. ホスト COBOL との違いの要約
COPY ステートメント
(「COBOL for Windows 言語解説書」)