前のページ|次のページ

%SYSMEXECDEPTH関数

%SYSMEXECDEPTH関数の呼び出し点からのネストの深さを返します。

種類: マクロ関数
ヒント: %SYSMEXECDEPTH関数と%SYSMEXECNAME関数は組み合わせて使用できるように実装されていますが、組み合わせて使用することが必須ではありません。
参照項目: %SYSMEXECNAME関数

構文

%SYSMEXECDEPTH

詳細

現在実行中のマクロのネストレベルを取得するには、%SYSMEXECDEPTH関数を使用します。この関数は、ネストされたマクロ呼び出しにおける指定のマクロのネストの深さを表す数字を返します。%SYSMEXECDEPTH関数は次の値を返します。
0 オープンコード
>0 ネストレベル
詳細については、次に示す例を参照してください。
8          %macro A;
9             %put %sysmexecdepth;
10         %mend A;   /* The macro execution depth 
                                        of a macro called from open code */
11         %A;         /* is one  */
1
12
13         %macro B;
14            %put %nrstr(%%)sysmexecdepth=%sysmexecdepth;
15            %put %nrstr(%%)sysmexecname(1)=%sysmexecname(1);
16            %put %nrstr(%%)sysmexecname(2)=%sysmexecname(2);
17            %put %nrstr(%%)sysmexecname(0)=%sysmexecname(0);
18            %put %nrstr(%%)sysmexecname(%nrstr(%%)sysmexecdepth-1)=
                   %sysmexecname(%sysmexecdepth-1);
19         %mend B;
20
21         %macro C;
22         %B;
23         %mend;
24         %C;
%sysmexecdepth=2
%sysmexecname(1)=C
%sysmexecname(2)=B
%sysmexecname(0)=OPEN CODE
%sysmexecname(%sysmexecdepth-1)=C
25
26         %macro level1;
27         %level2;
28         %mend;
29         %macro level2;
30         %level3;
31         %mend;
32         %macro level3;
33         %level4;
34         %mend;
35         %macro level4;
36         %do i = %sysmexecdepth+1 %to -1 %by -1;
37            %put %nrstr(%%)sysmexecname(&i)=%sysmexecname(&i);
38         %end;
39         %mend;
40
41         %level1;
WARNING: Argument 1 to %SYSMEXECNAME function is out of range.
%sysmexecname(5)=
%sysmexecname(4)=LEVEL4
%sysmexecname(3)=LEVEL3
%sysmexecname(2)=LEVEL2
%sysmexecname(1)=LEVEL1
%sysmexecname(0)=OPEN CODE
WARNING: Argument 1 to %SYSMEXECNAME function is out of range.
%sysmexecname(-1)=
42
  • マクロAはマクロBを呼び出します。マクロCはマクロBを呼び出します。マクロC内に配置された%SYSMEXECDEPTH関数の呼び出しは、値2をマクロBに対して返します。
  • マクロC >で、同マクロを呼び出したマクロ名を知りたい場合、%SYSMEXECNAME関数を%SYSMEXECNAME(%SYSMEXECDEPTH-1)として呼び出します。(%SYSMEXECNAME関数の引数であるnの値は、元のネストレベルの値である%SYSMEXECDEPTHの戻り値から1を引いた値になります)。この%SYSMEXECNAME関数の呼び出しは、値Bを返します。
前のページ|次のページ|ページの先頭へ