Sun Studio 12 Update 1: C++ ユーザーズガイド

A.2.123 -xdumpmacros[= value[,value...]]

マクロがプログラム内でどのように動作しているかを調べたいときに、このオプションを使用します。このオプションは、定義済みマクロ、解除済みマクロ、実際の使用状況といった情報を提供します。マクロの処理順序に従って、標準エラー (stderr) に出力されます。-xdumpmacros オプションは、ファイルの終わりまで、または dumpmacros プラグマまたは end_dumpmacros プラグマによって上書きされるまで有効です。「B.2.5 #pragma dumpmacro sを参照してください。

A.2.123.1 値

value の代わりに次の引数を使用できます。

表 A–31 -xdumpmacros の値

値 

意味  

[no%]defs

すべての定義済みマクロを出力します [しません]。 

[no%]undefs

すべての解除済みマクロを出力します [しません]。 

[no%]use

使用されているマクロの情報を出力します [しません]。 

[no%]loc

defsundefsuse の位置 (パス名と行番号) を印刷します [しません]。

[no%]conds

条件付き指令で使用したマクロの使用情報を出力します [しません]。 

[no%]sys

システムヘッダーファイルのマクロについて、すべての定義済みマクロ、解除済みマクロ、使用情報を出力します [しません]。 

%all

オプションを-xdumpmacros=defs,undefs,use,loc,conds,sys に設定します。この引数は、[no%] 形式の引数と併用すると効果的です。たとえば -xdumpmacros=%all,no%sys は、出力からシステムヘッダーマクロを除外しますが、そのほかのマクロに関する情報は依然として出力します。

%none

あらゆるマクロ情報を出力しません。 

オプションの値は追加されていきます。-xdumpmacros=sys -xdumpmacros=undefs を指定した場合と、-xdumpmacros=undefs,sys を指定した場合の効果は同じです。


注 –

サブオプション loccondssys は、オプション defsundefsuse の修飾子です。loccondssys は、単独では効果はありません。たとえば -xdumpmacros=loc,conds,sys は、まったく効果を持ちません。


デフォルト

引数を付けないで -xdumpmacros を指定した場合、-xdumpmacros=defs,undefs,sys を指定したことになります。-xdumpmacros を指定しなかった場合、デフォルト値として -xdumpmacros=%none が使用されます。

-xdumpmacros=use,no%loc オプションを使用すると、使用した各マクロの名前が一度だけ出力されます。より詳しい情報が必要であれば、-xdumpmacros=use,loc オプションを使用します。マクロを使用するたびに、そのマクロの名前と位置が印刷されます。

次のファイル t.c を考慮します。


example% cat t.c
#ifdef FOO
#undef FOO
#define COMPUTE(a, b) a+b
#else
#define COMPUTE(a,b) a-b
#endif
int n = COMPUTE(5,2);
int j = COMPUTE(7,1);
#if COMPUTE(8,3) + NN + MM
int k = 0;
#endif

次の例は、defsundefssys、および loc の引数に基づいた、ファイル t.c の出力を示しています。


example% CC -c -xdumpmacros -DFOO t.c
#define __SunOS_5_9 1
#define __SUNPRO_CC 0x590
#define unix 1
#define sun 1
#define sparc 1
#define __sparc 1
#define __unix 1
#define __sun 1
#define __BUILTIN_VA_ARG_INCR 1
#define __SVR4 1
#define __SUNPRO_CC_COMPAT 5
#define __SUN_PREFETCH 1
#define FOO 1
#undef FOO
#define COMPUTE(a, b) a + b

example% CC -c -xdumpmacros=defs,undefs,loc -DFOO -UBAR t.c
command line: #define __SunOS_5_9 1
command line: #define __SUNPRO_CC 0x590
command line: #define unix 1
command line: #define sun 1
command line: #define sparc 1
command line: #define __sparc 1
command line: #define __unix 1
command line: #define __sun 1
command line: #define __BUILTIN_VA_ARG_INCR 1
command line: #define __SVR4 1
command line: #define __SUNPRO_CC_COMPAT 5
command line: #define __SUN_PREFETCH 1
command line: #define FOO 1
command line: #undef BAR
t.c, line 2: #undef FOO
t.c, line 3: #define COMPUTE(a, b) a + b

次の例では、useloc、および conds の引数によって、マクロ動作がファイル t.c に出力されます。


example% CC -c -xdumpmacros=use t.c
used macro COMPUTE

example% CC -c -xdumpmacros=use,loc t.c
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE

example% CC -c -xdumpmacros=use,conds t.c
used macro FOO
used macro COMPUTE
used macro NN
used macro MM

example% CC -c -xdumpmacros=use,conds,loc t.c
t.c, line 1: used macro FOO
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE
t.c, line 9: used macro COMPUTE
t.c, line 9: used macro NN
t.c, line 9: used macro MM

次は、ファイル y.c の例です。


example% cat y.c
#define X 1
#define Y X
#define Z Y
int a = Z;

次は、y.c 内のマクロに基づいた -xdumpmacros=use,loc の出力です。


example% CC -c -xdumpmacros=use,loc y.c
y.c, line 4: used macro Z
y.c, line 4: used macro Y
y.c, line 4: used macro X

関連項目

dumpmacros プラグマと end_dumpmacros プラグマを使用すれば、-xdumpmacros のスコープを変更できます。