尽管__attribute__ ((aligned))可以很好地处理ty胡枝子f声明,如:
typedef struct __attribute__((__aligned__(8))) A {
xxx ip ;
xxx udp ;
xxx ports ;
} table ;我遇到过这样的声明,其中说,__attribute__ ((__packed__))和this的情况并非如此!我正在研究一些相关的问题,其中一些问题已经使用了类型胡枝子的填充属性,这与我们的代码是一致的。
现在,在我们的代码中我们定义
typedef struct {
xxx ip ;
xxx udp ;
xxx ports ;
}__attribute__((packed)) table ;上面的声明是否让编译器悄悄地转储打包的属性声明?
PS :是的,我本可以核实的,但是我的情况与.Lets所说的假期和智能手机的情况不同!
发布于 2012-08-31 14:32:20
声明看起来没问题。然而,尝试坚持以下之一,以避免沉默的属性丢弃。
#include <stdio.h>
typedef struct __attribute__((packed)) {
char old;
int ip;
int new;
} NCO;
int main(void)
{
printf("%zu", sizeof(NCO));
} 或
#include <stdio.h>
typedef struct {
char old;
int ip;
int new;
} __attribute__((packed))
int main(void)
{
printf("%zu", sizeof(NCO));
} 确保__attribute__((packed))关键字和属性规范立即遵循结构声明的右大括号(})。如果它处于任何其他位置(例如,在结构实例之后而不是结构实例之前),编译器将忽略__attribute__((packed))并发出警告消息。
虽然它给了我们的包装尺寸9,我认为最好避免它的声明这里,并尝试旧的学校结构声明风格。
发布于 2016-05-12 10:51:31
你的声明似乎没问题,但它取决于编译器。例如,如果要使-mno-ms-bitfields编译器尊重它,则必须使用MinGW参数编译程序。如果不指定此标志,则不会发出警告,但属性不会被授予!
发布于 2012-08-31 10:58:09
你在这里合并了两个陈述。
首先,定义具有特定属性的结构。然后为它创建一个别名。
当您将打包属性分配给别名时,此别名使用的已经创建的数据结构不会被更改。(通常,您可以使用由"typedef struct bla {} s_bla“创建的"struct”和"s_bla“来创建变量,并相互交换这些值。如果可以使用ty胡枝子f来更改结构,这种一致性就会中断。)
所以:声明将被丢弃。
https://stackoverflow.com/questions/12213866
复制相似问题