【COBOL学習|初心者向け】COBOLのデータ定義の要!「USAGE IS COMP-5」を使いこなそう

導入: なぜCOMP-5が重要なのか

COBOLで数値データを扱う際、何気なく「PIC 9(4)」とだけ書いていることはありませんか?実は、それだけではメモリ上でデータがどのように格納されているか曖昧なままです。特に、現代のシステム開発では、C言語で書かれたライブラリやOSのAPIと連携することが多くあります。そんな時、データの持ち方を「ネイティブバイナリ形式」に固定できるCOMP-5は、システム間の互換性を守り、パフォーマンスを最適化するために非常に重要な技術です。

基礎知識: COMP-5って何?

COBOLには数値を保存するための「USAGE」指定がいくつかありますが、COMP-5は「そのコンピュータ(CPU)が最も扱いやすい形式で数値を保存する」という指定です。

一般的な「COMP(計算形式)」は、コンパイラや機種によって内部的な持ち方が異なる場合がありますが、COMP-5は「PICTURE句で指定した桁数に関わらず、メモリ上では2バイト、4バイト、あるいは8バイトといった、CPUが直接処理できるバイナリサイズ」として確保されます。これにより、外部プログラムとの連携時や、高速な計算が求められる場面で真価を発揮します。

実装/解決策: 正しい指定のルール

COMP-5を使う際は、以下のサイズ割り当てを覚えておくと便利です。
・PIC S9(1) ~ S9(4) : 2バイト(ハーフワード)
・PIC S9(5) ~ S9(9) : 4バイト(フルワード)
・PIC S9(10) ~ S9(18) : 8バイト(ダブルワード)

このように、定義した桁数に対して物理サイズが自動的に決まるため、プログラムの省メモリ化にも貢献します。

サンプルプログラム

以下のコードをコピーして、コンパイル・実行してみてください。C言語などとの連携を想定した定義方法の例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. COMP5-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • 2バイトのネイティブバイナリ(-32768~32767)

05 WS-SHORT-VAL PIC S9(4) COMP-5 VALUE 100.

  • 4バイトのネイティブバイナリ(約±21億まで)

05 WS-LONG-VAL PIC S9(9) COMP-5 VALUE 12345678.

PROCEDURE DIVISION.
DISPLAY “— COMP-5のテスト —”
DISPLAY “ショート値: ” WS-SHORT-VAL
DISPLAY “ロング値 : ” WS-LONG-VAL

  • 値の演算

ADD 1 TO WS-SHORT-VAL.
DISPLAY “加算後の値: ” WS-SHORT-VAL

GOBACK.

応用・注意点: 現場での落とし穴

最後に、現場の技術者として注意点を一つ。COMP-5は非常に便利ですが、PICTURE句で定義した桁数以上の値を入れてしまうと、上位桁が切り捨てられたり、予期せぬ数値になったりすることがあります。

例えば「PIC S9(4) COMP-5」と定義した場合、内部的には2バイトの領域が確保されます。もしここに「40000」といった値を代入しようとすると、2バイトの範囲(最大32767)を超えてしまい、データのオーバーフローが発生します。「定義した桁数は、その変数が取りうる最大値に合わせる」という基本を忘れずに設計してください。これさえ守れば、高速かつ安全なプログラムが書けるはずです。

コメント

タイトルとURLをコピーしました