3

创建 if 数组以及使用 GCC 时,如何仅初始化结构的一个成员?例如:

#define UNUSED OxFF
typedef struct inputs{
    uint8_t state;
    uint8_t limit;
    uint8_t value;
} INPUT_TYPE;

//create array but just care that all members .state are UNUSED
INPUT_TYPE Node1[5] ={ Node1.state = UNUSED }

初始化是指数组而不是结构的成员。当然可以使用循环,但我不想在运行时使用“input_init”函数进行初始化。

4

4 回答 4

4

初始化某些成员的语法是 C99 特性。你很接近,试试这个:

#define UNUSED OxFF
typedef struct inputs{
    uint8_t state;
    uint8_t limit;
    uint8_t value;
} INPUT_TYPE;

INPUT_TYPE Node1[5] = {
    {.state = UNUSED},
    {.state = UNUSED},
    {.state = UNUSED},
    {.state = UNUSED},
    {.state = UNUSED}
};

请参阅:如何根据 C 编程语言标准初始化结构

编辑:

由于我不够清楚,我编辑了答案。

数组初始化如何工作,在这里得到了回答:如何将数组的所有成员初始化为相同的值?

于 2013-02-03T09:04:51.417 回答
4

我终于在http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Designated-Inits.html#Designated-Inits找到了它, 它结合了两种情况。

INPUT_TYPE Node1[5] = { [0 ... 4].state = UNUSED }它在大型阵列中很有用。

于 2013-02-05T06:32:19.640 回答
2

由于UNUSED是一个非零值,因此如果需要,您需要为数组的每个元素指定初始化程序:

INPUT_TYPE Node1[5] = { 
    {.state = UNUSED}, 
    {.state = UNUSED}, 
    {.state = UNUSED}, 
    {.state = UNUSED}, 
    {.state = UNUSED}
};
于 2013-02-03T09:19:40.773 回答
0

为什么不使用构造函数进行初始化:

#define UNUSED OxFF
typedef struct inputs{
    uint8_t state;
    uint8_t limit;
    uint8_t value;

   inputs(){state = UNUSED, limit, value;};

} INPUT_TYPE;

?

于 2013-02-03T09:13:55.417 回答