- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
尽管 __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/
此代码适用于 Microchip 的 PIC32MX 微处理器。他们的编译器本质上是 GCC 3.4。 我倾向于使用 GCC 的 __packed__ attribute将位域打包到一个 union
我从 here 读到关于 __packed__ 的内容而且,我知道当 __packed__ 用于 struct 或 union 时,这意味着成员变量的放置方式可以最小化存储 struct 或 unio
__attribute__ ((__packed__)) 对嵌套结构有什么影响?例如: // C version struct __attribute__ ((__packed__)) { s
是否有 __attribute__ ((__packed__)) 的可移植等价物 (我所说的便携性是指在 PC、Android 和 iPhone 上工作,无论架构如何) 最佳答案 根据定义,__att
gcc (GCC) 4.7.0 c89 x86_64 你好, 我想知道在结构上使用 __attribute__ ((__packed__)) 是否值得。在我看来,有了它,结构的尺寸会更小。通过我在下面
尽管 __attribute__ ((aligned)) 与 typedef 声明配合得很好,例如: typedef struct __attribute__((__aligned__(8))) A
目的 我正在用 C(特别是 gnu89)编写一个网络程序,我想通过将某个 struct X 重新解释为大字节数组(又名 char),通过网络发送字节,并在另一端将它们重新解释为 struct X。为此
当我编译以下代码时: #include #include struct TupleHeader { timeval tuple_stime; // 34..37 }__attrib
我们知道_attribute__((__packed__))意味着(很可能)“不插入任何填充以使事情更快”,也可能意味着“不插入任何对齐以保持对齐”。 struct structure2 { i
我正在将在 Linux 上完美运行的代码移植到 Windows Visual C++。我在 Linux 中有这段代码: struct exif_desc { uint16_t tag;
对于某些编译器,结构有一个包装说明符,例如:: RealView ARM compiler has "__packed"Gnu C Compiler has "__attribute__ ((__pa
在我询问之后a similar question ,我进一步尝试在打包结构中使用更简单的成员变量,但我得到了同样的错误。我很困惑! 编译如下代码时: struct TupleHeader { in
具体在 GCC 上(即用 GCC 编译两者),以下两者的工作方式有何不同? struct foo1 { char a; int b; } __attribute__((__packed
我是一名优秀的程序员,十分优秀!