Share via


C6235

경고 C6235: (<non-zero constant> || <expression>)은(는) 언제나 0이 아닌 상수입니다.

이 경고는 테스트 컨텍스트에서 수행되는 논리 OR 연산의 왼쪽에 1 이외의 0이 아닌 상수 값이 있음을 나타냅니다. 결과 식이 언제나 true로 평가되기 때문에 논리 OR 연산의 오른쪽이 평가되지 않습니다. 이것을 "단락(short-circuit) 계산"이라고 합니다.

1 이외의 0이 아닌 상수 값은 비트 AND 연산자(&)를 사용하려고 했음을 나타냅니다. 선택적으로 코드 경로를 활성화하는 데 사용되기 때문에 0이 아닌 상수가 1이 되는 관용적인 경우에는 이 경고가 생성되지 않습니다. 하지만 1+0과 같이 0이 아닌 상수가 1로 평가되는 경우에는 이 경고가 생성됩니다.

예제

다음 코드에서는 INPUT_TYPE이 2이기 때문에 이 경고가 생성됩니다.

#define INPUT_TYPE 2
void f(int n)
{
   if(INPUT_TYPE || n) //warning 6235 issued
   {
      puts("Always gets here");
   }
   else
   {
      puts("Never gets here");
   }
}

다음 코드에서는 비트 AND(&) 연산자를 사용하여 이 경고를 해결합니다.

#define INPUT_TYPE 2
void f(int n)
{
   if((INPUT_TYPE & n) == 2)
   {
      puts("bitwise-AND comparison true");
   }
   else
   {
      puts("bitwise-AND comparison false");
   }
}

참고 항목

참조

C Logical Operators