【发布时间】:2011-02-07 11:30:54
【问题描述】:
当我在禁用宏时使用以下代码时,我正在使用宏来启用/禁用跟踪:
int main()
{
("Hello world");
}
这段代码是有效的,我得到了想要的效果(禁用宏时没有任何反应),但我无法弄清楚到底发生了什么。编译器是否将括号视为“无名”方法声明?
为了更清楚,代码是:
#ifdef TRACE
#define trace printf("%s %d -> ",__FILE__, __LINE__);printf
else
#define trace
#endif
int main()
{
trace("Hello world");
}
提前致谢。
【问题讨论】:
-
像这样的多语句宏有点棘手的一点是,它们不能像
if语句那样工作(你不能说像if (condition) TRACE("bad");这样的话) - 也许你可以在这里使用&&代替分号 (?) 来解决这个问题 - 或者只是小心使用宏;)
标签: c parentheses