结构数组中的gcc成员初始化

时间:2013-02-03 08:49:37

标签: gcc embedded

在创建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 个答案:

答案 0 :(得分:3)

初始化某些成员的语法是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}
};

请参阅:How to initialize a struct in accordance with C programming language standards

编辑:

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

数组初始化的工作原理如下:How to initialize all members of an array to the same value?

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

我最后在http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Designated-Inits.html#Designated-Inits中找到了它,它是两个案例的组合。

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

答案 3 :(得分:0)

为什么不使用init的构造函数:

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

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

} INPUT_TYPE;