ゼロ引数可変引数マクロを使用している C++ アプリケーションがあります。ただし、さまざまな回答でSOにここに投稿された標準準拠のソリューションはあまり好きではなく、GCC固有のものを維持して##__VAR_ARGS__
ください。
ただし、できるだけ多くの警告をキャッチしたいと思います。
私のビルド システムは meson で、オプションを渡し、追加のプロジェクト引数として--buildtype=debugoptimized --warning_level=2 --werror=true
指定します。-Wno-pedantic
Ob Ubuntu 18.04、gcc 7.3.0、meson 0.45.1 これにより、コンパイラに次のオプションが追加されます-Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11
。すべてが正常にビルドされます。
CentOS 7.4.1708、gcc 4.8.5、meson 0.44.1 で同じコード、同じオプションを使用すると、まったく同じオプションがコンパイラに追加されますが、コンパイルされず、次のエラーが発生します。
ISO C99 requires rest arguments to be used
(可変長マクロの場合)
-Wno-pedantic
このコンパイラでは無視されているようです。
警告オプションを少しいじることはできますが、Ubuntu または CentOS のいずれかでビルドが失敗します。Ubuntu ビルドが失敗した場合、エラー メッセージは少し異なります。
ISO C++11 requires at least one argument for the "..." in a variadic macro
これまでに見つけた両方のビルドを成功させる唯一の解決策は、プロジェクト引数として使用meson --buildtype=plain --warning_level=1 -werror=true
して設定することです。-Wall -Wextra
したがって、これがコンパイラの問題なのか、メソンの問題なのか、それとも私がヒットしている不幸なバージョンの違いなのかはわかりません。