我是一个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 :(得分:4)
使用指定初始值设定项时,缺少的成员将初始化为0
。即使对象具有自动存储持续时间,也是如此。据我所知,没有gcc
选项可以警告当您使用指定初始值设定项时未显式初始化的成员。
答案 1 :(得分:2)
您可以使用-Werror将警告转换为错误,或者使用-Werror = missing-field-initializers,仅将字段初始值设定项警告转为错误。
此处有更多信息:GCC Warning Options
编辑: 我刚刚使用splint运行了测试而没有其他选项,这些选项提供了以下输出:
main.c:13:17: Initializer block for s2 has 1 field, but struct s has 2 fields:
<error>
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
由于你需要针对你的源手动运行它,但它可能不完全是你所追求的,但它会警告缺少指定的初始化器。