首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何初始化C联合结构成员(使用C89标准XC32编译器2.5)?

如何初始化C联合结构成员(使用C89标准XC32编译器2.5)?
EN

Stack Overflow用户
提问于 2022-06-27 03:52:45
回答 1查看 44关注 0票数 0

我有这个联盟/结构

代码语言:javascript
复制
#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;

我正试图用各种方法使其无效,但没有运气:

代码语言:javascript
复制
    const hot_cal_data_t initialisationHotData =
{
    {0xD4},
    {3},
    {0},
    {0},
    {0},
    {16, 16, 16, 16, 16, 16, 16, 16, 16 }
};

它抱怨初始化器周围有额外的大括号,但是当我删除它时,错误就会改变。当我尝试更新的C99方法时:

代码语言:javascript
复制
{ 
    {.fields.OVER_LOAD_TEMP_BYTE_LOW = 0xD4}, 
    {.fields.OVER_LOAD_TEMP_BYTE_HI = 0x00},
    ... 
};

它告诉我.fields是不被识别的。因此,我必须假设它使用的是只初始化第一个union元素的C98方法。

有人能告诉我正确的语法来初始化它吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-27 06:48:42

从那以后我就想通了。它使用的是C89标准,需要这个语法来初始化:

代码语言:javascript
复制
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]
        }
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72766839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档