ARMCC對匿名結構和聯合的支持
ARMCC
4.6.1. #pragma anon_unions, #pragma no_anon_unions
這些編譯指示啟用和禁用對匿名結構和聯合的支持。
二 對齊
可以在需要進行取消對齊的結構前用
#pargma pack(1)
以該結構后用
#pargma pack()
即可。
可以同時包括多個結構,也可以整個文件都包涵進去。
gcc會自動尋找該定義,并取消默認的對齊方式。這種方法還是比較好的,比在gcc參數中加選項要好,可以不影響系統的庫方式
如下:
struct
{
char a;
int b;
}aa;
用sizeof(aa)值為8,而不是5(32位環(huán)境下)。
這是不是由于GCC的對齊機制引起的?如何disable掉
1.
struct irq_routing_options {
u16 size;
struct irq_info *table;
u16 segment;
} __attribute__((packed));
2.
#pragma pack(1)
struct ... {
...
}...;
#pragma pack()
在MS-VC中的規(guī)則,
pack(1) 表示一字節(jié)對齊。
bx_bird提到的是在Gcc中的規(guī)則,也表示單字節(jié)對齊。
例如使用
struct my_s
{
char a;
int b;
}__attribute__((packed));
struct my_s aa;
就可以使aa變量只占用5個字節(jié)而不是8個字節(jié)。
uint8_t
__attribute((aligned (4)))
三 宏定義鏈接符
#define A(a) TEST_##a
#define A(b) == TEST_b
#define A(1) == TEST_1
評論