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

Mat*_*ner 4 c arrays gcc compile-time

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

例如:

int array[10];
Run Code Online (Sandbox Code Playgroud)

对于:

sizeof(array) == 40
???(array) == 10
Run Code Online (Sandbox Code Playgroud)

Update0

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

ndi*_*dim 12

(sizeof(array)/sizeof(array[0]))
Run Code Online (Sandbox Code Playgroud)

或者作为一个宏

#define ARRAY_SIZE(foo) (sizeof(foo)/sizeof(foo[0]))

    int array[10];
    printf("%d %d\n", sizeof(array), ARRAY_SIZE(array));

40 10
Run Code Online (Sandbox Code Playgroud)

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