MvG*_*MvG 16 c c++ gcc compiler-warnings gcc-warning
初始化一个数组(在C++中,但任何适用于C的解决方案也可能在这里工作),初始化程序少于元素,这是完全合法的:
int array[10] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
但是,这可能是一些模糊的错误.有没有办法让编译器(gcc)检查一个特定数组的初始值设定项的数量,如果声明的实际大小不匹配,则发出警告甚至错误?
我知道我可以使用int array[] = { 1, 2, 3 };,然后可以使用静态断言sizeof(array)来验证我的期望.但我array在其他翻译单元中使用,所以我必须用明确的大小声明它.所以这个技巧对我不起作用.
(根据要求提出评论)
如果数组中的值对于系统的正确功能很重要,并且在最后使用零初始化值会导致错误,那么我只需添加一个单元测试来验证数组是否包含正确的数据,而不是尝试强制执行它在代码中.
由于您array在其他翻译单元中使用,它显然具有外部链接。在这种情况下,你可以声明它两次,只要声明给它相同的类型。所以简单地声明它两次,一次允许编译器计算初始化器的数量,一次指定大小。将此行放在一个源文件中,在任何声明的头文件之前array:
int array[] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
稍后在同一个文件中,放置#include一行声明array,例如:
extern int array[10];
Run Code Online (Sandbox Code Playgroud)
如果两个声明中的数组大小不同,编译器就会报错。如果它们相同,编译器将接受它们。