18.4.1 プログラム属性

COBOLプログラムでは,プログラムの使用形態に応じて次の属性を指定できます。

<この項の構成>
(1) 通常属性プログラム
(2) 初期化属性プログラム
(3) 再帰属性プログラム
(4) 共通属性プログラム

(1) 通常属性プログラム

プログラムの見出し部に特に何も指定しない場合,通常属性プログラムとなります。

通常属性プログラムは,ほかのプログラムから2回以上呼び出された場合,前回呼ばれたときの,次の状態を保持しています。

注※1
HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Solaris(SPARC)で有効です。
注※2
HP-UX(IPF),AIX(32),Solaris(SPARC)で有効です。
注※3
UNIX32,AIX(64),Linux(x64),Linux(IPF64)で有効です。

ただし,プログラム中に含まれるすべてのPERFORM文に対する制御機構は,プログラムが呼び出されるたびに,初期状態に設定されます。

保持している状態を取り消すには,CANCEL文を実行します。詳細は,「18.2 プログラムの取り消し」を参照してください。

また,通常属性プログラムは,自分自身を再帰的に呼ぶことはできません。

(2) 初期化属性プログラム

プログラムの見出し部にINITIAL句を指定した場合,初期化属性プログラムとなります。

初期化属性プログラムは,ほかのプログラムから呼ばれたときに,毎回プログラムの状態が初期化されます。そのため,プログラムの状態は,実行単位でそのプログラムが最初に呼ばれたときと同じになります。

(a) 初期化プログラムが呼ばれたときの初期化の内容

初期化プログラムが呼ばれたときのプログラムの状態を次の表に示します。

AIX(32),AIX(64),Linux(x86),Linux(x64)の場合,初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の初期値については,「(b) 初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の状態(AIX(32),AIX(64),Linux(x86),Linux(x64)で有効)」を参照してください。

表18-2 初期化プログラムが呼ばれたときのプログラムの状態

データ領域の種別VALUE句の指定ありVALUE句の指定なし
CBLVALUEの指定ありCBLVALUEの指定なし
連絡節
作業場所節(1)(2)不定
局所場所節(1)不定不定
ファイル節(2)不定
報告書節(1)(2)不定
画面節(SCREEN SECTION)※1(1)不定不定
画面節(WINDOW SECTION)※1(1)(2)不定
通信節(画面機能)※2不定不定
通信節(データコミュニケーション機能)※3不定不定
サブスキーマ節(2)不定
(凡例)
-:該当しない
(1):VALUE句に指定した値で初期化される
(2):最初に呼ばれたときだけ,コンパイラ環境変数CBLVALUEに指定した値での初期化は保証されるが,2回目以降に呼ばれたときは不定となる
注※1
HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Solaris(SPARC)で有効です。
注※2
HP-UX(IPF),AIX(32),Solaris(SPARC)で有効です。
注※3
UNIX32,AIX(64),Linux(x64),Linux(IPF64)で有効です。

(説明)
  • 作業場所節,報告書節,画面節(SCREEN SECTION)※1,画面節(WINDOW SECTION)※1に含まれていて,VALUE句が書かれているデータ項目の場合,VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合,初期値は規定されません。
  • 局所場所節に含まれていて,VALUE句が書かれているデータ項目の場合,VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合,初期値は常に規定されません。
  • プログラムに関連する内部ファイル結合子を持つファイルや報告書は,開かれた状態ではありません。
  • 通信節による画面機能の送信先画面やプリンタは,開かれた状態ではありません。※2
  • プログラム中に含まれるすべてのPERFORM文に対する制御機構は,その初期状態に設定されます。
  • 同じプログラム中に含まれるALTER文によって参照されるGO TO文は,その初期状態に設定されます。
注※1
HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Solaris(SPARC)で有効です。
注※2
HP-UX(IPF),AIX(32),Solaris(SPARC)で有効です。
(b) 初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の状態(AIX(32),AIX(64),Linux(x86),Linux(x64)で有効)

コンパイル時にコンパイラ環境変数CBLINITVALUEがあるかどうかで,初期化プログラムの作業場所節のVALUE句の指定がないデータ項目の状態が異なります。初期化プログラムが呼ばれたときの,作業場所節のVALUE句の指定がないデータ項目の状態を次の表に示します。

表18-3 初期化プログラムが呼ばれたときの,作業場所節のVALUE句の指定がないデータ項目の状態

