長いビットフィールドに対する警告を生成するには、-xport64 を使用します。こういったビットフィールドが存在していると、ビットフィールドの配置が大きく変わることがあります。ビットフィールド配置方式に関する前提事項に依存しているプログラムを、64 ビットアーキテクチャーに問題なく移植できるためには、あらかじめ確認作業を行う必要があります。
example% cat test4.c
#include <stdio.h>
union U {
struct S {
unsigned long b1:20;
unsigned long b2:20;
} s;
long buf[2];
} u;
int main() {
u.s.b1 = 0XFFFFF;
u.s.b2 = 0XFFFFF;
printf(" u.buf[0] = %lx u.buf[1] = %lx\n", u.buf[0], u.buf[1]);
return 0;
}
example%
|
V9 における出力
example% u.buf[0] = ffffffffff000000 u.buf[1] = 0 |