CALL 文

CALL 文により、制御は、特定のプログラムの実行単位内に転送されます。

ISO2002MF アドレスを指定することによって、プログラムを間接的に呼び出すことができる。データ、データへのポインター、および手続きへのポインターを、パラメーターとして呼び出し先プログラムに渡したり、呼び出し先プログラムから返してもらったりできる。パラメーター受け渡し規則を制御することによって、COBOL 以外の言語で書かれたプログラムを呼び出すことができる。

ISO2002MFOS390 呼び出し先 COBOL プログラムは、再帰的に自分を呼び出すことができる。ただし、この場合は、局所記憶節が存在する必要がある。

一般形式

指令

  1. 予約語リストのフラグ付けおよび修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • ALIGN - 01 レベルまたは 77 レベルのデータ項目を配列するメモリの境界を指定する。
    • CASE - 大文字および小文字を等しく扱うかどうかを決定する。
    • DEFAULTCALLS - デフォルトの呼び出し規則を指定する。
    • FOLD-CALL-NAME - 呼び出し元プログラムと呼び出し先プログラムの間でプログラム名に関して大文字と小文字の使い方が同じでないときに、呼び出し先サブプログラムが見つかるように保証するか否かを指定する。
    • IBMCOMP - 語記憶モードを有効にする。
    • MAPNAME - program-name 内の英字以外の文字の処理に影響を与える。

構文規則

  1. identifier-1 は、英数字

    ISO2002MF または各国文字

    データ項目として定義しなければならない。

  2. * literal-1

    は、表意定数であってはならず、英数字リテラル

    ISO2002MF または各国文字リテラルでなければならない。

  3. MF * literal-3

    VSC2MF literal-4

    VSC2MF および literal-5

    は、表意定数であってはならない。

  4. * identifier-2、identifier-3、identifier-4、および identifier-6 は、ファイル節、作業場所節、

    ISO2002MF 局所記憶節

    または連絡節にデータ項目として定義されていなければならず、レベル 01 またはレベル 77 のデータ項目、

    ANS85 または基本項目

    ISO2002MF または任意の集団項目でなければならない。

    MF identifier-2、identifier-3、identifier-4 は、ファクトリ オブジェクトまたはインスタンス オブジェクトの作業場所節またはファイル節に定義してあってはならない。

  5. MF * identifier-7、identifier-8、identifier-9、identifier-10 はいずれも、関数識別子であってはならない。
  6. MF * GIVING 句および RETURNING 句は、どちらを使用してもよい。
  7. MF identifier-11 は、連絡節中の 01 レベルまたは 77 レベルのデータ項目とする。
  8. MF * ANY LENGTH 句を使用して、identifier-2、identifier-3、identifier-4、identifier-6、identifier-8、および identifier-10 を記述してはならない。
  9. arithmetic-expression-2、literal-5、および identifier-8 は、COMP-1 または COMP-2 の項目として定義したり、これらの項目を含めたりしてはならない。ネイティブ COBOL では、浮動小数点数項目を BY VALUE で渡すことはできない。
  10. MF USING および GIVING/RETURNING は、任意の順序で使用できる。
  11. ネイティブ COBOL では、英数字リテラルおよび各国文字リテラルは、BY VALUE 指定において 8 文字未満でなければならない。数値リテラルは 32 ビットの comp-x 値として渡される。呼び出し先プログラムで符号付きの項目が記述されている場合、符号ビットをそのように解釈できる。それ以外の場合、負のリテラルでは、comp-x 項目で大きな正の値が生成されることになる。comp-x 項目の値が作成されるとき、リテラル内の小数点 (ある場合) は無視される。
  12. MF  呼び名 (mnemonic-name) が必要なのは、呼び出す対象のオブジェクト プログラムで用いられている呼び出し規則と、COBOL システムのデフォルトの呼び出し規則とが異なる場合だけである。通常は、COBOL のデフォルトの呼び出し規則は、COBOL 以外の言語の主要な処理系のランタイム環境で使用されている規則と整合性がある。

    呼び名は特殊名段落中に定義しなければならない。その方法の詳細については、「特殊名段落」を参照。また、ランタイム環境においてサポートされている呼び出し規則の詳細については、インターフェイスに関する COBOL システムのドキュメントを参照。

  13. VSC2MF * identifier-2、identifier-3、identifier-5 は連絡節、

    MF 局所記憶節または作業場所節にデータ項目として定義されていなければならず、

    レベル 01 またはレベル 77 のデータ項目、

    MF あるいはその他のレベルのデータ項目でなければならない。

  14. MF  CALL 文に literal-1 を指定し (ただし、CALL 文に identifier-1 または procedure-pointer-1 を指定した場合を除く)、かつ現在の翻訳単位中に呼び出しプロトタイプ (プログラム名段落中に EXTERNAL 句があるプログラム) が含まれていてその名前が literal-1 に合致する場合、構文チェックの間に下記の項目の妥当性が検査される。
    • 必要なパラメーターの数
    • パラメーターの型
    • 呼び出し規則
  15. ISO2002 * identifier-2、identifier-3、identifier-4 は、字類オブジェクトまたはポインターのデータ項目であってはならない。

