ラベル プレフィックス

ラベル プレフィックスは、名前をプロシージャ名、形式名、または文ラベルとして宣言します。これらのうちのどの名前になるかは、プレフィックスを付ける文によって決まります。

PROCEDURE 文のラベル プレフィックスは、名前をプロシージャ名として宣言します。その PROCEDURE 文を含むブロックで名前が宣言されて、そのブロック、およびそのプロシージャに含まれるすべてのブロックが有効範囲になります。宣言には、その PROCEDURE 文によって参照される各パラメーター、およびその PROCEDURE 文の RETURNS オプションによって指定されるデータ型を含めます。次に例を示します。

E: PROCEDURE(A,B) RETURNS(POINTER); 
   DECLARE A FIXED BINARY;
   DECLARE B FLOAT DECIMAL;

この例では、E が、この PROCEDURE 文を含むブロックでプロシージャ名として宣言されています。その宣言の属性は、RETURNS(pointer) および ENTRY(fixed binary, float decimal) です。

FORMAT 文のラベル プレフィックスは、名前を形式名として宣言します。その FORMAT 文を含むブロック、およびその FORMAT 文に含まれるすべてのブロックで名前が宣言されます。形式名は文ラベルではないため、GOTO 文では使用できません。FORMAT 文でのみ使用できます。

PROCEDURE 文および FORMAT 文のラベル プレフィックスに添え字を付けることはできません。

PROCEDURE 文および FORMAT 文以外の文に付けられたラベル プレフィックスは、名前を文ラベルとして宣言します。その宣言は、プレフィックスを付けた文を含むブロックで有効となります。たとえば、BEGIN 文に付けたラベル プレフィックスは、その BEGIN 文を含むブロックで宣言され、その有効範囲は、そのブロック、およびその BEGIN 文に含まれるすべてのブロックになります。

PROCEDURE 文および FORMAT 文のラベル プレフィックスに添え字を付けることはできませんが、PROCEDURE 文および FORMAT 文以外の文のラベル プレフィックスには、オプションで符号付きとなる単一の整数定数で添え字を付けることができます。添え字を付ける場合は、その有効範囲内でその名前が出現するすべての箇所で添え字を付ける必要があります。それらのすべてのプレフィックスにより、その名前が文ラベルの配列として宣言されます。次に例を示します。

   GOTO CASE(K); 
CASE(1):
   .
   .
   .
CASE(2):
   .
   .
   .
CASE(3):
   .
   .
   .
CASE(6):
   .
   .
   .

この例では、CASE が文ラベルの配列として宣言されています。この配列の範囲は (1:6) で、4 番目および 5 番目の要素は定義されていません。定義されていない要素を含む配列を定義することは推奨されません。定義されていない要素を参照すると予期しない結果になるためです。

文ラベルの配列を配列値として使用することはできませんが、その要素は、文ラベルを使用できるあらゆるコンテキストで使用できます。

プロシージャ名、形式名、および文ラベルを同じブロックの DECLARE 文で宣言することはできません。ただし、それらの名前を構造体メンバーの名前として使用することはできます。

別のプログラム モジュールの一部である外部プロシージャの名前を現在のプログラム モジュールで参照する場合は、DECLARE 文で宣言する必要があります(詳細については「モジュール」を参照)。DECLARE 文で宣言できるのは外部プロシージャ名のみです。