是否有可以在GCC编译时返回数组长度的宏或内置函数?
例如:
int array[10];
为此:
sizeof(array) == 40
???(array) == 10
我可能只是指出在C ++中这样做是微不足道的。可以构建一个返回[]
内的数字的模板。我确信我曾经在Visual C ++编译器中找到lengthof
和dimof
宏/内置但是找不到它了。
答案 0 :(得分:12)
(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()
宏应用于指向数组的指针,并在没有任何编译器警告或错误的情况下获取垃圾值。
答案 1 :(得分:2)
我不会依赖sizeof,因为aligment东西可能搞乱这件事。
#define COUNT 10
int array[COUNT];
然后您可以根据需要使用COUNT。
答案 2 :(得分:1)
sizeof(array) / sizeof(int)
答案 3 :(得分:1)
我不知道有这样做的内置,但我最近使用过:
sizeof(array)/ sizeof(array [0])
做到这一点