1. 導入:なぜLINKAGE SECTIONの配置が重要なのか
COBOL開発において、プログラム同士の連携は避けて通れない道です。呼び出し側(CALL元)からデータを受け取るために欠かせないのが「LINKAGE SECTION」ですが、この定義場所を間違えるとコンパイルエラーになったり、意図しない挙動を引き起こしたりします。今回は、初心者の方が必ず押さえておくべき「静的構造のルール」と「正しい配置方法」について解説します。
2. 基礎知識:DATA DIVISIONの中の「住所」
COBOLのプログラムには「DATA DIVISION(データ部)」があり、その中にはいくつかのセクションが存在します。
FILE SECTION:外部ファイル(データベースなど)とやり取りするための場所
WORKING-STORAGE SECTION:プログラム内で一時的に使う変数(作業用領域)を置く場所
LINKAGE SECTION:他のプログラムから受け取ったデータ(引数)を定義する場所
COBOLの規格では、これらを記述する順番が厳格に決まっています。特にLINKAGE SECTIONは、DATA DIVISIONの最後に配置しなければなりません。これは、プログラムがメモリを確保する際、「自分のプログラムで使う変数」を先に確定させ、その後に「外部から渡される領域」を関連付けるという仕組みになっているからです。
3. 実装・解決策:配置のルールを守る
プログラムを作成する際は、必ず以下の順序でセクションを記述するようにしてください。
1. FILE SECTION(あれば)
2. WORKING-STORAGE SECTION
3. LINKAGE SECTION
この順番を一つでも間違えると、コンパイラが「どこにデータを配置すればいいかわからない」と判断し、エラーを吐き出します。また、LINKAGE SECTIONで定義した変数は、実体(メモリ領域)を呼び出し側のプログラムが持っているため、このプログラム単体で値を保持し続けることはできません。あくまで「窓口」であることを意識しましょう。
4. サンプルプログラム:引数を受け取る基本形
呼び出し側から数値を受け取って処理する、標準的な構成例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE01.
DATA DIVISION.
- 作業用変数はここに記述
WORKING-STORAGE SECTION.
01 WS-WORK-AREA PIC 9(05) VALUE 0.
- 引数定義は必ず最後に記述
LINKAGE SECTION.
01 LK-INPUT-VALUE PIC 9(05).
PROCEDURE DIVISION USING LK-INPUT-VALUE.
- 受け取った値を作業用変数にコピーする(安全のため)
MOVE LK-INPUT-VALUE TO WS-WORK-AREA.
- ここに何らかの計算処理などを記述
DISPLAY “受け取った値は: ” WS-WORK-AREA.
GOBACK.
5. 応用・注意点:現場で陥りやすい罠
最後に、現場でよくある失敗を2点お伝えします。
・変数の長さの不一致
呼び出し側で定義したデータの長さ(PIC句)と、LINKAGE SECTIONで定義した長さが異なると、メモリの境界を越えてデータを読み書きしてしまい、システムダウンの原因になります。必ず呼び出し側の定義と一致させましょう。
・初期化の勘違い
LINKAGE SECTIONの変数は、プログラムを呼び出すたびに「呼び出し側の値」で上書きされます。そのため、前回の呼び出し時の値が残っていると期待してはいけません。状態を保持したい場合は、必ずWORKING-STORAGE SECTIONへMOVEして管理する癖をつけましょう。
これらのルールを守るだけで、プログラム間のデータ受け渡しは非常に安定します。基本を大切に、堅牢なシステム作りを目指しましょう!

コメント