Как определить длину массива во время компиляции? - PullRequest
4 голосов
/ 02 августа 2010

Существуют ли макросы или встроенные функции, которые могут возвращать длину массивов во время компиляции в GCC?

Например:

int array[10];

Для чего:

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

Update0

Я мог бы просто указать, что делать это в C ++ тривиально. Можно создать шаблон, который возвращает число внутри []. Я был уверен, что однажды нашел макрос / встроенный lengthof и dimof в компиляторе Visual C ++, но больше не могу его найти.

Ответы [ 4 ]

12 голосов
/ 02 августа 2010
(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() к указателю на массив и получить значение мусора без каких-либо предупреждений или ошибок компилятора.

2 голосов
/ 02 августа 2010

Я бы не стал полагаться на sizeof, так как aligment может испортить вещь.

#define COUNT 10
int array[COUNT];

И тогда вы можете использовать COUNT, как хотите.

1 голос
/ 02 августа 2010

я не знаю встроенного, который делает это, но я недавно использовал:

sizeof (массив) / sizeof (массив [0])

, чтобы сделатьтолько это

1 голос
/ 02 августа 2010
    sizeof(array) / sizeof(int) 
...