请参阅以下C代码片段:
PM_RAISE(retexn, exn)
do
{
retexn = (exn);
gVmGlobal.errFileId = __FILE_ID__;
gVmGlobal.errLineNum = (uint16_t)__LINE__;
} while (0)
在第四行,为什么
exn
被括号包围?编辑(回复
IntermediateHacker
)以下是原始代码片段:#if __DEBUG__
#define PM_RAISE(retexn, exn) \
do \
{ \
retexn = (exn); \
gVmGlobal.errFileId = __FILE_ID__; \
gVmGlobal.errLineNum = (uint16_t)__LINE__; \
} while (0)
#else
#define PM_RAISE(retexn, exn) \
retexn = (exn)
#endif
最佳答案
把宏参数用括号括起来被认为是一种很好的做法。这对你的例子没有多大帮助,但是你说你有:
#define multiply(a, b) a * b
并将其用于:
multiply(4 + 3, 2)
它将扩展到
4 + 3 * 2
这显然不是预期的结果(3将首先乘以2)。