プログラム間のデータの受け渡し方法には 3 つあり、それらから選択できます。BY REFERENCE、 BY CONTENT、または BY VALUE。
次の図に、BY REFERENCE、BY CONTENT、および BY VALUE によって渡される値の違いを示します。
プログラムでどのようにデータを処理したいかに基づいて、上記のデータ受け渡し方法のどれを使用するかを決定してください。
| コード | 目的 | コメント |
|---|---|---|
| CALL . . . BY REFERENCE identifier | 呼び出し側プログラムの CALL ステートメントの 引数の定義と呼び出されるプログラムのパラメーターの定義に、同じメモリーを共用させる。 | サブプログラムがパラメーターに対して行う変更は、呼び出し側プログラムの引数に影響を与えます。 |
| CALL . . . BY REFERENCE ADDRESS OF identifier | identifier のアドレスを呼び出し先プログラムに渡します。ここで、identifier は LINKAGE SECTION 内の項目です。 | サブプログラムがアドレスに対して行う変更は、呼び出し側プログラム内のアドレスに影響を与えます。 |
| CALL . . . BY REFERENCE file-name | データ制御ブロック (DCB) をアセンブラー・プログラムに渡す。 | ファイル名は QSAM 順次ファイルを参照しなければなりません。1 |
| CALL . . . BY CONTENT ADDRESS OF identifier | identifier のアドレスのコピーを、呼び出し先プログラムに渡します。 | アドレスのコピーに任意の変更を加えても identifier のアドレスには影響しませんが、アドレスのコピーを使用する identifier を変更すると identifier が変更されます。 |
| CALL . . . BY CONTENT identifier | ID のコピーをサブプログラムに渡す。 | サブプログラムによってパラメーターを変更しても、呼び出し側の ID には影響しません。 |
| CALL . . . BY CONTENT literal | 呼び出し先プログラムにリテラル値のコピーを渡す。 | |
| CALL . . . BY CONTENT LENGTH OF identifier | データ項目の長さのコピーを渡す。 | 呼び出し側プログラムは、その LENGTH 特殊レジスターから identifier の長さを渡します。 |
次のような BY REFERENCE と BY CONTENT の組み合わせ:
CALL 'ERRPROC' USING BY REFERENCE A BY CONTENT LENGTH OF A. |
データ項目とその長さのコピーの両方をサブプログラムに渡す。 | |
| CALL . . . BY VALUE identifier | C/C++ プログラムなど、BY VALUE パラメーター・リンケージ規約を使用する プログラムにデータを渡す。 | ID のコピーがパラメーター・リストとして直接渡されます。 |
| CALL . . . BY VALUE literal | C/C++ プログラムなど、BY VALUE パラメーター・リンケージ規約を使用する プログラムにデータを渡す。 | リテラルのコピーがパラメーター・リストとして直接渡されます。 |
| CALL . . . BY VALUE ADDRESS OF identifier | 呼び出し先プログラムに identifier のアドレスを渡す。データに対するポインターを必要とする C/C++ プログラムにデータを渡すのに推奨される方法。 | アドレスのコピーに任意の変更を加えても identifier のアドレスには影響しませんが、アドレスのコピーを使用する identifier を変更すると identifier が変更されます。 |
| CALL . . . RETURNING | 関数戻り値を使用して C/C++ 関数を呼び出す。 | |
|
||
関連概念
ストレージとそのアドレス可能度
関連タスク
呼び出し側プログラムの中での引数の記述
呼び出し先プログラムの中でのパラメーターの記述
OMITTED 引数に関するテスト
CALL . . . RETURNING の指定
EXTERNAL 節によるデータの共用
プログラム間でのファイルの共用 (外部ファイル)
Java とのデータ共用
関連参照
CALL ステートメント (Enterprise COBOL 言語解説書)
USING 句 (Enterprise COBOL 言語解説書)
INVOKE ステートメント (Enterprise COBOL 言語解説書)