【发布时间】:2019-05-06 01:30:24
【问题描述】:
我正在尝试了解如何为包含位域的联合分配内存。
我查看了与此类似的帖子和问题,并且了解到大多数情况下都涉及填充,具体取决于在结构中声明成员的顺序。
1.
union Example
{ int i:2;
int j:9;
};
int main(void)
{
union Example ex;
ex.j=15;
printf("%d",ex.i);
}
输出:-1
2.
union Example
{ unsigned int i:2;
int j:9;
};
int main(void)
{
union Example ex;
ex.j=15;
printf("%d",ex.i);
}
输出:3
有人可以解释一下输出吗?它只是这种情况的标准输出吗? 我在 ubuntu 中使用内置的 gcc 编译器
【问题讨论】:
-
先从
union Example { unsigned u; int i:2; int j:9; };和union Example ex = {0};开始初始化所有,然后试试你的测试。 -
没有标准输出,由编译器决定
-
这听起来可能有点愤世嫉俗,但它是基于跨多个编译器环境的这种机制的经验的有用建议。 “我正在尝试了解如何为包含位域的联合分配内存。”,但我建议不要这样做。编译器被允许并且确实以不同的方式处理这个问题,如果你了解编译器是如何做到的,你就会开始做出错误的假设。
-
我见过的所有使用位域的情况都是使用结构而不是联合。你确定你应该在这种情况下查看工会吗?
-
是的,是工会
标签: c structure unions bit-fields