首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >#if defined (x) || (y);这是否有效?

#if defined (x) || (y);这是否有效?
EN

Stack Overflow用户
提问于 2012-03-30 23:35:16
回答 3查看 69K关注 0票数 27

在一次复习中,我发现了一段如下代码:

#if defined(x) || y

上面的陈述是什么意思?条件是否会正确执行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 26
EN

Stack Overflow用户

发布于 2012-03-30 23:37:17

是的,因为defined(x)是一个布尔值,返回true或false。

上面的语句意味着“要么x是定义的,要么y是真的”。

票数 4
EN

Stack Overflow用户

发布于 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"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9946108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档