C6286
경고 C6286: (<non-zero constant> || <expression>)은(는) 언제나 0이 아닌 상수입니다.<expression>은(는) 평가되지 않으므로 의도하지 않은 결과가 발생할 수 있습니다.
이 경고는 테스트 컨텍스트에서 수행되는 논리 OR 연산의 왼쪽에 0이 아닌 상수가 있음을 나타냅니다.이 경우 결과 식은 항상 TRUE로 평가됩니다.또한 식의 오른쪽에 파생 작업이 있기 때문에 이 부분이 손실됩니다.
이 경고는 식의 오른쪽을 신중하게 검사하여 적절한 기능에 필요한 파생 작업이 손실되지 않도록 해야 한다는 것을 나타냅니다.
(!0 || <expression>) 생성은 제어되는 블록을 강제로 실행할 때 많이 사용합니다.
예제
다음 코드에서는 이 경고를 발생시킵니다.
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
if (INPUT_TYPE || test())
{
puts("INPUT_TYPE == 1, expression not evaluated");
// code...
}
else
{
puts("INPUT_TYPE == 0. Call to test() returned 0");
// code...
}
}
다음 코드에서는 가능한 해결책 중 하나인 if 문을 두 부분으로 분리하는 방법을 보여 줍니다.
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
int i;
if (INPUT_TYPE)
{
i = test();
// code...
}
else
{
puts("INPUT_TYPE false");
// code...
}
}