質問: 現在、Visual Studio 2015を使用してC++言語で開発しています。 その際、自前のマクロを定義したいのですが、その中にプリプロセッサを含めたいと考えています。 現在のコードです(一部簡略化して書いてあります)。 ``` #define ASSERT( C, M ) if( !C ) { fprintf( stderr, "%s", M ); exit( 0 ); } ``` これを、マクロが次の様に展開(置換)される様にしたいです。 ``` #pragma warning(push) #pragma warning(disable:4127) if( !C ) { fprintf( stderr, "%s", M ); exit( 0 ); } #pragma warning(pop) ``` 理由としましては、constなメンバ変数同士の大小関係等をASSERT()マクロでチェックしたいのですが、現在のコードではC4127警告が発生してしまうからです。
回答: マクロ定義の中で、`#`は別の意味を持ちますので、無理だと思います。 警告は気にしなければ良いのでは? 思いつきですが、 ``` int not(int x) { return !x; } ``` を定義しておいて、 ``` #define ASSERT( C, M ) if( not(C) ) { fprintf( stderr, "%s", M ); exit( 0 ); } ``` とするとか。