マイクロソフトのC++コンパイラで以下のマクロをコンパイルすると警告4127(条件式が定数)が出る。
1 |
#define MYMACRO do { ... } while(false) |
この警告を消したくてpragmaを使おうとしても、外から囲うと無意味だし中に書くと#がマクロの文字列化でうまくいかない。
__pragmaキーワード
マイクロソフト拡張のこのキーワードを使えば解決できる。
1 2 3 4 5 |
#define MYMACRO do { ... } \ __pragma(warning(push)) \ __pragma(warning(disable:4127)) \ while (false)\ __pragma(warning(pop)) |