Visual C++ の概念 : C/C++ プログラムのビルド
コンパイラの警告 (レベル 1) C4807
エラー メッセージ
'operation' : 'type' 型と符号付きビット フィールド型 'type' の混用は安全ではありません。1 ビットの符号付きビット フィールドと bool 変数を比較すると、この警告が生成されます。1 ビットの符号付きビット フィールドが保持できる値は -1 または 0 だけです。したがって、bool 型との比較は危険です。bool 型と 1 ビットの符号なしビット フィールドを混在しても警告は生成されません。この場合のビット フィールドは、bool 型と同じように、値 0 または 1 だけを保持するためです。
使用例
次の例では 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;
}
}