컴파일러 경고(수준 1) C4807
'operation': 'type' 형식과 'type' 형식의 부호 있는 비트 필드를 함께 사용하는 것은 안전하지 않습니다.
이 경고는 1비트 부호 있는 비트 필드를 bool
변수와 비교할 때 생성됩니다. 1비트 부호 있는 비트 필드에는 -1 또는 0 값만 포함할 수 있으므로 bool
과 비교하는 것은 위험합니다. 1비트 부호 없는 비트 필드는 bool
과 동일하며 0 또는 1만 포함할 수 있으므로 bool
과 함께 사용해도 경고가 생성되지 않습니다.
예시
다음 샘플에서는 C4807을 생성합니다.
// C4807.cpp
// compile with: /W1
typedef struct bitfield {
signed mybit : 1;
} mybitfield;
int main() {
mybitfield bf;
bool b = true;
// try..
// int b = true;
bf.mybit = -1;
if (b == bf.mybit) { // C4807
b = false;
}
}