6

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

例如:

int array[10];

为此:

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

更新0

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

4

4 回答 4

14
(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()宏应用于指向数组的指针并获取垃圾值,而不会出现任何编译器警告或错误。

于 2010-08-02T14:27:31.443 回答
2

我不会依赖 sizeof ,因为对齐的东西可能会把事情搞砸。

#define COUNT 10
int array[COUNT];

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

于 2010-08-02T14:31:13.337 回答
1

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

大小(数组)/大小(数组 [0])

这样做

于 2010-08-02T14:28:39.290 回答
1
    大小(数组)/大小(整数)
于 2010-08-02T14:27:26.280 回答