简单#define:d宏在C中不起作用

时间:2015-03-14 11:42:55

标签: c macros c-preprocessor

我正在做C编程的入门课程,我们刚刚开始定义宏。如果 cond 为false,我应该定义打印 msg (字符串)的宏 CHECK ,但是,它不打印对标准信息流的 msg cond 是真还是假。有什么想法吗?

1     #define CHECK(cond, msg) if(!cond) fprintf(stdout, "%s", msg)

2 个答案:

答案 0 :(得分:7)

您应该像这样包装类似函数的宏:

#define CHECK(cond, msg)                   \
    do {                                   \
        if (!(cond)) {                     \
             fprintf(stdout, "%s", msg);   \
        }                                  \
    } while (0)

说明: C multi-line macro: do/while(0) vs scope block

答案 1 :(得分:0)

尝试将其包装在{}:

 #define CHECK(cond, msg) {if(!cond) fprintf(stdout, "%s", msg)}

另外,确保你真的不要从' 1'

开始