这个C ++宏中#
的含义是什么:
#define ASSERT(expr) \
{if (!(expr)){CM_ERROR_TRACE("assert "<< #expr <<" failed"); assert(expr);} }
答案 0 :(得分: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
意味着如果表达式的计算结果为true,它将打印出宏参数的字符串表示形式。例如
ASSERT(myFunction())
将扩展为
{if (!(myFunction())){CM_ERROR_TRACE("assert " << "myFunction()" << " failed"); assert(myFunction());} }
希望这有帮助!
答案 1 :(得分:4)
预处理宏时#expr
将替换为"expr"
。
答案 2 :(得分:3)
#
是一个预处理程序运算符,它从令牌创建一个字符串。
#define STRINGIZE(macro) #macro
STRINGIZE(Hello)
将替换为“Hello”