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)
残念ながら、展開された同一のマクロを更に再帰的に展開することはできないようだ。
最近のコメント