次の方法で共有


コンパイラの警告 (レベル 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;
   }
}