【发布时间】:2013-04-23 13:27:19
【问题描述】:
我有一个这样的枚举:
enum {
ID_FOO = 0,
ID_BAR,
ID_BAZ
}
还有一个使用指定初始化器(如 hat)的常量数组:
char* arr[] = {
[ID_FOO] = "foo stuff",
[ID_BAR] = "bar stuff",
[ID_BAZ] = "baz stuff",
0
}
现在当我向枚举添加一个值时,例如在ID_FOO 之后但忘记将其添加到数组中,那么我会在数组中得到一个 uninitialized 空初始化的“洞”。有什么办法可以防止这种情况发生,或者至少得到编译器的警告?
非便携式 GCC-only 解决方案很好。
【问题讨论】:
-
如果有任何初始化程序,没有显式初始化程序的元素将被初始化为(类型适当的值)零,因此没有未初始化的漏洞。但我猜你想在这里被警告默认的空指针?
-
@DanielFischer 是的,我不想要任何空指针。
-
@DanielFischer 你有这方面的参考吗?
-
@abergmeier 在 n1570 中是 6.7.9,第 19 条:“所有未显式初始化的子对象都应隐式初始化,与具有静态存储持续时间的对象相同。”