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
Других решений пока нет …