如何在编译时确定数组的长度?

是否有可以在GCC编译时返回数组长度的宏或内置函数?

例如:

int array[10]; 

对于:

 sizeof(array) == 40 ???(array) == 10 

Update0

我可能只是指出在C ++中这样做是微不足道的。 可以构建一个返回[]内部数字的模板。 我确信我曾经在Visual C ++编译器中找到了一个dimofdimof宏/内置,但是再也找不到它了。

 (sizeof(array)/sizeof(array[0])) 

或者作为一个宏

 #define ARRAY_SIZE(foo) (sizeof(foo)/sizeof(foo[0])) int array[10]; printf("%d %d\n", sizeof(array), ARRAY_SIZE(array)); 40 10 

警告:您可以将此ARRAY_SIZE()宏应用于指向数组的指针,并获取垃圾值而不会出现任何编译器警告或错误。

  sizeof(array)/ sizeof(int) 

我不会依赖sizeof,因为aligment东西可能会弄乱这个东西。

 #define COUNT 10 int array[COUNT]; 

然后你可以根据需要使用COUNT。

我不知道这样做的内置,但我最近使用:

的sizeof(数组)/的sizeof(数组[0])

做到这一点