【发布时间】:2015-03-14 11:42:54
【问题描述】:
我正在上 C 编程入门课程,我们刚刚开始定义宏。如果 cond 为假,我应该定义打印 msg (字符串)的宏 CHECK,但是,它不会打印msg 到 stdout 流,无论 cond 是真还是假。有什么想法吗?
1 #define CHECK(cond, msg) if(!cond) fprintf(stdout, "%s", msg)
【问题讨论】:
-
请给我们你调用这个宏的代码。
-
我敢打赌你会传递类似
CHECK(a == b, "a is not b");的东西,对吧?在这种情况下,它将扩展到if (!a == b),然后运算符优先级会毁了你的一天……这就是为什么你总是无条件地用括号所有的宏参数。 -
可能在括号里加上 cond
#define CHECK(cond, msg) if(!(cond)) fprintf(stdout, "%s", msg) -
您的宏定义不起作用,因为该行以
1开头。请参阅sscce.org,了解如何提出“我的程序无法运行”的问题。 -
另外,不要编写以意想不到的方式改变控制流的宏。您的宏在多个方面存在缺陷。
标签: c macros c-preprocessor