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

时间:2010-08-02 14:22:44

标签: c arrays gcc compile-time

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

例如:

int array[10];

为此:

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

Update0

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

4 个答案:

答案 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])

做到这一点