呼び出しおよび復帰

プロシージャ ブロック内の文は、プロシージャ ブロックが別のプロシージャ ブロックから呼び出されたときにのみ実行されます。プロシージャの呼び出しは CALL 文で実行できます。次に例を示します。

A: PROCEDURE;
      .
      .
      . 
   CALL B;
      .
      .
      .
B: PROCEDURE;
      .
      .
      . 
   END B;
      .
      .
      .
   END A;

この例では、プロシージャ B は、プロシージャ A から呼び出されたときにのみ実行されます。プロシージャ B が完了すると、その呼び出しに続く文からプロシージャ A の実行が再開されます。

プロシージャは、次の例に示すように、END 文を実行するか RETURN 文を実行することで呼び出し元に戻ります。

A: PROCEDURE;
      .
      .
      .
   IF X<0 THEN RETURN;
      .
      .
      .
   END A;

プロシージャには制御は移りません。つまり、制御がプロシージャ宣言の直前の文に達すると、GOTO などの制御フロー文でない限り、宣言されたプロシージャに続く文に自動的にスキップします。