debugbuilds の場合、私は通常 Clang を使用します。これは、警告とエラーをより適切にフォーマットし、それらを追跡して修正するのを少し簡単にするためです。
しかし最近、可変引数を持つマクロを追加した後、Clang は (ダミー プロジェクトから) 次のことを教えてくれました。
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
macroname(args...)
Visualstudio、Sunstudio、そしてもちろん GCC など、さまざまなコンパイラで問題なくコンパイルできることを私は知っています。しかし、clang が正しいことを確認するために、可変引数を展開する別の 2 つの方法を試しました。
番号 1:
#define stuff1(...) stuff_i(...)
2番:
#define stuff2(...) stuff_i(__VA_ARGS__)
両方で、次のメッセージが表示されます。
main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
... Variadic マクロが実際に C++ の標準の一部であるかどうか疑問に思います (もちろん、プリプロセッサが独立して解釈されることはわかっています)。