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

时间:2013-03-27 03:16:21

标签: c++ macros

这个C ++宏中#的含义是什么:

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

3 个答案:

答案 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”