使用GCC中的类打包属性

时间:2018-06-08 15:30:18

标签: c++ class gcc attributes packed

GCC docs says

  

您只能在定义中指定packed属性   一个枚举,结构或联合,而不是一个不同的typedef   定义枚举类型,结构或联合。

这是否意味着我不能将这个属性应用于类?

2 个答案:

答案 0 :(得分:1)

我在GCC文档中找不到答案,但通过以下实验,您似乎可以。

#include <iostream>


struct UnPackedStruct {
    unsigned char a;
    int b;
};

struct __attribute__ ((__packed__)) PackedStruct {
    unsigned char a;
    int b;
};

class __attribute__ ((__packed__)) PackedClass{
    unsigned char a;
    int b;
};

int main()
{
    std::cerr << "sizeof( UnPackedStruct ): " << sizeof(UnPackedStruct)
            << ", sizeof( PackedStruct ): " << sizeof(PackedStruct)
            << ", sizeof( PackedClass): " << sizeof(PackedClass)
            << "\n";

    return 0;
}

输出:

sizeof( UnPackedStruct ): 8, sizeof( PackedStruct ): 5, sizeof( PackedClass): 5

Try it with online compiler

答案 1 :(得分:1)

documentation for GCC 9.x 已更新以在该列表中包含“类”:

<块引用>

您只能在枚举、结构、联合或类的定义上指定打包属性,而不能在未定义枚举类型、结构、联合或类的 typedef 上指定。

因此,您当然可以将该属性应用于类,至少从 GCC 9.x 开始,但也可能在早期版本中也是如此。