web-dev-qa-db-ja.com

「 'register'ストレージクラス指定子は非推奨です」という警告をオフにする

最近のXcode5.1アップデートでは、コードベースに多数の新しい警告が表示されます-
これは明らかに、 registerストレージクラス指定子の使用について警告 するclangの更新バージョンに関連しています。 C++ 11ソースは としてC++ 11 で非推奨になりました:

/Users/me/Documents/Sources/boost/boost/log/attributes/attribute_set.hpp:288:9: 'register' storage class specifier is deprecated

ここで、変更できないコードの警告を抑制したいと思います-上記の例のBOOSTソースのように。

警告をオンにするコンパイラフラグを見つけることができました(-Wdeprecated-register)しかし、Xcode設定からの警告を無効にする反対の方法はありますか?

17
Jay

一般に、先頭にno-オプションにするとオフになります。したがって、-Wdeprecated-registerは警告を有効にし、次に-Wno-deprecated-registerはそれを無効にする必要があります。

または、多くのコンパイラでは、コードでプラグマ(または同様のもの)を使用して、特定のヘッダーを含めながら警告を無効にし、独自のコードでは有効のままにしておくことができます。それらはコンパイラ固有です。 Clangの場合、それは次のようなものです

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated-register"
#include "dodgy.hpp"
#pragma clang diagnostic pop

(GCCの場合、プラグマは同じですが、clangGCCに置き換えるだけです。他のコンパイラについては知りません。)

26
Mike Seymour

警告を抑制することは、ここでは間違ったツールです。使用 -isystem自分のものではないコードを含めるとフラグが立てられ、そのコードに警告は生成されません。

これも機能します

#if __cplusplus > 199711L
#define register      // Deprecated in C++11.
#endif  // #if __cplusplus > 199711L
6
Adamski