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

时间:2013-01-02 13:29:43

标签: c gcc

我是一个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启动。我更喜欢指定的初始化,因为它有助于源代码阅读。

2 个答案:

答案 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

由于你需要针对你的源手动运行它,但它可能不完全是你所追求的,但它会警告缺少指定的初始化器。