2017-12-16 37 views
1

私のコードでいくつかのgcc診断をプッシュ/ポップする必要があります。それが1つのファイルに必要だった場合、私は次のようにします:複数のプラグマディレクティブを1つのプリプロセッサ定義に配置する

#pragma GCC diagnostic push 
#pragma GCC diagnostic error "-Wformat" 
#pragma GCC diagnostic error "-Wuninitialized" 

...some code... 

#pragma GCC diagnostic push 

しかし私はこれを複数の場所で必要とします。ですから、私は#defineなどを欲しいと思っています。私は次のことについて考えましたが、cプリプロセッサは#defineに#pragmaを許可していません。

#define PushWarnings \ 
    #pragma GCC diagnostic push \ 
    #pragma GCC diagnostic error "-Wformat" \ 
    #pragma GCC diagnostic error "-Wuninitialized" 

これを達成する方法はありますか?

+0

@EdHeal「修正」とはどういう意味ですか? – melpomene

+1

コードは無効にするのではなく、警告を有効にします(あるいはエラーに変えます)。 – melpomene

+0

@melpomene - すべての警告がエラーで、その保護機能を持たないコードで遊ぶ必要がないようにコードをコンパイルしてください。 –

答えて

5

はい、これを行う方法があります。 C99は_Pragma演算子を導入しました(C++ではC++ 11以降も使用可能です)。

よう

#pragma GCC diagnostic error "-Wformat" 

としてプラグマは、また後者は#プリプロセッサディレクティブではないので、マクロから生成することができる

_Pragma("GCC diagnostic error \"-Wformat\"") 

のように書くことができる:

#define PushWarnings \ 
    _Pragma("GCC diagnostic push") \ 
    _Pragma("GCC diagnostic error \"-Wformat\"") \ 
    _Pragma("GCC diagnostic error \"-Wuninitialized\"") 
+0

_Pragmaについて知りたいです。 – Paul

関連する問題