私はall不明な#pragma警告を無効にする方法を知っています。答えは、例えば、ここに与えられました: SO:#pragma警告を無効にする方法?
私の質問は-特定のプラグマの「不明なプラグマ」警告を無効にする方法はありますか?たとえば、#pragma ugubugu
の警告を無効にすると、次のコードが表示されます。
#pragma ugubugu
#pragma untiunti
int main() {return 0;}
次のいずれかでコンパイルした場合:
g++ pragma.cpp -Wall
clang++ pragma.cpp -Wall
警告が1つ生成されるはずです。
warning: ignoring #pragma untiunti
たぶん、たとえば、何もしないカスタムプラグマを登録する簡単な方法はありますか?
そのようなオプションがVisual Studioにもあるかどうかを知るのは素晴らしいことですが、それはそれほど重要ではありません。
ありがとうございました!
「しかし、なぜ彼は最終的にカスタムプラグマで遊んでいるのですか?」
私のソースは2つのコンパイラーによって解析されます。そのうちの1つには、他には知られていない特別な#pragma
があります。もちろん、#ifdef COMPILER_IDENTIFICATION_MACRO ... #endif
のすべてのインスタンスの周りに#pragma
を置くこともできますが、それは面倒です。
これを行う方法はないと確信しています。
GCCとClangの両方に内部インターフェイスがあり、言語のフロントエンドが#pragma
ハンドラーをプリプロセッサーに登録できます-GCCのlibcpp/directives.c
とClangのlib/Lex/Pragma.cpp
を参照してください-しかし、私が見る限りでは、コマンドラインオプションに基づいて、登録されているハンドラーを(コンパイル対象の言語バリアントによって暗示されているものを超えて)変更できるものはありません。
私はall不明な#pragma警告を無効にする方法を知っています。答えは、例えば、ここに与えられました: SO:#pragma警告を無効にする方法?
最も投票数の多い回答が、そこで承認された回答よりも優れていることに注意してください。 -Wno-unknown-pragmas
は、警告をオンにする(-Wall
のような)何でもafterの後にコマンドラインで追加できます。
私のソースは2つのコンパイラーによって解析されます。そのうちの1つには、他には知られていない特別な
#pragma
があります。もちろん、#ifdef COMPILER_IDENTIFICATION_MACRO ... #endif
のすべてのインスタンスの周りに#pragma
を配置することもできますが、これは面倒です。
より哲学的な観点からは、これは本当に正しい解決策だと思います。
#pragma
は、実装を呼び出すためのメカニズムを提供することを目的としているため、意図したとおりに#pragma
をコンパイラから非表示にすることは私には正しいようです。コンパイラで定義された動作。
(これを行うと、Clangは__clang__
を定義しますが、bothGCCとClangは__GNUC__
を定義することに注意してください。)
プラグマの警告は、あるプラットフォームでは有効で別のプラットフォームでは有効ではないため、無効にしたいと思います。その場合は、マクロを使用してプラグマを選択的に有効にすると、警告を抑制する必要がなくなります。
たとえば、Visual C++でのみプラグマが必要な場合は、次のようにできます。
#if defined(_MSC_VER)
# define SAFE_PRAGMA_UGUBUGU __pragma(ugubugu)
#else
# define SAFE_PRAGMA_UGUBUGU
#endif
そして、あなたは書くことができます
SAFE_PRAGMA_UGUBUGU
#pragma untiunti
int main() {return 0;}