C6286

更新:2007 年 11 月

警告 C6286:(<non-zero constant> || <expression>)始终为非零常数。<expression> 将不被计算且可能有副作用

此警告意味着在测试上下文中出现的逻辑或运算的左侧检测到非零常数。结果表达式的计算结果总是为 TRUE。另外,该表达式的右侧似乎具有的副作用将会丢失。

此警告意味着您可能需要仔细检查该表达式的右侧,以确保为获得正确功能所需的任何副作用都不会丢失。

(!0 || <expression>) 结构通常用于强制执行受控制的块。

示例

下面的代码生成此警告:

#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1 

int test();

void f()
{
  if (INPUT_TYPE || test()) 
  {
    puts("INPUT_TYPE == 1, expression not evaluated");
    // code...
  }
  else
  {
    puts("INPUT_TYPE == 0. Call to test() returned 0");
    // code...
  }
}

下面的代码通过将 if 语句分成两个单独的部分来演示一种可能的解决方案:

#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1 

int test();

void f()
{
  int i;
  if (INPUT_TYPE) 
  {
    i = test();
    // code...
  }
  else
  {
    puts("INPUT_TYPE false");
    // code...
  }
}

请参见

参考

Logical OR Operator: ||

编译器警告(等级 1)C4127