显示页面过去修订反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 #GNUC compiler attribute GNU C的`__attribute__`机制可以设置函数属性, 变量属性和类型属性. 语法格式: `__attribute__((attribute list))` attribute前后都有两个下划线,并紧跟一对圆扩号。 放置于声明的尾部, ";" 之前。 # packed attribute `__attribute__((packed))` 让编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。 ## 不加packed属性修饰 ``` enum animal_type_e { ANIMAL_TYPE_CAT = 0, ANIMAL_TYPE_DOG, ANIMAL_TYPE_TIGGER, ANIMAL_TYPE_WOLF, ANIMAL_TYPE_MAX = 0xFF, }; int main(int argc, char *argv[]) { printf("sizeof(enum animal_type_e) = %zu\n", sizeof(enum animal_type_e)); return 0; } 执行结果 $ ./packed sizeof(enum animal_type_e) = 4 enum animal_type_e类型的大小为4,和int类型的大小相同 ``` ## 使用packed属性限制枚举类型的size ``` enum animal_type_e { ANIMAL_TYPE_CAT = 0, ANIMAL_TYPE_DOG, ANIMAL_TYPE_TIGGER, ANIMAL_TYPE_WOLF, ANIMAL_TYPE_MAX = 0xFF, } __attribute__((packed)); ``` enum animal_type_e的size是1 byte 如果修改ANIMAL_TYPE_MAX为0xFFFF, 那么enum animal_type_e的size为2 bytes 如果修改ANIMAL_TYPE_MAX为0xFFFFFFFF, 那么enum animal_type_e的size为4 bytes 如果修改ANIMAL_TYPE_MAX为0xFFFFFF, enum animal_type_e的size也为4 bytes, 因为必须按照2的幂的大小进行对齐。 blog/programming/linux_gnuc_attribute.txt 最后更改: 2025/02/02 23:10由 127.0.0.1