我目前正在研究嵌入式代碼的端口(在飛思卡爾S12),所以GNU和我有一個工會的問題。 我有以下工會工會和內存對齊方面的問題
typedef signed short sint16;
typedef signed long sint32;
typedef union
{
sint32 Akku;
sint16 AkkuHigh;
sint16 AkkuLow;
} akku_type;
,我想進入聯盟的最高2字節。問題是,AkkuHigh和AkkuLow都和Akku有相同的起始地址。它似乎是編譯器特定的。我的問題是: 是否有一個編譯器標誌可以改變工會的行爲? Can atribute((align(2)))help me?
預先感謝您
在內部匿名'struct'中打包'high'和'low'字段。嚴格地說它不是可移植的,但它應該工作。 – 2014-12-03 17:44:13
你爲什麼期望他們有不同的地址? – Borgleader 2014-12-03 17:45:14
@ ParkYoung-Bae:C允許它,它是一個常見的C++擴展。想知道爲什麼委員會沒有陷入並使其合法化... – Deduplicator 2014-12-03 17:50:08