2

GCC 文档

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

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

4

2 回答 2

2

我无法在 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

用在线编译器试试

于 2018-06-08T19:16:47.237 回答
1

GCC 9.x的文档已更新为在该列表中包含“类”:

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

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

于 2021-01-21T11:20:58.993 回答