3

#この C++ マクロの意味は次のとおりです。

#define ASSERT(expr)   \
   {if (!(expr)){CM_ERROR_TRACE("assert  "<< #expr <<" failed"); assert(expr);} }
4

3 に答える 3

7

これは「文字列化」演算子です。マクロで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());} }

お役に立てれば!

于 2013-03-27T03:19:49.843 に答える
4

マクロが前処理 #exprされると、 に置き換えられ"expr"ます。

于 2013-03-27T03:18:34.153 に答える
3

#トークンから文字列を作成するプリプロセッサ オペレータです。

#define STRINGIZE(macro) #macro

STRINGIZE(Hello)「こんにちは」に置き換えられます

于 2013-03-27T03:19:50.523 に答える