C中结构的默认初始化
Default initialization for a struct in C
我想在纯 C 中做这样的事情:
struct data_msg {
uint8_t id = 25;
uint8_t data1;
uint32_t data2;
}
我需要将 id 默认设置为 25,这样当我创建结构的实例时,id 已经设置为 25,如下所示:
struct data_msg tmp_msg;
printf("ID: %d", tmp_msg.id); // outputs ID: 25
有没有办法在 C 中做到这一点?我知道它可以在 C++ 中完成,但还没有想出在 C 中的方法。
在 C 中这样做会抛出错误:
struct data_msg { uint8_t id = 25; }
C 标准没有为此提供任何功能。您可以在定义对象时设置初始值,但在定义类型时没有设置默认值或初始值的规定。
不幸的是,你不能,但如果你经常这样做,你可以创建一个用于初始化的常量:
struct data_msg {
uint8_t id;
uint8_t data1;
uint32_t data2;
};
const struct data_msg dm_init = {.id = 25};
int main(void) {
struct data_msg var = dm_init; // var.id is now 25, data1 = 0, data2 = 0
// ...
}
我想在纯 C 中做这样的事情:
struct data_msg {
uint8_t id = 25;
uint8_t data1;
uint32_t data2;
}
我需要将 id 默认设置为 25,这样当我创建结构的实例时,id 已经设置为 25,如下所示:
struct data_msg tmp_msg;
printf("ID: %d", tmp_msg.id); // outputs ID: 25
有没有办法在 C 中做到这一点?我知道它可以在 C++ 中完成,但还没有想出在 C 中的方法。
在 C 中这样做会抛出错误:
struct data_msg { uint8_t id = 25; }
C 标准没有为此提供任何功能。您可以在定义对象时设置初始值,但在定义类型时没有设置默认值或初始值的规定。
不幸的是,你不能,但如果你经常这样做,你可以创建一个用于初始化的常量:
struct data_msg {
uint8_t id;
uint8_t data1;
uint32_t data2;
};
const struct data_msg dm_init = {.id = 25};
int main(void) {
struct data_msg var = dm_init; // var.id is now 25, data1 = 0, data2 = 0
// ...
}