Как найти, что размер нескольких определяет размеры массива в C

Я записал 2 сообщения в блоге, детализирующие про и недостатки подсчета Строк кода (LoC):


, Как проводят Вас подсчет Ваше количество Строк кода (LOC)? : идея состоит в том, чтобы объяснить, что необходимо считать логическое количество строк кода вместо физического количества. Чтобы сделать так, можно использовать инструменты как NDepend, например.


, Почему полезно считать количество Строк кода (LOC)? : идея состоит в том, что LoC никогда не должен использоваться, чтобы измерить производительность, но больше сделать оценку тестового покрытия и оценку крайнего срока программного обеспечения.

5
задан Jonathan Leffler 18 September 2009 в 19:40
поделиться

2 ответа

sizeof array / sizeof array [0]

Пример: *

#include <stdio.h>

int main(void) {
  int array[4];

    printf("%zd\n", sizeof array / sizeof array[0]);
    printf("%zd\n", sizeof (int));
    printf("%ld\n", (long)(sizeof array / sizeof array[0]));
    return 0;
}


* Вам нужны скобки, если операнд является имя-типа , хотя sizeof является оператором, а не функцией. Но каждое место, где имя-типа появляется в грамматике C (деклараторы не используют это выражение), вокруг него требуются скобки. Поскольку в полуформальных грамматиках, используемых для различных спецификаций C, нет отдельной продукции для type-name-in-parens, они определяют необходимые паренсы в продуктах, которые определяют такие вещи, как sizeof , generic-association и cast-выражения . Но эти скобки действительно нужны для того, чтобы иметь возможность анализировать тип в грамматике выражений. Они являются частью синтаксиса того, что вы могли бы назвать «выражениями типа», но, учитывая ограниченное использование таких вещей, на самом деле у них нет такой продукции или термина.
11
ответ дан 18 December 2019 в 11:58
поделиться

Почему бы вам не дать:

sizeof(array) / sizeof(char*) / 3

шанс?

Предполагается, что вы знаете тип данных (char *) и другое измерение (3).

Вы делите размер структуры зависит от размера каждого элемента, чтобы получить общее количество элементов, а затем разделить его на первое измерение и получить второе.

Кроме того: в моем первоначальном ответе использовалось 'sizeof ( "a") ', что, конечно, было неверно, поскольку это был размер массива (2, являясь' a 'и' \ 0 '), а не указатель (4 на моем ужасно устаревшем 32-битном машина). Но мне нравится, как я получил два голоса за этот неправильный ответ - разве вы не проверяете ответы здесь перед голосованием? : -)

4
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: