Share via


C6239

경고 C6239: (<non-zero constant> && <expression>)은(는) 언제나 <expression>의 결과로 평가됩니다. 비트 AND 연산자를 사용하려고 했습니까?

이 경고는 테스트 컨텍스트에서 수행되는 논리 AND 연산의 왼쪽에 1 이외의 0이 아닌 상수 값이 있음을 나타냅니다. 예를 들어, ( 2 && n ) 식은 n의 부울 값인 (!!n)으로 줄어듭니다.

이 경고는 일반적으로 비트 AND(&) 연산자를 사용해야 하는 비트 마스크 검사를 시도했음을 나타내며, 0이 아닌 상수가 코드 경로 선택에 사용되기 때문에 1로 평가되는 경우에는 생성되지 않습니다.

예제

다음 코드에서는 이 경고를 발생시킵니다.

#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
   if(INPUT_TYPE && n) // warning 6239
   {
      puts("boolean value of n is true");
   }
   else
   {
      puts("boolean value of n is false");
   }
}

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

#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
   if( ( INPUT_TYPE & n ) )
   {
      puts("bitmask true");
   }
   else
   {
      puts("bitmask false");
   }
}

참고 항목

참조

& 연산자(C# 참조)