3

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

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

3 回答 3

7

这是“字符串化”运算符。在宏中, ifx是一个宏参数,然后#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 回答