誰かがアサーションが失敗する理由を教えてもらえますか?
参考:64ビットLinuxマシンでgcc4.6.1を使用してこれをコンパイルしています。
typedef union cpu_register {
uint64 _64;
uint32 _32;
uint16 _16;
uint16 _8l : 8,
_8h : 8;
} __attribute__((packed)) cpu_register;
int main()
{
cpu_register reg;
reg._64 = 1;
assert(reg._8h != reg._8l);
return 0;
}
reg._8hに期待される値は0ですが、reg._8l(== 1)の値と同じです。
この問題を解決するための解決策がありましたが、何が問題なのか知りたいですか?