对于指定大小的数组,如果我在初始化中放置了太多元素,编译器会发出警告:
int array[3] = {1,2,3,4}; // Warning
但是,当然,如果我放置太少的元素(它只是用0填充它们)它就不会这样做:
int array[3] = {1,2}; // OK (no warning)
然而,我必须确保在编译时我在N元素数组的初始化中准确指定了N个元素(它是一个函数指针数组)。
如果指定的元素太少,我可以让编译器发出警告吗?
答案 0 :(得分:7)
首先使用您的参数定义您的结构,而不指定大小:
int array[] = { 1 , 2 , 3 };
然后使用_Static_assert检查创建的数组的大小是否与N相同:
_Static_assert( sizeof( array ) / sizeof( array[0] ) == N , "problem with array" );