我有一个结构:
**struct PROCESSING
{
PROCESSOR Byte ;
uint16_t count ;
uint8_t overrange ;
Status status ;
Time timestamp ;
float Field;
float temperature ;
float adc1;
float dac1;
float Field2;
float Temperature;
float adc2 ;
float dac2 ;
};
PTC_STATIC_ASSERT_SIZE(Processing, 45U);**
该结构的实际结构为45U,但是在构建时出现错误:
“将sizeof无效地应用于不完整的类型”
我需要将其打包到恰好45U。
最佳答案
关于结构包装:
为了避免对齐和填充问题,您应该考虑。
重新排列成员。
自己添加填充。
告诉编译器将每个成员的边界更改为1个字节。
例如:
#pragma pack(push)
#pragma pack(1)
struct PROCESSING
{
PROCESSOR Byte ;
uint16_t count ;
uint8_t overrange ;
Status status ;
Time timestamp ;
float Field;
float temperature ;
float adc1;
float dac1;
float Field2;
float Temperature;
float adc2 ;
float dac2 ;
};
#pragma pack(pop)
重新对齐以防止填充。
struct PROCESSING
{
PROCESSOR Byte ; // 1 byte
Status status ; // 1 byte
char __padding[2]; // 2 bytes
uint16_t count ; // 2 byte
uint8_t overrange ; // 1 byte
char _padding; // 1 byte
Time timestamp ; // 8 bytes
float Field;
float temperature ;
float adc1;
float dac1;
float Field2;
float Temperature;
float adc2 ;
float dac2 ;
};
该标准不保证默认情况下不应用填充!
您应该确定一件事。在结构的开始处将没有任何填充,在那之后,您将自己运行-默认情况下-。