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

Dav*_*rea 4 c arrays

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

int array[3] = {1,2,3,4}; // Warning
Run Code Online (Sandbox Code Playgroud)

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

int array[3] = {1,2}; //  OK (no warning)
Run Code Online (Sandbox Code Playgroud)

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

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

250*_*501 7

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

int array[] = { 1 , 2 , 3 };
Run Code Online (Sandbox Code Playgroud)

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

_Static_assert( sizeof( array ) / sizeof( array[0] ) == N , "problem with array" );
Run Code Online (Sandbox Code Playgroud)

  • 应该添加这需要一个标准(即C11)兼容的编译器.这使得MSVC失效(完全没有伤害). (3认同)
  • @DavideAndrea:更新编译器是一个非常好的主意.根据您的平台,不仅在语言支持方面取得了巨大进步,而且在优化方面也取得了很大进展. (2认同)
  • @DavideAndrea静态断言也可以手动实现,它不是很漂亮:http://stackoverflow.com/q/174356/4082723 (2认同)