C6236

업데이트: 2007년 11월

C6236

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

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

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

예제

다음 코드에서는 INPUT_TYPE이 1보다 크기 때문에 n++가 평가되지 않습니다.

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   // side effect: n not incremented
   if( n++ || INPUT_TYPE ) //warning 6236 issued
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

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

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if( n++ & INPUT_TYPE )
   {
      puts( "Bitwise-AND comparison is true" );
   }
   else
   {
      puts( "Bitwise-AND comparison is false" );
   }
}

참고 항목

참조

& 연산자(C# 참조)