在 GCC 中是否有可以在编译时返回数组长度的宏或内置函数?
例如:
int array[10];
为此:
sizeof(array) == 40
???(array) == 10
更新0
我可能只是指出,在 C++ 中这样做是微不足道的。可以构建一个返回内部数字的模板[]
。我确信我曾经在 Visual C++ 编译器中找到了一个lengthof
anddimof
宏/内置函数,但现在找不到了。
在 GCC 中是否有可以在编译时返回数组长度的宏或内置函数?
例如:
int array[10];
为此:
sizeof(array) == 40
???(array) == 10
我可能只是指出,在 C++ 中这样做是微不足道的。可以构建一个返回内部数字的模板[]
。我确信我曾经在 Visual C++ 编译器中找到了一个lengthof
anddimof
宏/内置函数,但现在找不到了。
(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 ,因为对齐的东西可能会把事情搞砸。
#define COUNT 10
int array[COUNT];
然后你可以根据需要使用 COUNT 。
我不知道这样做的内置函数,但我最近使用过:
大小(数组)/大小(数组 [0])
这样做
大小(数组)/大小(整数)