_Pragma演算子と#pragmaディレクティブを使ってObjCで書いたコードの警告を抑制する
仕事で触っているソースコードの中に
#define SOME_WARNING_PROCESS_START _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wpartial-availability\"") #define SOME_WARNING_PROCESS_END _Pragma("clang diagnostic pop")
のような宣言があって、意味がわからなかったのでメモ。
#define ...
の部分#define MAGIC_NUMBER 1234
同じ記号定数の定義
_Pragma("文字列リテラル")
の_Pragma
はC99で導入された演算子で、#pragma
と同じ意味らしい。#pragma
は処理系の???clang
はClang(クラン)
のことで、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンド- 定数として宣言してあるのは、実際にPragmaを置きたい箇所でいきなり置くより、意味のわかりやすい定数でおいた方が人間が読んでてわかりやすいから?
diagnostic
の細かいことや、Pragmaの処理系が~とかいう話はよくわかりませんが、一旦ここまで。
参考
- https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html
- https://cpprefjp.github.io/lang/cpp11/pragma_operator.html
- https://docs.oracle.com/cd/E19957-01/805-7887/6j7dsdhek/index.html
- http://www.c-lang.org/define.html
- http://qiita.com/purigen/items/08251d1c995b8cc23da2
- http://nshipster.com/clang-diagnostics/
- https://ja.wikipedia.org/wiki/Clang
- https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9