【发布时间】:2014-11-06 13:05:48
【问题描述】:
我有时会使用联合以不同方式访问相同类型的数据。例如这个联合:
typedef union {
int64 word;
int32 array[2];
struct {
field4:16;
field3:16;
field2:28;
field1:4;
} bit;
} my_type;
此解决方案是否一致正确,我使用的名称(单词、数组、位)是否有任何标准?
这个解决方案的缺点是我得到了繁琐的符号:
my_type data;
data.bit.field1 = 0xA;
for(i=0;i<sizeof(my_t);i++)
data.array[i]++;
【问题讨论】:
-
name _t 已保留,请勿使用。
-
@2501 它是由什么保留的?我怎么知道它是一个类型而不是一个变量?
-
@coin POSIX 标准为自己保留所有以 _t 结尾的类型名称。这使得 POSIX 可以在不破坏现有代码的情况下引入新类型(名称以 _t 结尾)。
-
注意:大于
int/unsigned宽度的字段宽度不是 100% 可移植的。由于int必须至少为16 位,28可能是一个问题。
标签: c data-structures struct