%label:[label:]... PROCEDURE[(ident[,ident]...)] [STATEMENT][RETURNS(CHARACTER|FIXED|BIT)][KEYS[(ident[,ident]...)]];
省略形:%PROCEDURE は %PROC。
%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 つ続けます。
説明
%PROCEDURE 文は、プリプロセッサ プロシージャを区切るために %END 文とともに使用されます。このようなプリプロセッサ プロシージャは、内部の関数プロシージャとしてプリプロセッサでのみ実行できます。
RETURN 属性の CHARACTER、FIXED、または BIT のいずれかを RETURNS 属性リストで指定して、関数プロシージャから返される値のタイプを示す必要があります。デフォルトはありません。
プリプロセッサ文の ASSIGNMENT、DECLARE、DO、GOTO、IF、NULL、RETURN、および NOTE をプリプロセッサ プロシージャ内で使用することができます。プリプロセッサ プロシージャ内では % 記号は省略されます。