【发布时间】:2021-04-13 07:21:25
【问题描述】:
我使用structs 来存储不同的配置,我想强制初始化所有成员。我的意思是不要让编译器这样做(归零),而是让程序员明确地这样做。
编译器错误最好,但警告也可以。我正在使用 Segger clang 作为手臂。
关于如何实现这一点的任何提示?
由于我想使用指定的初始化器,-Wmissing-field-initializers 在这种情况下不起作用。见:Docs
typedef struct{
int option_1,
int option_2,
....
} config_t;
// this is fine
const config_t config_1 = {
.option_1 = 10,
.option_2 = 20,
};
// this should generate a warning
const config_t config_1 = {
.option_2 = 20,
};
【问题讨论】:
-
-Wmissing-field-initializers有帮助吗? -
@EugeneSh。 nops,来自documentation:此选项不会对指定的初始化程序发出警告,因此以下修改不会触发警告:
struct s { int f, g, h; }; struct s x = { .f = 3, .g = 4 };在这种情况下会发出警告:const config_t config_1 = {20}; -
在
// this should generate a warning中你的意思是因为你没有明确地初始化成员option_1?即使是局部变量,它也会隐式初始化为0。 -
就像你说的@WeatherVane,我没有明确初始化每个成员。我想对此提出警告。
-
@koder 因为它想确保如果有人创建了新配置,他们不会错过某些字段。或者,如果将字段添加到结构中,则必须将它们添加到所有配置中。
标签: c struct initialization