我有一个问题,最好用例子来解释。请考虑以下代码:
unsigned char a,
b;
这显然定义了两个类型的变量unsigned char
。
如果我想让变量与 16 字节边界对齐,我的第一个天真的方法是:
__attribute__((aligned(16))) unsigned char a,
b;
我的问题是我不确定编译器是否总是适用__attribute__((aligned(16)))
于这两个变量。
我特别担心,因为以下所有代码都在没有错误或警告的情况下编译:
unsigned char a __attribute__((aligned(16)));
unsigned char __attribute__((aligned(16))) b;
__attribute__((aligned(16))) unsigned char c;
根据我的研究,__attribute__((aligned(16)))
对上面三行中的各个变量执行相同的操作。但是这种弱语法对于 C 来说是不寻常的,所以我有点不信任。
回到我原来的问题,我知道我可以很容易地避免不确定性,比如
__attribute__((aligned(16))) unsigned char a;
__attribute__((aligned(16))) unsigned char b;
也许
unsigned char a __attribute__((aligned(16))),
b __attribute__((aligned(16)));
但是我真的很想知道在声明多个都应该具有该属性的变量时添加一次__attribute__
装饰是否足够。
当然,这个问题涉及所有属性(不仅仅是aligned
属性)。
作为一个额外的问题,将这些属性不仅添加到变量定义中,而且添加到变量声明中(例如在头文件中)是否被认为是一种好的风格?