Bor*_*ito 17 c attributes typedef data-structures
虽然__attribute__ ((aligned))适用于typedef声明,例如:
typedef struct __attribute__((__aligned__(8))) A {
xxx ip ;
xxx udp ;
xxx ports ;
} table ;
Run Code Online (Sandbox Code Playgroud)
我遇到过声明,说__attribute__ ((__packed__)) 使用typedef 不是这种情况!我正在阅读一些相关的问题,其中一些使用了带有typedef的packed属性,它与我们的代码相符.
现在,在我们的代码中我们定义
typedef struct {
xxx ip ;
xxx udp ;
xxx ports ;
}__attribute__((packed)) table ;
Run Code Online (Sandbox Code Playgroud)
上述声明是否使编译器以静默方式转储打包属性声明?
PS:是的,我本可以验证一下,但我现在的情况有所不同.让我们说假期和智能手机!
use*_*471 15
声明似乎对我好!
它可以通过以下方式之一声明.
#include <stdio.h>
typedef struct __attribute__((packed)) {
char old;
int ip;
int new;
} NCO;
int main(void) {
printf("%d",sizeof(NCO));
}
Run Code Online (Sandbox Code Playgroud)
要么
#include <stdio.h>
typedef struct {
char old;
int ip;
int new;
} __attribute__((packed)) NCO;
int main(void) {
printf("%d",sizeof(NCO));
}
Run Code Online (Sandbox Code Playgroud)
确保__attribute__((packed))关键字和属性规范紧跟结构声明的右大括号(}).如果它处于任何其他位置(例如,在结构实例之后而不是在结构实例之前),则编译器将忽略__attribute__((packed))并发出警告消息.
虽然它给我们的压缩大小9,我觉得这是更好地避免它说这里并尝试旧的办学格局声明风格.
您的声明似乎没问题,但它是编译器依赖的.例如,如果您想让MinGW编译器尊重它,则必须使用-mno-ms-bitfields参数编译程序.如果您未指定此标志,则不会发出警告,但该属性不受尊重!
您在这里合并了两个语句。
首先,您定义一个具有某些属性的结构。然后为它创建一个别名。
当您将 Packed-Property 分配给别名时,该别名使用的已创建数据结构将不会更改。(通常您可以使用“struct bla”和“s_bla”创建变量[由“typedef struct bla {} s_bla”创建]并相互交换这些值。如果可以使用 typedef 更改结构,则这种一致性会破裂。)
所以:该声明将被丢弃。
| 归档时间: |
|
| 查看次数: |
26909 次 |
| 最近记录: |