Rational Developer for System z
COBOL for Windows バージョン 7.5 プログラミング・ガイド


データの受け渡し

プログラム間のデータの受け渡し方法には BY REFERENCEBY CONTENTBY VALUE の 3 つがあり、これらから選択できます。

BY REFERENCE
サブプログラムは、データのコピーを処理するのではなく、呼び出し側プログラムのストレージ内のデータ項目を参照して処理します。 BY REFERENCE は、パラメーターに関して 3 つの方法のどれも指定されておらず、暗黙指定されてもいない 場合の、パラメーターの想定引き渡しメカニズムです。
BY CONTENT
呼び出し側プログラムは、literal または identifier の内容だけを渡します。呼び出し先プログラムは、呼び出し側プログラム内の literal または identifier の値を変更できません。たとえ、 literal または identifier を受け取ったデータ項目を変更する場合でも変更できません。
BY VALUE
呼び出し側プログラムまたはメソッドは、送り出しデータ項目を参照せず、literal または identifier の値を渡します。呼び出されるプログラムまたはメソッドは、その中のパラメーターを変更できます。しかし、サブプログラムまたはメソッドは送り出しデータ項目の一時コピーへのアクセス権しか持っていないので、どの変更も呼び出し側プログラムの引数には影響を与えません。

プログラムでどのようにデータを処理したいかに基づいて、上記のデータ受け渡し方法のどれを使用するかを決定してください。

表 71. CALL ステートメントでデータを渡す方法
コード 目的 コメント
CALL . . . BY REFERENCE identifier 呼び出し側プログラムの CALL ステートメントの引数の定義と呼び出されるプログラムのパラメーターの定義に、同じメモリーを共用させる。 サブプログラムがパラメーターに対して行う変更は、呼び出し側プログラムの引数に影響を与えます。
CALL . . . BY REFERENCE ADDRESS OF identifier identifier のアドレスを呼び出し先プログラムに渡します。ここで、identifierLINKAGE SECTION 内の項目です。 サブプログラムがアドレスに対して行う変更は、呼び出し側プログラム内のアドレスに影響を与えます。
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 REFERENCEBY 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 ステートメント (「COBOL for Windows 言語解説書」)
The USING 句 (「COBOL for Windows 言語解説書」)
INVOKE ステートメント (「COBOL for Windows 言語解説書」)


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)