CANCEL 文

CANCEL 文は、参照先のプログラムを次回に呼び出す際に、初期状態に戻すようにする。

一般形式


CANCEL Statement

指令

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • DYNAM - NODYNAM により、CANCEL 文は無視される。

構文規則

  1. literal-1 は文字定数とする。
  2. literal-1 は英数字データ項目を参照するものとする。

一般規則

  1. literal-1、または identifier-1 が参照するデータ項目の内容は、取り消し対象のプログラムの名前を示す。その名前は、取り消し対象のプログラムのプログラム名段落に含まれるプログラム名とする (「見出し部」の章の「プログラム名段落」セクションの、特に大文字と小文字の区別に関する記述を参照)。あるいは、取り消し対象のプログラム用の実行可能プログラム コードを含むファイルをその名前に指定してもよい。CANCEL 文で同じファイルを示す別の名前を指定した場合にどのような結果になるかは、オペレーティング システムによって異なる。事前に呼び出されたプログラム、プログラム ファイル名、あるいはライブラリ ファイル内のプログラムと指定された名前の照合方法の詳細については、COBOL システムのドキュメントを参照。

    その名前が、ENTRY 文に含まれている項目名を含む場合、結果は不定である。

  2. CANCEL 文が明示的または暗黙的に実行された後、その時点で参照されたプログラムは、CANCEL を使用する実行単位との論理関係を失う。実行単位で明示的または暗黙的に実行が成功した CANCEL 文が参照するプログラムが、続いて同じ実行単位で呼び出される場合、そのプログラムは初期状態に戻る。「言語の基礎」の章の「関数、メソッド、またはプログラムの状態」トピックを参照。
  3. 他のプログラムの CANCEL 文で指定するプログラムは、そのプログラムから呼び出せるものとする。「COBOL 言語の概念」の章の「名前の範囲」トピックおよび「CALL 文」セクションを参照。
  4. ANS85 CANCEL 文が明示的または暗黙的に実行されると、CANCEL 文が参照するプログラムに含まれるプログラムもすべて取り消される。その結果は、取り消されたプログラムに含まれる各プログラムに対して、それらが個別のプログラムとして現れる順番と逆の順番で、有効な CANCEL 文を実行した場合と同じである。
  5. CANCEL 文で指定したプログラムは、呼び出されたが EXIT PROGRAM

    OSVSVSC2MF または GOBACK

    文をまだ実行していないプログラムを直接的または間接的に参照できない。

  6. 取り消されたプログラムとの論理関係が構築されるのは、その後にそのプログラムを対象として CALL 文を実行した場合のみである。
  7. 呼び出される側のプログラムは、次のいずれかの場合に取り消される。1) CANCEL 文の作用対象として参照された場合。2) 対象とするプログラムが属する実行単位が終了した場合。

    ANS85 3) 初期属性を持つ呼び出す側のプログラムで EXIT PROGRAM 文を実行した場合。

  8. 実行単位でまだ呼び出されていないプログラム、呼び出された後に取り消されたプログラム、または COBOL 以外のプログラムを指定して、明示的または暗黙的な CANCEL 文を実行しても、何の処理も行われない。制御は、CANCEL 文の後の、次の実行可能文に移る。
  9. ANS85 プログラムによって記述された外部データ レコードのデータ項目の内容は、そのプログラムが取り消されても変更されない。
  10. ANS85 CANCEL 文の (明示的または暗黙的な) 実行中は、CANCEL 文の対象プログラムの内部ファイル結合子に関連付けられた、開かれている各ファイルに対して、暗黙の CLOSE 文 (オプションの指定なし) が実行される。それらのファイルのいずれかに USE 手続きが関連付けられていても、実行されない。
  11. CANCEL 文は、サブプログラムを初期状態に戻すか、最後に使用した状態を維持するかを決定する。サブプログラムが使用した領域は、必ずしも解放されるとは限らない。ただし、多くのオペレーティング システムでは、サブプログラムが動的にロードされている場合は、サブプログラムが元々使用していたメモリもこの文が解放する。サブプログラムの外部ファイルおよび外部データ領域が、CANCEL 文によって解放されることはない。