COBOL2002 ユーザーズガイド
このシステムのコンパイラのコード系はシフトJIS(SJIS)ですが,EUC(UJIS)を使っているコンパイラもあります。
半角かたかな文字のバイト数が,シフトJISコードと日本語EUCコードでは次のように異なります。このため,半角かたかな文字は使わないで全角かたかなを使った方が移植性が良くなります。
内部コードはシステムによって異なります。16進英数字定数を使うということは内部コードを意識しているということなので移植性が悪くなります。
システムによってはシフトコードを指定することで日本語文字データを区別しているものがあります。日本語定数を使わないで,英数字定数で日本語文字データを指定すると,英数字定数の長さが異なってきます。日本語文字データの転記,比較などは日本語定数を使った方が移植性が良くなります。
全角の空白を記述した場合,システムによってコード値が(2020)16になったり,(8140)16になったりします。このため,比較や転記などで使用する日本語定数の中に空白があると,生成されるオブジェクトコードが異なります。
システムによっては,プログラム名に英小文字を使えないものや英大文字と英小文字の等価規則が適用されないものがあります。このため,プログラム名段落やCALL文のプログラム名に英小文字を使わない方が移植性が良くなります。
異なった文字集合(例えば,かたかな文字と英数字文字)の順序は,システムによって異なります。このため,異なった文字集合間の比較をしない方が移植性が良くなります。
数値の表現方法は,符号表現を含めてシステムに依存します。このため,数値の内部表現を意識したコーディングを避けた方が移植性が良くなります。
01 X. 02 A PIC 9(2) USAGE COMP-X. 02 B PIC X. 01 FILLER REDEFINES X. 02 AA PIC X. 02 BB PIC 9(2) USAGE COMP-X. : PROCEDURE DIVISION. : MOVE 65 TO A. IF AA = 'A' THEN :
9xの入出力状態はシステムによって異なります。このため,比較などに使わない方が移植性が良くなります。
9xを使う必要があるときは,90以上かどうかを問う比較にした方が,移植性が良くなります。
: SELECT A-FILE... FILE STATUS IS RTN. : PROCEDURE DIVISION. : IF RTN = '90'
: SELECT A-FILE... FILE STATUS IS RTN. : PROCEDURE DIVISION. : IF RTN NOT < '90'
システムによっては,シフトコードを指定することで日本語文字を区別しているものがあります。
日本語を含む1行でプログラム原文領域すべてを使った原始プログラムをほかのシステム(例えば,VOS3など)に移植すると,シフトコードを付加してプログラム原文領域をはみ出てしまうおそれがあります。このため,日本語を含む原始プログラムは,シフトコードを意識して1行を終わらせた方が移植性が良くなります。
システムによっては,COPY文のREPLACING指定およびREPLACE文の作用対象に,日本語が指定できないものがあります。このため,COPY文のREPLACING指定およびREPLACE文の作用対象に日本語を使わない方が移植性が良くなります。
C言語のシステム関数※は,#defineによって実際の関数名とは別の関数名で宣言され,マクロ展開後に置き換えられることがあります。COBOLではC言語のマクロは展開しないため,COBOLプログラムからC言語のシステム関数をCALL文で直接呼び出すと,COBOLからマクロ展開前の関数名を呼び出し,予期しない不具合が発生するおそれがあります。
COBOLプログラムからC言語のシステム関数を呼び出す場合は,直接呼び出さないで,システム関数を呼び出すCプログラムを作成し,このCプログラムを呼び出すようにしてください。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.