gpt4 book ai didi

c - __attribute__ ((__packed__)) 在 typedef 声明中被忽略了吗?

转载 作者:太空狗 更新时间:2023-10-29 16:30:53 32 4
gpt4 key购买 nike

尽管 __attribute__ ((aligned)) 与 typedef 声明配合得很好,例如:

typedef struct __attribute__((__aligned__(8))) A {

xxx ip ;
xxx udp ;
xxx ports ;
} table ;

我遇到过声明说 __attribute__ ((__packed__)) 和 typedef 不是这种情况!我正在研究一些相关问题,其中一些问题使用了 packed 属性和 typedef,这与我们的代码相符。

现在,在我们的代码中我们定义

typedef struct {
xxx ip ;
xxx udp ;
xxx ports ;
}__attribute__((packed)) table ;

上面的声明是否让编译器默默地转储打包的属性声明?

PS:是的,我本可以验证它,但我目前的情况不同。比方说假期和智能手机!

最佳答案

声明看起来没问题。但是,请尝试遵守以下其中一项以避免静默属性丢弃。

#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 ,但我认为最好避免它,如所述 here并尝试旧学校结构声明样式。

关于c - __attribute__ ((__packed__)) 在 typedef 声明中被忽略了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12213866/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com