【发布时间】:2014-12-03 17:41:50
【问题描述】:
我目前正在开发一个嵌入式代码端口(在飞思卡尔 S12 上),所以 GNU 和我遇到了工会问题。 我有以下工会
typedef signed short sint16;
typedef signed long sint32;
typedef union
{
sint32 Akku;
sint16 AkkuHigh;
sint16 AkkuLow;
} akku_type;
我想访问联合的最高 2 个字节。问题是,AkkuHigh 和 AkkuLow 的起始地址都与 Akku 相同。它似乎是特定于编译器的。我的问题是: 是否存在改变联合行为的编译器标志? 属性((align (2))) 可以帮助我吗?
提前谢谢你
【问题讨论】:
-
将
high和low字段打包到一个内部匿名struct中。严格来说它不是便携式的,但它应该可以工作。 -
你为什么期望他们有不同的地址?
-
@ParkYoung-Bae:C 允许它,它是一个常见的 C++ 扩展。想知道为什么委员会没有屈服并使其合法化......
-
@ParkYoung-Bae:在结构的开始处填充?你从哪里得到那个打破标准的编译器? (并且在成员 之后不必要的填充只是很奇怪,而且还没有在野外发现。)