%PROCEDURE

目的

プロシージャ エントリを定義し、プロシージャのパラメーターを必要に応じて指定します。

構文

%label:[label:]... PROCEDURE[(ident[,ident]...)] 
[STATEMENT][RETURNS(CHARACTER|FIXED|BIT)][KEYS[(ident[,ident]...)]];

省略形:%PROCEDURE は %PROC。

パラメーター

ident は PL/I 名です。

説明

%PROCEDURE 文は、プリプロセッサ プロシージャを区切るために %END 文とともに使用されます。このようなプリプロセッサ プロシージャは、内部の関数プロシージャとしてプリプロセッサでのみ実行できます。

RETURN 属性の CHARACTER、FIXED、または BIT のいずれかを RETURNS 属性リストで指定して、関数プロシージャから返される値のタイプを示す必要があります。デフォルトはありません。

KEYS を使用する場合、PROCEDURE に識別子リストを含めることはできません。
注: KEYS は以前の IBM PLX プリプロセッサの非推奨の機能であり、Open PL/I に完全なエミュレーションはありません。STATEMENT のサポートに単純にマッピングされます。

プリプロセッサ文の ASSIGNMENT、DECLARE、DO、GOTO、IF、NULL、RETURN、および NOTE をプリプロセッサ プロシージャ内で使用することができます。プリプロセッサ プロシージャ内では % 記号は省略されます。

%DECLARE (A,B,C) CHARACTER;
%ACTIVATE CAT;
%A = 'AAA';
%B = 'BBB';
%C = 'CCC';
RES_STRING_3 = CAT(A,B,C);
RES_STRING_2 = CAT (A,B);
RES_STRING_1 = CAT(A);
%CAT: PROCEDURE(X,Y,Z) RETURNS(CHAR);
DECLARE (X,Y,Z) CHAR;
DECLARE S CHAR;
IF PARMSET(Z) THEN S = ''''||X||Y||Z||'''';
ELSE IF PARMSET(Y) THEN S = ''''||X||Y||'''';
ELSE S = ''''||X||'''';
RETURN(S); 
%END CAT;

この例で生成されるテキストは次のようになります。

RES_STRING_3 = 'AAABBBCCC'; 
RES_STRING_2 = 'AAABBB'; 
RES_STRING_1 = 'AAA';

この例は、プリプロセッサを使用して文字列定数を生成する方法も示しています。これを行うには、連続する 4 つのアポストロフィの後に、前後に連結記号を付けて目的の文字列定数の式を記述し、その後にアポストロフィをあと 4 つ続けます。