コンパイラの警告 (レベル 1) C4807 (C++)

ビューの切り替え:
スクリプトなし
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;
   }
}