确保初始化结构中的所有元素

我是一个C源代码,我想确保我的结构的所有元素都很好地启动。 警告Wmissing-field-initializers很容易。 但我也希望能够使用指定的initilizer初始化我的元素。

例如:

struct s { int a; int b; }; struct s s1 = { .a = 1, .b = 2 }; struct s s2 = { .a = 1 }; struct s s3 = { 1, 2 }; struct s s4 = { 1 }; 

我们试着编译一下:

 $ gcc -Wmissing-field-initializers -c struct_init.c struct_init.c:9:8: warning: missing initializer struct_init.c:9:8: warning: (near initialization for 's4.b') 

我想编译也失败了s2启动。 我更喜欢指定的初始化,因为它有助于源代码读取。

使用指定初始值设定项时,缺少的成员初始化为0 。 即使对象具有自动存储持续时间,也是如此。 据我所知,没有gcc选项可以警告使用指定初始值设定项时明确初始化的成员。

您可以使用-Werror将警告转换为错误,或者使用-Werror = missing-field-initializers,仅将字段初始化程序警告转换为错误。

更多信息: GCC警告选项

编辑:我刚刚使用splint运行测试而没有其他选项,它提供了以下输出:

 main.c:13:17: Initializer block for s2 has 1 field, but struct s has 2 fields:  Initializer does not set every field in the structure. (Use -fullinitblock to inhibit warning) main.c:15:17: Initializer block for s4 has 1 field, but struct s has 2 fields: 1 

它可能不完全是您所需要的,因为您需要针对您的源手动运行它,但它会警告缺少指定的初始化程序。