在一次复习中,我发现了一段如下代码:
#if defined(x) || y
上面的陈述是什么意思?条件是否会正确执行?
发布于 2012-03-30 23:38:58
是的,它是有效的。
以下是标准(C99)在6.10p1中所说的:
if-group:
# if constant-expression new-line groupopt
# ifdef identifier new-line groupopt
# ifndef identifier new-line groupopt
defined
运算符被视为常量表达式(6.10.1p1)的一元运算符部分。
在您的示例中,如果定义了宏x
,或者定义了y
且不同于0
,则条件的计算结果为true
发布于 2012-03-30 23:37:17
是的,因为defined(x)
是一个布尔值,返回true或false。
上面的语句意味着“要么x是定义的,要么y是真的”。
发布于 2015-02-24 15:12:18
这是正确的,但这是一种糟糕的做法。为什么在一个条件中使用两个不同的求值('y‘和'defined(x)')。这可能会让其他人感到困惑。下面的示例显示了对#定义的宏更常见的||和&&运算符的用法:
#define AA 1
#define BB 2
#if (defined AA) || (defined BB)
#warning "A or B"
#endif
#if (defined AA) && (defined BB)
#warning "A and B"
#endif
当运行上述代码时,用户将在屏幕上看到以下消息:
#warning "A or B"
#warning "A and B"
但如果代码是这样的(AA未定义):
#undefine AA
#define BB 2
#if (defined AA) || (defined BB)
#warning "A or B"
#endif
#if (defined AA) && (defined BB)
#warning "A and B"
#endif
然后,用户将收到以下消息:
#warning "A or B"
https://stackoverflow.com/questions/9946108
复制相似问题