C言語:プリプロセッサマクロの可変長引数で引数分繰り返す
一度展開されたマクロは再度展開されない。これはマクロ展開が無限ループにならないようにするための措置。
以下のような再帰的なマクロは展開されない。
code:recurwsive.c
#define RECURSIVE(x, ...) printf("%s: %d\n", #x, x) RECURSIVE(__VA_ARGS__) __VA_ARGS__ の部分の引数の数を取得する方法
code:get_va_args_count.c
29, 28, 27, 26, 25, 24, 23, 22, 21, 20 \
19, 18, 17, 16, 15, 14, 13, 12, 11, 10 \
9, 8, 7, 6, 5, 4, 3, 2, 1, 0
参考
__VA_ARGS__の引数をループするやつはなぜ動くのか