C言語のマクロの引数の最後に ...
を指定することで任意個の引数を取り、 __VA_ARGS__
で参照できる:
が、上記のように他の関数に渡す場合、可変部分は1個以上値を渡さないとエラーが出てしまう:
LOG("FOOBAR\n"); // <= コンパイルエラー |
これは __VA_ARGS__
が空になり、マクロが単純に printf("FOOBAR\n", );
と置換されてしまうためである。
回避方法
gccだと ##__VA_ARGS__
というのを使えば、0個の場合でも受け渡せる:
追記:またはC++20でサポートされた? __VA_OPT__
で可変引数が0の場合に無視するトークンを指定できるとのこと: