#この 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)「こんにちは」に置き換えられます