这个C++宏中#符号的含义是什么?

jia*_*afu 3 c++ macros

#这个C++宏的意思是什么:

#define ASSERT(expr)   \
   {if (!(expr)){CM_ERROR_TRACE("assert  "<< #expr <<" failed"); assert(expr);} }
Run Code Online (Sandbox Code Playgroud)

tem*_*def 7

这是"字符串化"运算符.在宏中,if x是一个宏参数,然后#x求值为文本的带引号的字符串文字表示x.例如,宏

#define STRINGIZE(x) #x
Run Code Online (Sandbox Code Playgroud)

在这方面评估

STRINGIZE(2 + 3 + 4)
Run Code Online (Sandbox Code Playgroud)

扩展到

"2 + 3 + 4"
Run Code Online (Sandbox Code Playgroud)

在这里,宏是

#define ASSERT(expr)   \
   {if (!(expr)){CM_ERROR_TRACE("assert  "<< #expr <<" failed"); assert(expr);} }
Run Code Online (Sandbox Code Playgroud)

#expr这里的使用意味着如果表达式没有计算为true,它将打印出宏参数的字符串表示.例如

ASSERT(myFunction())
Run Code Online (Sandbox Code Playgroud)

会扩大到

{if (!(myFunction())){CM_ERROR_TRACE("assert " << "myFunction()" << " failed"); assert(myFunction());} }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!