Я записал 2 сообщения в блоге, детализирующие про и недостатки подсчета Строк кода (LoC):
, Как проводят Вас подсчет Ваше количество Строк кода (LOC)? : идея состоит в том, чтобы объяснить, что необходимо считать логическое количество строк кода вместо физического количества. Чтобы сделать так, можно использовать инструменты как NDepend, например.
, Почему полезно считать количество Строк кода (LOC)? : идея состоит в том, что LoC никогда не должен использоваться, чтобы измерить производительность, но больше сделать оценку тестового покрытия и оценку крайнего срока программного обеспечения.
Пример: *
#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-выражения
. Но эти скобки действительно нужны для того, чтобы иметь возможность анализировать тип в грамматике выражений. Они являются частью синтаксиса того, что вы могли бы назвать «выражениями типа», но, учитывая ограниченное использование таких вещей, на самом деле у них нет такой продукции или термина. Почему бы вам не дать:
sizeof(array) / sizeof(char*) / 3
шанс?
Предполагается, что вы знаете тип данных (char *) и другое измерение (3).
Вы делите размер структуры зависит от размера каждого элемента, чтобы получить общее количество элементов, а затем разделить его на первое измерение и получить второе.
Кроме того: в моем первоначальном ответе использовалось 'sizeof ( "a") '
, что, конечно, было неверно, поскольку это был размер массива (2, являясь' a 'и' \ 0 '), а не указатель (4 на моем ужасно устаревшем 32-битном машина). Но мне нравится, как я получил два голоса за этот неправильный ответ - разве вы не проверяете ответы здесь перед голосованием? : -)