确保在编译时初始化固定大小数组的所有元素

时间:2016-09-24 18:15:24

标签: c arrays

对于指定大小的数组,如果我在初始化中放置了太多元素,编译器会发出警告:

int array[3] = {1,2,3,4}; // Warning

但是,当然,如果我放置太少的元素(它只是用0填充它们)它就不会这样做:

int array[3] = {1,2}; //  OK (no warning)

然而,我必须确保在编译时我在N元素数组的初始化中准确指定了N个元素(它是一个函数指针数组)。

如果指定的元素太少,我可以让编译器发出警告吗?

1 个答案:

答案 0 :(得分:7)

首先使用您的参数定义您的结构,而不指定大小:

int array[] = { 1 , 2 , 3 };

然后使用_Static_assert检查创建的数组的大小是否与N相同:

_Static_assert( sizeof( array ) / sizeof( array[0] ) == N , "problem with array" );