c/c++语言开发共享#if defined(x)|| (y); 这有效吗?

在一次审查中,我遇到了一段代码,如下所示:

#if defined(x) || y 

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

    是的,它是有效的。

    这是标准(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

    对此的推理是双重的。

    您可以使用已defined运算符,而不是使用#ifdef ,以便您可以在其上使用逻辑运算符( &&||等),这样您就不必复制代码,以便在必要时将其包含在内。是您需要定义的多个标准。

    另外, 在我看来 ,我觉得#if defined(x)#ifdef x更容易阅读,你可以执行以下#if defined(x) && defined(y) ,而这是不可能的#ifdef

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

    上述陈述的意思是“x是定义的,或者y是真的”。

    这是正确的,但这是一个不好的做法。 为什么在一个条件中使用两个不同的评估(’y’和’defined(x)’)。 这可能会让其他人感到困惑。 以下示例显示了||的更常见用法 和&&对#defined宏的操作符:

     #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 

    然后用户将收到此消息:

    需要了解更多c/c++开发分享#if defined(x)|| (y); 这有效吗?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     #warning "A or B" 

      以上就是c/c++开发分享#if defined(x)|| (y); 这有效吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979862.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