マクロで可変引数を扱うので使う
#define MYFUNC(s, ...) printf(s, __VA_ARGS__)
など.
問題: 空の __VA_ARGS__
MYFUNC("bora")
みたいに, __VA_ARGS__
が空になるのは本来は error になる.
(clang -Weverything
にすると, -Wgnu-zero-variadic-macro-arguments
warning が出る)
ダブルハッシュ(GNU 拡張)
##__VA_ARGS__
という表記で, 空の引数を扱える.
gcc 独自構文でした.
C++20
C++20 からは __VA_OPT__
が導入されひとまず解決
C++11 orlater
C++11 or later では, 可変引数テンプレートで対応できないか検討してみる.
たとえば, ロギングとかで __LINE__
などを使いたいときはどうしてもマクロ経由になるが, 実装をなるべくテンプレート関数で置き換える.