Share via


C6286

업데이트: 2007년 11월

C6286

경고 C6286: (<non-zero constant> || <expression>)은(는) 언제나 0이 아닌 상수입니다. <expression>은(는) 평가되지 않으므로 의도하지 않은 결과가 발생할 수 있습니다.

이 경고는 테스트 컨텍스트에서 수행되는 논리 OR 연산의 왼쪽에 0이 아닌 상수가 있음을 나타냅니다. 이 경우 결과 식은 항상 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: ||

컴파일러 경고(수준 4) C4127