我有这个联盟/结构
#define HOT_INI_DATA_SIZE 14
typedef union
{
struct
{
uint8_t OVER_LOAD_TEMP_BYTE_LOW;
uint8_t OVER_LOAD_TEMP_BYTE_HI;
uint8_t TEMP_CORRECTION_BYTE_LOW;
uint8_t TEMP_CORRECTION_BYTE_HI;
uint8_t STEAM_CORRECTION_BYTE;
uint8_t LEVEL_SENSOR_CALIBR_DATA[HOT_INI_DATA_SIZE - 5];
} fields;
uint8_t bytes[HOT_INI_DATA_SIZE];
} hot_cal_data_t;我正试图用各种方法使其无效,但没有运气:
const hot_cal_data_t initialisationHotData =
{
{0xD4},
{3},
{0},
{0},
{0},
{16, 16, 16, 16, 16, 16, 16, 16, 16 }
};它抱怨初始化器周围有额外的大括号,但是当我删除它时,错误就会改变。当我尝试更新的C99方法时:
{
{.fields.OVER_LOAD_TEMP_BYTE_LOW = 0xD4},
{.fields.OVER_LOAD_TEMP_BYTE_HI = 0x00},
...
};它告诉我.fields是不被识别的。因此,我必须假设它使用的是只初始化第一个union元素的C98方法。
有人能告诉我正确的语法来初始化它吗?
发布于 2022-06-27 06:48:42
从那以后我就想通了。它使用的是C89标准,需要这个语法来初始化:
const hot_cal_data_t initialisationHotData =
{
{
0xD4,
0x03,
0,
0,
0,
{
16, //.LEVEL_SENSOR_CALIBR_DATA[0]
16, //.LEVEL_SENSOR_CALIBR_DATA[1]
16, //.LEVEL_SENSOR_CALIBR_DATA[2]
16, //.LEVEL_SENSOR_CALIBR_DATA[3]
16, //.LEVEL_SENSOR_CALIBR_DATA[4]
16, //.LEVEL_SENSOR_CALIBR_DATA[5]
16, //.LEVEL_SENSOR_CALIBR_DATA[6]
16, //.LEVEL_SENSOR_CALIBR_DATA[7]
16 //[8]
}
}
};https://stackoverflow.com/questions/72766839
复制相似问题