C 使用 = { { '?', '?', '?', '?' 初始化结构} };

C Initialise struct using = { { '?', '?', '?', '?' } };

我想做的是用存储在设备内存的单独部分中的大量十六进制数据初始化结构,最终这些数据将通过其他方式写入内存,但现在我想手动初始化要在我的项目中使用的结构。

我正在处理的项目具有以下代码行(在 Atmel studio 中编译)。

typedef struct configData_t
{
    uint8_t version[4]; // ASCII

    uint8_t numIn;
    uint8_t numOut;
    uint8_t numKey;
    uint8_t numTest;
    uint8_t numAuto;

    controlModuleConfig_t homeConfig;

    inputModuleConfig_t  inConfig  [MAX_IN];
    outputModuleConfig_t outConfig [MAX_OUTPUT];
    keypadModuleConfig_t keyConfig [MAX_KEY];
    notificationConfig_t testConfig [MAX_TEST];
    autoFunctionConfig_t autoConfig [MAX_AUTO];

    precheckConfig_t precheckConfig;
    sleepConfig_t    sleepConfig;

    uint16_t audioCrc16;
    uint16_t configCrc16;
}
configData_t;

const __attribute__((__section__(".application_footer_data"))) 
configData_t theConfigData = { { '?', '?', '?', '?' } };

__attribute__ ((section(".application_footer_data"))) 
const unsigned char configBuffer[28672] = { /* Lots of data e.g. 0x31, 0x30, 0x33,...*/}

我以前从未见过以这种方式初始化的结构,ConfigData 结构是如何用 { { '?', '?', '?', '?' } } 语句初始化的?

configData_t theConfigData = { { '?', '?', '?', '?' } };

version 数据成员的每个元素初始化为 '?' 的 ASCII 值。该结构的其余成员将被初始化为“0”。

外面的一组大括号表示结构的初始值设定项。由于结构的第一个元素是 uint8_t 的数组,第二组大括号初始化该数组的元素。

其余没有显式初始化程序的元素被隐式初始化为全 0 值。