C 言語 マクロ講座 再帰展開実験編2007年03月23日 11時52分35秒

マクロで可変個数引数を渡すことができると、試してみたくなるのが、再帰的な利用法だ。

マクロを利用して、構造体の配列を初期化すると、同じマクロを続けて呼ぶことになる。


Log(debug),
Log(info),
...

もし、マクロが再帰的に処理されれば、目的の項目を可変個数引数として渡すだけですむからだ。

Log(debug, info, ...);

の様にやりたい。

そこで、実験してみる。


% cat nested.c 
#define EXPAND(x, ...) x; EXPAND(__VA_ARGS__)

EXPAND(1, 2, 3)


% gcc -E nested.c
# 1 "nested.c"
# 1 ""
# 1 ""
# 1 "nested.c"


1; EXPAND(2, 3)

残念ながら、展開された同一のマクロを更に再帰的に展開することはできないようだ。

前回次回