#
この C++ マクロの意味は次のとおりです。
#define ASSERT(expr) \
{if (!(expr)){CM_ERROR_TRACE("assert "<< #expr <<" failed"); assert(expr);} }
これは「文字列化」演算子です。マクロでx
は、 がマクロ パラメータの場合#x
、 のテキストの引用符付き文字列リテラル表現に評価されますx
。たとえば、マクロ
#define STRINGIZE(x) #x
この文脈で評価される
STRINGIZE(2 + 3 + 4)
に展開します
"2 + 3 + 4"
ここで、マクロは
#define ASSERT(expr) \
{if (!(expr)){CM_ERROR_TRACE("assert "<< #expr <<" failed"); assert(expr);} }
ここでの使用は#expr
、式が真に評価されない場合、マクロ引数の文字列表現を出力することを意味します。例えば
ASSERT(myFunction())
に展開します
{if (!(myFunction())){CM_ERROR_TRACE("assert " << "myFunction()" << " failed"); assert(myFunction());} }
お役に立てれば!
マクロが前処理 #expr
されると、 に置き換えられ"expr"
ます。
#
トークンから文字列を作成するプリプロセッサ オペレータです。
#define STRINGIZE(macro) #macro
STRINGIZE(Hello)
「こんにちは」に置き換えられます