【问题标题】:warning C4127: conditional expression is constant警告 C4127:条件表达式是常量
【发布时间】:2015-08-31 20:24:17
【问题描述】:
#define VALUE_MAX 300
int main() {
   if(VALUE_MAX)
      printf("The value is %d",VALUE_MAX);
   return 0;
}

当我尝试编译上述程序时,if(VALUE_MAX) 显示警告

条件表达式是常量。

如何解决上述警告?

【问题讨论】:

  • "上面的警告怎么解决?" -- 去掉if.
  • #pragma warning(disable:4127)

标签: c++ c visual-studio-2010 conditional-statements compiler-warnings


【解决方案1】:

您可能需要一个(预)编译时宏“if”(#ifdef),而不是运行时“if”(if (…)):

#define VALUE_MAX 300

int main() {
#ifdef VALUE_MAX
   printf("The value is %d", VALUE_MAX);
#endif
   return 0;
}

如果您有 #defined 和 VALUE_MAX 宏,则 #ifdef#endif 之间的代码将被编译。

【讨论】:

    【解决方案2】:

    VALUE_MAX 被替换为数字,因此条件被替换为

    if(300)
    

    这总是正确的。

    绕过警告的方法:

    1. 将 VALUE_MAX 更改为变量

    int VALUE_MAX = 300;

    1. 将条件更改为 ifdef

    #ifdef VALUE_MAX printf("The value is %d",VALUE_MAX); #endif

    【讨论】:

      【解决方案3】:

      在您的代码中,VALUE_MAX 不是变量,而是宏。 MACRO 可以被视为预处理时的文本替换。所以,

        if(VALUE_MAX)
      

      翻译成

       if (300)
      

      总是正确的。相当于

        if(1)
      

      基本上没有效果。 if条件下的代码块将无条件执行。


      编辑:(为更好地理解而详细阐述

      if 语句称为选择语句。简单的if 语句的语法是

       if ( expression ) statement
      

      根据expression的评估,决定是否执行下面的statement(或块)。

      如果是您的代码,

        if(VALUE_MAX)
      

      总是 评估为 TRUE。在这种情况下,使用if 语句是没有意义的。您可以完全摆脱 if 声明。

      【讨论】:

      • @user2931858 ,真正的问题是,为什么你有/需要这样的if?编译器会发出警告,因为 is always 如答案中所述为真。为什么有一个条件是编译器发出警告的原因是没有意义的。
      • @user2931858 你为什么尝试if(1)?我说那是无效。 :-)
      • @user2931858 我更新了我的答案。看看,如果这有帮助。
      【解决方案4】:

      因为 if 条件始终为真,所以它是一个常数......

      int main()
       {
      // if(VALUE_MAX)
      #ifdef VALUE_MAX
       printf("The value is %d",VALUE_MAX);
      #endif
       return 0;
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 2014-05-16
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多