경고 C6239
('non-zero constant' && 'expression')은 항상 'expression'의 결과로 계산됩니다. 비트 및 연산자를 사용하시겠습니까?
이 경고는 테스트 컨텍스트에서 발생하는 논리 AND 작업의 왼쪽에서 0이 아닌 상수 값이 검색되었음을 나타냅니다. 예를 들어 식 ( 2 && n )
은 부울 값n
인 으로 축소(!!n)
됩니다.
이 경고는 일반적으로 비트 AND(&
) 연산자를 사용해야 하는 비트 마스크를 검사하려는 시도를 나타내며, 0이 아닌 상수가 코드 경로를 선택적으로 선택하는 데 사용되었기 때문에 1로 평가되는 경우 생성되지 않습니다.
코드 분석 이름: NONZEROLOGICALAND
다음 코드는 이 경고를 생성합니다.
#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
if(INPUT_TYPE && n) // warning C6239
{
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");
}
}