おいちゃんのおぼえがき

仕事のTipsをメモするブログ

R8C/VC2008 ビットフィールドの互換性

2009-02-23 | Win
ビットフィールド内のメンバの型は signed int または unsigned int とすること。省略形として signed / unsigned でも可。
このとき、VC2008 では signed とすると符号ビットがとられる様で、int との比較でイコールにならない。
struct bit {
signed b0:1;
signed b1:1;
signed b2:1;
} bitfield;
....
bitfield.b0 = 1;
if (bitfield.b0 == 1) {
// VS2008 の場合、b0 は比較の際に符号拡張されて-1と評価、
// こちらの分岐には入ってこない
// R8C 用コンパイラではこちらに入ってくる。
}

************
struct bit {
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
} bitfield;
....
このように unsigned にしておいた方が安全
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Word2003 連番の振り方 | トップ | VC2008 定義済みマクロほか、... »

Win」カテゴリの最新記事