在创建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”函数进行初始化。
答案 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;