一般規則

星印 (*) の付いている構文規則は CALL 文および CHAIN 文に共通である。これらの規則で「CALL 文または CHAIN 文」と指定されていた場合、それらの規則を CALL 文に適用する際には「CALL 文」として、CHAIN 文に適用する際には「CHAIN 文」として読む必要がある。

  1. literal-1、または identifier-1 によって参照されるデータ項目の内容は、呼び出し先プログラム

    MF または呼び出し先手続きの名前である。

    CALL 文を含むプログラムは呼び出し元プログラムである。呼び出し先プログラムが COBOL プログラムである場合、literal-1、または identifier-1 によって参照されるデータ項目の内容はプログラム名であって、呼び出し先プログラムのプログラム名段落に記述されているものでなければならない (「プログラム名段落」を参照、特に大文字と小文字の区別について)。

    MF あるいは、literal-1、または identifier-1 によって参照されるデータ項目の内容はエントリ名であって、呼び出し先プログラムの ENTRY 文中に記述されているものでなければならない。しかも、呼び出し先プログラムはすでに呼び出されており、その後で取り消されていてはならない。別の方法として、呼び出し先プログラムの名前はそのプログラムの実行可能プログラム コードが収められているファイルを指す名前であってもよい。2 つの CALL 文の間でまたは CALL 文と CANCEL 文の間で同じファイルを指す別の名前を指定した場合にどのような結果になるかは、オペレーティング システムによって異なる。事前に呼び出されたプログラム、プログラム ファイル名、あるいはライブラリ ファイル内のプログラムと指定された名前の照合方法の詳細については、COBOL システムのドキュメントを参照。

    MF 呼び出されるプログラムが COBOL プログラムではない場合のプログラム名または手続き名の構成に関する規則が、インターフェイスに関する COBOL システムのドキュメントに記載されている。

  2. MF procedure-pointer-1 によって参照されるデータ項目の内容は呼び出し先プログラムのアドレスであり、そのプログラムはすでにメモリにロードされていなければならない。呼び出されるプログラムが COBOL プログラムである場合は、呼び出し先プログラムのアドレスが当初に ENTRY 指定を伴う SET 文を用いて導出されており、その後でそのプログラムに対して CANCEL 文が実行されていてはならない。呼び出されるプログラムが COBOL プログラムではない場合は、呼び出し先プログラムのアドレスが当初に COBOL 以外のプログラムまたは手続きへの CALL を通じて導出されていなければならない。アドレスが NULL であるプログラムを CALL しようとすると、エラーとなる。
  3. CALL 文が実行されたときに、その対象のプログラムが実行可能な状態になると、そのプログラムに制御が移される。呼び出し先プログラムから制御が戻ると、ON OVERFLOW

    ANS85 または ON EXCEPTION

    指定があっても無視され、制御は CALL 文の末尾に移される。

    ANS85 あるいは、NOT ON EXCEPTION が指定されていると、制御は imperative-statement-2 に移される。制御が imperative-statement-2 に移されると、その imperative-statement-2 の中に指定されている各文に関する規則に従って、プログラムの実行が続けられる。制御の明示移行を引き起こす手続き分岐文または条件文が実行されると、その文に関する規則に従って制御が移される。これ以外の場合は、imperative-statement-2 の実行が終了すると制御は CALL 文の末尾に移される。

  4. CALL 文が実行されたときに、対象のプログラムがすでにメモリにロードされていると、そのプログラムは実行可能な状態にされる。そのプログラムがまだメモリにロードされていないと、そのプログラムを動的にロードする試みがなされる (インターフェイスに関する COBOL システムのドキュメントを参照)。対象のプログラムの所在を動的に把握でき、メモリに連続した十分な空き領域があると、そのプログラムは動的にロードされて実行可能な状態にされる。

    CALL 文に指定されたプログラムがメモリにロードされていないか、動的ロードに利用できないか、あるいは動的なロードに利用できるがメモリに十分な空き領域がない場合には、その時点ではそのプログラムを実行可能にすることはできない。その場合、下記の 2 つのうちのどちらかの措置が取られる。

    1. CALL 文の中に ON OVERFLOW

      ANS85 または ON EXCEPTION

      指定がある場合には、imperative-statement-1 に制御が移される。それから、imperative-statement-1 に指定されている各文の規則に応じて、処理が続行される。制御を明示的に移す手続き分岐文または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合には、imperative-statement-1 の実行が完了すると、CALL 文の最後に制御が移され、

      ANS85 NOT ON EXCEPTION 指定はあっても無視される。

    2. ANS85 ON OVERFLOW 指定または ON EXCEPTION 指定がない場合、NOT ON EXCEPTION 指定はあっても無視される。

      MF 実行単位中の開かれているファイルに関して、暗黙的な CLOSE 文なしにプログラムの実行が停止され、ランタイム エラーが表示される。

  5. ANS85 実行単位内の 2 つ以上のプログラムに、同じプログラム名を持たせることができる。CALL 文でこのようなプログラム名を参照したとき、どちらのプログラムを指すかは、プログラム名の範囲の適用規則に従う。「COBOL 言語の概念」の章の「プログラム名の規則」のトピックを参照。たとえば、CALL 文の中に指定されたプログラム名と同じ名前のプログラムが、実行単位中に 2 つあるとする。
    1. それらの 2 つのプログラムのうちの 1 つは、その CALL 文が含まれる独立のプログラムに直接的または間接的に含まれるか、あるいはその CALL 文が含まれるプログラム自体が、直接的または間接的に含まれる独立のプログラムに直接的または間接的に含まれなければならない。かつ、
    2. もう 1 つのプログラムは、別の独立したプログラムでなければならない。

    この例で、参照するプログラムを見つける仕組みは、下記のとおり。

    1. CALL 文中に指定された名前を持つ 2 つのプログラムの一方が、その CALL 文が含まれるプログラム中に直接的に含まれるならば、そのプログラムが呼び出される。
    2. CALL 文中に指定された名前を持つ 2 つのプログラムの一方が共通属性を持ち、その CALL 文が含まれるプログラムが直接的または間接的に含まれる独立のプログラムに直接的に含まれるならば、その共通プログラムが呼び出される。ただし、呼び出し元プログラムがその共通プログラムに含まれる場合は例外である。
    3. それ以外の場合は、別のプログラムが呼び出される。
  6. 呼び出し先プログラムが COBOL プログラムで、初期属性を持たない場合、そのプログラムおよびその中に直接的または間接的に含まれる各プログラムは、実行単位の中で最初に呼び出されたとき、および呼び出し先プログラムが取り消された後で初めて呼び出されたときに、初期状態に置かれる。

    呼び出し先プログラムが COBOL プログラムでない場合、実行単位の中で最初に呼び出されたときにだけ初期状態に置かれる。このようなプログラムの取り消しは効果がない。

    それ以外の場合に呼び出されたときは、呼び出し先プログラムおよびその中に直接的または間接的に含まれる各プログラムの状態は、前回に呼び出されたときのままである。COBOL 以外の言語の処理系の中には、意味合いが違っているものがある。可能な場合には、インターフェイスに関する COBOL システムのドキュメントに、その詳細が記載されている。

  7. ANS85 呼び出し先プログラムが初期属性を持つ場合、そのプログラムおよびその中に直接的または間接的に含まれる各プログラムは、実行単位の中で呼び出されるたびに初期状態に置かれる。呼び出し先プログラムが初期状態にあるか使用され終わった状態にあるかは、DYNAM コンパイラ指令の設定に左右される。
  8. ANS85 呼び出し先プログラムの内部ファイル結合子に関連するファイルは、プログラムが初期状態にあるときは、まだオープンされていない。前述の「プログラムの初期状態」のトピックを参照。それ以外の場合に呼び出されたときは、それらのすべてのファイルの状態と位置付けは、前回に呼び出されたときのままである。
  9. ANS85 プログラムを呼び出す過程または呼び出し先プログラムから戻る過程で、外部ファイル結合子に関連するファイルの状態と位置付けが変えられることはない。
  10. 呼び出されるプログラムが COBOL プログラムである場合、その手続き部の見出し

    OSVSVSC2MF または ENTRY 文

    の中に USING 指定がある場合にのみ、CALL 文に USING 指定が含められる。その場合、各 USING 指定内の作用対象の数は同じでなければならない。

    MF 作用対象の数が同じである必要はない。

  11. MF 呼び出されるプログラムが COBOL プログラムではない場合、そのプログラムに 1 つ以上のパラメーターが宣言されているときにのみ、CALL 文に USING 指定が含められる。その場合、USING 指定内の作用対象の数は呼び出し先プログラム内のパラメーターの数と同じでなければならない。COBOL 以外の言語の処理系の中には、作用対象の数が同じでなくともよいものがある。COBOL 言語では、データ項目のアドレスの桁寄せに制約はない。他方、COBOL 以外の言語では、通常はアドレスについて前提があり、桁寄せされていないデータ項目が参照されると何らかのエラーを起こす。桁寄せは下記の措置のうちのいくつかを用いて実現される。
    • 集団項目に無名項目を追加する
    • ALIGN コンパイラ指令を使用するとともに、USING 指定中の作用対象を 01 レベルまたは 77 レベルのデータ項目にする
    • SYNCHRONIZED 句と IBMCOMP コンパイラ指令を併用する
  12. * CALL 文

    MF または CHAIN 文

    の USING 指定、および呼び出し先プログラムの手続き部見出しの対応する USNIG 指定で、

    MF あるいは呼び出し先プログラムが COBOL でない場合は ENTRY 文の対応する USNIG 指定またはパラメーター リストで、

    作用対象が配置されている順番によって、呼び出し元プログラムおよび呼び出し先プログラムで使用されているデータ名の対応関係が決まる。この対応は位置によって決まり、名前が等しいことによって決まるのではない。CALL 文

    MF または CHAIN 文

    の USING 指定内の最初の作用対象は、呼び出し先プログラムの USNIG 指定、またはパラメーター リストの最初の作用対象に対応し、2 番目同士も同様に対応する (以降も同様)。

    MF 両方の作用対象の数が異なるために、完全には対応がとれないことがある。その場合、対応する相手がなくて残っている作用対象が CALL 文または CHAIN 文の側にある場合、それらは無視される。残っている作用対象が手続き部の見出しまたは ENTRY 文またはパラメーター リストの側にある場合、それらは呼び出し先プログラムの中で参照されてはならない。位置による対応は、呼び名によって暗黙的に示される呼び出し規則によって変わることがある。

    指標名の場合は、そのような対応関係は確立されない。呼び出し先プログラムと呼び出し元プログラムの指標名は常に別々の指標を参照する。

  13. ANS85 * CALL 文の USING 指定の中で参照されるパラメーターの値は、その CALL 文が実行された時点で、呼び出し先プログラムにとって利用可能になる。
  14. パラメーターに BY REFERENCE identifier-4 指定を

    ANS85 明示的または

    暗黙的に指定すると、プログラムは、呼び出し先プログラム中の対応するデータ項目が、呼び出し元プログラム中のデータ項目と同じ記憶領域を占めるかのように動作する。呼び出し先プログラム中のデータ項目のデータ記述には、呼び出し元プログラム中の対応するデータ項目と同じ文字数を指定する。

    VSC2MF BY REFERENCE ADDRESS OF 指定を明示的または暗黙的に指定すると、プログラムの動作は次のようになる。具体的には、USAGE POINTER を用いて追加のデータ項目が指定され、「SET データ項目 TO ADDRESS OF identifier-3 および identifier-5」文によって取得された値が BY REFERENCE によってそのデータ項目に渡されたかのように動作する。

    VSC2MF identifier-3 および identifier-5 が連絡節にあってそのレベル番号が 01 または 77 以外であるか、または作業場所節にある場合、BY CONTENT によってそのデータ項目を渡すことに等しく、identifier-3 または identifier-5 のアドレスは、呼び出し先サブプログラムで変更できない。

    MF 「BY REFERENCE literal-3」指定を明示的または暗黙的に指定すると、オブジェクト プログラムによる literal-3 の処理は、literal-4 を記述した場合と同様になる。

  15. MFXOPEN * BY CONTENT 指定を明示的または暗黙的に指定すると、CALL 文中の USING 指定内で参照されたパラメーターの値は、呼び出し先プログラム側では変更できない。しかし、呼び出し先プログラムは、その手続き部の見出しの中で、対応するデータ名によって参照しているデータ項目の値を変更できる。CALL 文の BY CONTENT 指定中の各パラメーターに関するデータ記述は、手続き部の見出しの中の USING 指定の中の対応するパラメーターに関するデータ記述と同じにする。つまり、変換も拡張も切り捨てもあってはならない。

    MF パラメーターに関して BY CONTENT 指定を明示的または暗黙的に指定すると、オブジェクト プログラムの動作は次のようになる。具体的には、追加のデータ項目が宣言され、そのデータ項目が BY REFERENCE 指定の中でパラメーターとして使用されるかのように動作する。identifier-6 を指定すると、追加データ項目の暗黙的なデータ記述とその内容の両方が、identifier-6 のものと同じとなる。literal-4 を指定すると、追加データ項目の暗黙的なデータ記述は、サイズと内容が literal-4 と同じ英数字データ項目に等しくなる。「LENGTH OF identifier-7」を指定すると、追加データ項目のデータ記述は、PIC S9(n) USAGE BINARY に等しい。ここで、n の値は 9 以上であり、COBOL システムのデータ項目の最大長を保持できるサイズのデータ項目を定義する。内容が identifier-7 に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  16. MFCOB370 * BY VALUE 指定を明示的または暗黙的に指定すると、CALL 文の USING 指定の中で参照されているこのパラメーターの値を、呼び出し先プログラムは変更できない。それにもかかわらず、呼び出し先プログラムはその手続き部の見出しの中の対応するデータ名によって参照されるデータ項目の値を変更することはできる。概念的には、システム領域 (通常は「スタック」) に追加のデータ項目が宣言され、それがパラメーターを渡すために COBOL 以外の言語に利用可能であり、その記憶領域が呼び出し先プログラム中のデータ項目と同じであるかのように、オブジェクト プログラムは動作する。

    identifier-8 が指定されており、BINARY、COMP-4、COMP-5、COMP-X のいずれかである場合、追加データ項目のデータ記述は、使用法が COMP-5 となる以外は identifier-8 の記述と等しくなる。追加データ項目の内容は、identifier-8 の内容の COMP-5 表現と等しくなる。この変換および表現により、COBOL 以外のプログラムの呼び出しが容易になる。

    それ以外の場合は、identifier-8 を指定すると、追加データ項目の暗黙的なデータ記述とその内容は、identifier-8 のものと等しくなる。

    literal-5 を指定すると、追加データ項目の暗黙的なデータ記述は、符合付き数値項目 USAGE BINARY に等しくなる。その記憶領域内でのバイト数は、integer-1 の指定があればその値によって示され、指定がなければ 4 バイトとなる。

    「LENGTH OF identifier-9」を指定すると、追加データ項目のデータ記述は、形式が PIC S9(n) USAGE COMP-5 で内容が identifier-9 に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

    呼び出されるプログラムが COBOL プログラムである場合、CALL 文の BY VALUE 指定中の各パラメーターに対応するパラメーターが手続き部の見出しの USING 指定中に存在し、それに BY VALUE 指定が明示的または暗黙的に指定されていなければならない。

    上記の CALL 文の結果として生成された追加データ項目は、呼び出し先プログラム中のこの対応するパラメーターと以下のような関係を持つ。

    追加データ項目が、BINARY、COMP-4、COMP-5、または COMP-X から COMP-5 への変換の対象であった場合、呼び出し先プログラム中の対応するパラメーターのデータ記述は、追加データ項目のデータ記述と同じでなければならない。ただし、対応するパラメーターの USAGE は、BINARY、COMP-4、COMP-5、COMP-X のいずれでもよい。呼び出し先 COBOL プログラムの開始時に、追加データ項目の USAGE COMP-5 から、呼び出し先プログラム中の対応するパラメーターの USAGE への変換が実行される。

    追加データ項目が COMP-5 への変換の対象でなかった場合、呼び出し先プログラム中の各パラメーターのデータ記述は、対応する追加データ項目のデータ記述と同じでなければならない。これは、追加データ項目に対し、呼び出し先プログラム中の対応するパラメーターと一致させるための変換、拡張、および切り捨てのいずれも行われないことを意味する。

    呼び出されるプログラムが COBOL プログラムでない場合、追加データ項目のサイズはシステム領域の最大サイズ (通常はシステム上の POINTER のサイズ) を超えないものとする。それ以外の場合は、システムで深刻な障害が発生する可能性がある。

  17. MF 呼び出し先プログラムから呼び出し元プログラムにデータを渡す手段には、呼び出し元プログラムの USING 指定中に宣言されているパラメーターを使用する方法と、戻り値を使用する方法とがある。呼び出し先プログラムは EXIT GIVING 文または GOBACK GIVING 文によって値を戻す。呼び出し先プログラムから呼び出し元プログラムに制御が戻されると、戻り値がシステム領域に収められる。その領域は一般に、値を戻すために、COBOL 以外のプログラムによって利用可能である。

    システム領域のサイズ (通常はシステム上の POINTER のサイズ) は COBOL システムの外で決定され、戻り値が取りうる最大値の制約要因となる。ただし、戻り値がシステム領域の最大サイズに満たないことがある。制御が戻された後で、呼び出し元プログラムで戻り値を利用できるようになる。それは、暗黙的に特殊なレジスタである RETURN-CODE に収められていることもあれば、GIVING 指定に指定したデータ項目に明示的に収められていることもある。

  18. MF GIVING 指定を書かず、呼び出し規則に特殊レジスタの RETURN-CODE (「特殊名段落」を参照) を更新するように指定されている場合、オブジェクト プログラムの動作は次のようになる。具体的には、システム領域がそのサイズのまま COBOL の数値データ項目で USAGE COPM-5 が指定されているものとして定義され、そのシステム領域を送り出し側とし特殊レジスタの RETURN-CODE を受け取り側として、MOVE 文を実行したかのように動作する。
  19. MF 呼び出し元プログラム中に GIVING INTO 指定を書いた場合には、戻り値をシステム領域に収めるのに必要なのと同じ長さを identifier-10 に指定しなければならない。また、identifier-10 の型と使用法は、呼び出し先プログラムからの値の返され方によって暗黙的に示される型と使用法に等しくなければならない。呼び出し元プログラムに制御が戻されると、戻り値が identifier-10 に収められている。
  20. MF 呼び出し元プログラムに GIVING ADDRESS OF 指定を書いた場合、呼び出し先プログラムが返す値は明示的または暗黙的に USAGE POINTER と指定されたものでなければならない。オブジェクト プログラム動作は次のようになる。具体的には、システム領域が USAGE POINTER と指定された COBOL のデータ項目として宣言され、そのシステム領域を最初の作用対象とし「ADDRESS OF identifier-11」を 2 番目の作用対象として、SET 文を実行したかのように動作する。
  21. MF 呼び出し先プログラムが値を返さない場合に GIVING 指定を書くと、エラーとなる。
  22. 呼び出し先プログラムの中に、CALL 文が含まれていてもよい。しかし、局所記憶節が宣言されていない場合、

    ISO2002MFOS390 呼び出し先プログラムは、呼び出し元プログラムを直接的または間接的に呼び出す CALL 文を実行しない。

  23. 宣言部分の範囲内で CALL 文が実行されるとき、その CALL 文は、制御が移されたがまだ実行を終了していない呼び出し先プログラムを直接的にも間接的にも参照できない。
  24. ANS85 END-CALL 指定は、CALL 文の範囲を区切る。
  25. VSC2MF USAGE POINTER

    MF または USAGE PROCEDURE-POINTER

    が明示的または暗黙的に指定されており、呼び出し先プログラム中のデータ項目

    MF または手続き

    のアドレスから当初に導出された値は、その呼び出し先プログラムに対して CANCEL 文が実行された後では無効になるので、使用してはならない。

  26. MF 使用されないパラメーターをサブプログラムに渡すために、OMITTED 指定を使用することができる。その場合、ダミーのデータ項目を宣言する必要はない。
  27. MF OMITTED パラメーターは BY REFERENCE パラメーターであり、呼び出し元サブプログラムに null アドレスを渡すことに相当する。それは BY VALUE 0 と指定するのと同じであるが、BY REFERENCE パラメーターとして呼び出しプロトタイプの型チェックを受ける。
  28. MF OMITTED の直前に BY REFERENCE を指定しないと、以降のパラメーターはその前に有効であった呼び出し規則に従って渡される。省いたパラメーターは BY VALUE 0 と指定したかのように扱われる。
  29. 数値 literal-3 または literal- は、そのリテラルが整数であるかどうかにかかわらず、負でない場合には整数 32 ビット comp-x 項目として、負の場合には整数 32 ビット comp (バイナリ) 項目として渡される。数値リテラル内の小数点は無視される。
  30. MF  呼び名は、呼び出し先プログラムを呼び出すときにこのプログラムで使用する呼び出し規則を識別する。呼び出し先プログラムで想定されている呼び出し規則が呼び名で示されるものと異なると、COBOL システムは障害を起こす可能性がある。
  31. MF 呼び出し先のプログラムを実行できるようにする際に、その所在が把握されるまで、呼び出し先プログラムが COBOL プログラムであるのかないのか、または手続きであるのかは、実行単位にはわからない。一般には、プログラム名の形式から、COBOL プログラムであるか否かを判定することはできない。COBOL プログラムと COBOL でないプログラムの間、または COBOL でない 2 つのプログラムの間で、プログラム名が同じであるとエラーとなる。
  32. ANS85 * BY CONTENT、BY REFERENCE、

    MFCOB370 BY VALUE

    の各指定はその後ろに続くパラメーターに効力を及ぼすが、別の BY CONTENT、BY REFERENCE、

    MFCOB370 または BY VALUE

    の指定が出てきたところでその効力は停止する。

    最初のパラメーターの前に BY CONTENT、BY REFERENCE、

    MFCOB370 または BY VALUE

    のどの指定もないと、BY REFERENCE 指定があるものと想定される。

  1. CALL 文の手続きポインターの使用例については、「手続きポインターの呼び出しと設定」を参照。