Oracle Solaris Studio 12.2:C++ 用户指南

检查位字段包装的更改

可使用 -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