警告C4127:条件表达式是常量

时间:2015-06-16 06:40:44

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

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

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

  

条件表达式是常量。

如何解决上述警告?

4 个答案:

答案 0 :(得分:3)

因为if条件总是为真,这是一个常数......

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

答案 1 :(得分:2)

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

  if(VALUE_MAX)

被翻译为

 if (300)

始终为TRUE。它相当于

  if(1)

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

编辑:(精心设计以获得更好的理解

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

 if ( expression ) statement

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

如果是您的代码,

  if(VALUE_MAX)

始终评估为TRUE。在这种情况下,使用if语句毫无意义。你可以完全摆脱if陈述。

答案 2 :(得分:2)

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

if(300)

总是如此。

绕过警告的方法:

  1. 将VALUE_MAX更改为变量
  2. int VALUE_MAX = 300;

    1. 将条件更改为ifdef
    2. #ifdef VALUE_MAX printf("The value is %d",VALUE_MAX); #endif

答案 3 :(得分:2)

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

#define VALUE_MAX 300

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

#ifdef#endif之间的代码如果#defineVALUE_MAX宏,则会进行编译。