マクロで可変引数を扱うので使う
# 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__ などを使いたいときはどうしてもマクロ経由になるが, 実装をなるべくテンプレート関数で置き換える.