重複の可能性:
長さゼロのビットフィールドの実用的な使用
一部の構造にゼロ幅のビットフィールドがあるのはなぜですか?また、なぜそれが必要なのですか?
struct foo {
int a:3;
int b:2;
int :0; // Force alignment to next boundary.
int c:4;
int d:3;
};
int main()
{
int i = 0xFFFF;
struct foo *f = (struct foo *)&i;
printf("a=%d\nb=%d\nc=%d\nd=%d\n", f->a, f->b, f->c, f->d);
return 0;
}
上記のプログラムの出力は次のとおりです。
manav@os-team:~/programs/test$ ./a.out
a=-1
b=-1
c=-8
d=0
これらの値が負である理由と、構造内のこれらの変数のメモリレイアウトについて説明してください。