我目前正在研究一个嵌入代码的端口(在Freescale S12上),所以GNU和我与工会有一个问题。
我有以下工会
typedef signed short sint16;
typedef signed long sint32;
typedef union
{
sint32 Akku;
sint16 AkkuHigh;
sint16 AkkuLow;
} akku_type;
我想访问联合的最高2字节。问题是,AkkuHigh和AkkuLow的起始地址都与Akku相同。它似乎是特定于编译器的。我的问题是:
是否存在改变联合行为的编译器标志?
阿蒂布特能帮我吗?
提前谢谢你
最佳答案
是的,所有的Akku
,AkkuHigh
,AkkuLow
都有相同的地址。这就是unions在C中的工作方式。从外观上看,您打算用一个32位成员和一个由两个16位成员组成的结构的成员组成联合。你写的不是实现它的方法。请改为:
typedef union
{
sint32 Akku;
struct s {
sint16 AkkuHigh;
sint16 AkkuLow;
} representation;
} akku_type;