C6240
경고 C6240: (<expression> && <non-zero constant>)은(는) 언제나 <expression>의 결과로 평가됩니다. 비트 AND 연산자를 사용하려고 했습니까?
이 경고는 테스트 컨텍스트에서 수행되는 논리 AND 연산의 오른쪽에 1 이외의 0이 아닌 상수 값이 있음을 나타냅니다. 예를 들어, (n && 3) 식은 n의 부울 값인 (!!n)으로 줄어듭니다.
이 경고는 일반적으로 비트 AND(&) 연산자를 사용해야 하는 비트 마스크를 검사하려고 했음을 나타냅니다. 0이 아닌 상수가 코드 경로를 선택하는 데 사용되기 때문에 1로 평가되는 경우에는 이 경고가 생성되지 않습니다.
예제
다음 코드에서는 이 경고를 발생시킵니다.
#include <stdio.h>
#define INPUT_TYPE 2
void f(int n)
{
if (n && INPUT_TYPE)
{
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 ( (n & INPUT_TYPE) )
{
puts("bitmask true");
}
else
{
puts("bitmak false");
}
}