VALUE句の指定なし
CBLINITVALUEの指定ありCBLINITVALUEの指定なし
CBLVALUEの指定ありCBLVALUEの指定なしCBLVALUEの指定ありCBLVALUEの指定なし
(1)(2)不定
(凡例)
(1):呼ばれるたびに,作業場所節のデータ項目がNULL(X'00')で初期化される
(2):最初に呼ばれたときだけ,コンパイラ環境変数CBLVALUEに指定した値での初期化が保証されるが,2回目以降に呼ばれたときは不定となる

(3) 再帰属性プログラム

プログラムの見出し部にRECURSIVE句を指定した場合,再帰属性プログラムとなります。

再帰属性プログラムは,自分自身を直接的,または間接的に再帰呼び出しできます。

再帰属性プログラムが呼ばれたときのプログラムの状態を次の表に示します。

表18-4 再帰属性プログラムが呼ばれたときのプログラムの状態

データ領域の種別VALUE句の指定ありVALUE句の指定なし
CBLVALUEの指定ありCBLVALUEの指定なし
連絡節
作業場所節(1)(3)(4)
局所場所節(2)不定不定
ファイル節(3)(4)
報告書節(1)(3)(4)
画面節(SCREEN SECTION)※1(1)(4)(4)
画面節(WINDOW SECTION)※1(1)(3)(4)
通信節(画面機能)※2(4)(4)
通信節(データコミュニケーション機能)※3(4)(4)
サブスキーマ節(3)(4)
(凡例)
-:該当しない
(1):最初に呼び出された場合だけ,VALUE句に指定した値で初期化される
(2):呼び出されるたびに初期化される
(3):最初に呼び出された場合だけ,コンパイラ環境変数CBLVALUEに指定した値で初期化される。再帰呼び出しされた場合は,直前に呼び出された状態を保持している
(4):最初に呼び出された場合は,不定となる。再帰呼び出しされた場合は,直前に呼び出された状態を保持している
注※1
HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Solaris(SPARC)で有効です。
注※2
HP-UX(IPF),AIX(32),Solaris(SPARC)で有効です。
注※3
UNIX32,AIX(64),Linux(x64),Linux(IPF64),で有効です。

(説明)
次の個所は,プログラムが呼び出されるたびに初期化されます。
  • 局所場所節に含まれていて,VALUE句が書かれているデータ項目の場合,VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合,初期値は常に規定されません。
  • プログラム中に含まれるすべてのPERFORM文に対する制御機構は,その初期状態に設定されます。
  • 同じプログラム中に含まれるALTER文によって参照されるGO TO文は,その初期状態に設定されます。
次の個所は,プログラムが再帰呼び出しされた場合,前回呼ばれた状態を保持しています。
  • 作業場所節,報告書節,画面節(SCREEN SECTION)※1,画面節(WINDOW SECTION)※1に含まれていて,VALUE句が書かれているデータ項目の場合,最初に呼び出されたときは,VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合,最初に呼び出されたときは,初期値は規定されません。
  • 作業場所節,ファイル節,報告書節,画面節(SCREEN SECTION)※1,画面節(WINDOW SECTION)※1,通信節(画面機能)※2,通信節(データコミュニケーション機能)※3,サブスキーマ節に含まれているデータ項目で,再帰呼び出しされたときは,直前の状態を保持しています。
  • 局所場所節に含まれていて,VALUE句が書かれているデータ項目の場合,定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合,初期値は常に規定されません。
  • プログラムに関連する内部ファイル結合子を持つファイルや報告書は,開かれた状態で再帰呼び出しをすると,開かれた状態で引き継がれます。
  • 画面節(SCREEN SECTION)※1,画面節(WINDOW SECTION)※1,通信節(画面機能)※2,通信節(データコミュニケーション機能)※3,サブスキーマ節で使用された資源の状態は,そのままの状態で引き継がれます。
注※1
HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Solaris(SPARC)で有効です。
注※2
HP-UX(IPF),AIX(32),Solaris(SPARC)で有効です。
注※3
UNIX32,AIX(64),Linux(x64),Linux(IPF64)で有効です。
(a) RECURSIVE句の効果

RECURSIVE句を指定した場合の効果は,次のとおりです。

(b) 再帰呼び出しの例
COBOL副プログラムの再帰呼び出し
(最外側のプログラムの再帰呼び出し)
[図データ]
(内側のプログラムの再帰呼び出し)
[図データ]
COBOL主プログラムの再帰呼び出し
Cプログラムなどを介して,制御プログラムから間接的に呼ばれるCOBOL主プログラムについても,再帰呼び出しができます。
[図データ]

(4) 共通属性プログラム

プログラムの見出し部にCOMMON句を指定した場合,共通属性プログラムとなります。

共通属性プログラムは,その共通属性プログラムを直接含まない,内側のプログラムから呼び出せます。