确保初始化结构中的所有元素
我是一个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
它可能不完全是您所需要的,因为您需要针对您的源手动运行它,但它会警告缺少指定的初始化程序。