一 对匿名结构和联合的支撑
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位环境下)。
这是不是因为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中的规矩,
pack(1) 表明一字节对齐。
bx_bird说到的是在Gcc中的规矩,也表明单字节对齐。
例如运用
struct my_s
{
char a;
int b;
}__attribute__((packed));
struct my_s aa;
就能够使aa变量只占用5个字节而不是8个字节。
uint8_t
__attribute((aligned (4)))
三 宏界说链接符
#define A(a) TEST_##a
#define A(b) == TEST_b
#define A(1) == TEST_1