GCC 文档说:
您只能在枚举、结构或联合的定义上指定打包属性属性,而不是在未定义枚举类型、结构或联合的 typedef 上。
这是否意味着我不能将此属性应用于类?
我无法在 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
GCC 9.x的文档已更新为在该列表中包含“类”:
您只能在枚举、结构、联合或类的定义上指定打包属性,而不是在未定义枚举类型、结构、联合或类的 typedef 上。
因此,您当然可以将该属性应用于类,至少从 GCC 9.x 开始,但也可能在早期版本中。