2

ゼロ引数可変引数マクロを使用している 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

したがって、これがコンパイラの問題なのか、メソンの問題なのか、それとも私がヒットしている不幸なバージョンの違いなのかはわかりません。

4

0 に答える 0