2017-03-23 22 views

答えて

1

最近のバージョンのClangは、__has_warning機能チェックマクロを実装しています。クラン警告フラグのいずれか一方のみのプールとGCC(いないその逆)をエミュレートするので、それは機能チェックイントロスペクションを使用して、GCCに対してコーディングすることは合理的だ:

#if __GNUC__ && defined(__has_warning) 
# if __has_warning("-Wwhatever") 
#  define SUPPRESSING 
#  pragma GCC diagnostic push 
#  pragma GCC diagnostic ignored "-Wwhatever" 
# endif 
#endif 

// Code that trips warning 

#ifdef SUPPRESSING 
# undef SUPPRESSING 
# pragma GCC diagnostic pop 
#endif 

これは面倒copypastaのビットです。 __has_warning#pragmaは、引数としてマクロを受け付けませんので

#define SUPPRESS_WARNING "-Wwhatever" 
#include "suppress_warning.h" 

// Code that trips warning 

#include "unsuppress_warning.h" 

suppress_warning.hは、少しトリッキーです:それはこのように、包含ファイルを使用して回避することができます。したがって、GithubまたはWandbox demoから取得してください。

+0

@ NathanOliver 'defined(__has_warning)'は、このようなコンパイラでは 'false'と評価されます。 – Potatoswatter

+0

ちょうどそれを見た。コメントは撤回しました – NathanOliver

+0

@NathanOliver大丈夫です:)私は、懸念が再び起こったことに対して、私の応答をお守りとして残します。 – Potatoswatter

関連する問題