e45.c

bit fieldにはunsignedを付けよう

/*###13 [cc] 警告: BBB:e45: このbitfield幅では比較は常に偽です%%%*/

struct  {
        char    a:1 ;
        char    b:4 ;
} R	;
R.a = 1 ;
R.b = 0xF ;
if(R.a == 1)    K&R-Cではここに来る ;
else            ANSI-Cではここに来る ;
if(R.b == 0xF)  K&R-Cではここに来る ;
else            ANSI-Cではここに来る ;


解説 unsigned をつけないビットフィールドが、 signed なのか unsigned なのかはコンパイラに依存します 詳細な説明は、 プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「6.9 ビット・フィールド」Page181 を参照して下さい。