Иллюстрированный самоучитель по практике программирования

Загадочные числа

Используйте средства языка для определения размера объекта.
Не используйте явно заданного размера ни для каких типов данных – так, например, используйте sizeof (int) вместо прямого указания числа 2.4 и т.п. По сходным причинам лучше использовать sizeof(array[0]) вместо sizeof (int) – меньше придется исправлять при изменении типа массива.

Использование оператора sizeof избавит вас от необходимости выдумывать имена для чисел, обозначающих размер массива. Например, если написать:

char buf[1024];
fgets(buf, sizeof(buf), stdin);

То размер буфера хоть и станет "загадочным числом", от которого мы предостерегали ранее, но зато оно появится только один раз – непосредственно в описании. Может быть, и не стоит прилагать слишком большие усилия, чтобы придумать имя для размера локального массива, но определенно стоит постараться и написать код, который не нужно переписывать при изменении размера или типа:

У массивов в Java есть поле length, которое содержит количество элементов:

char buf[] = new char[1024];
for (int 1=0; i < but.length; i++)
…..

В С и C++ нет эквивалента этому полю, но для массива (не указателя), описание которого является видимым, количество элементов можно вычислить с помощью следующего макроса:

Иллюстрированный самоучитель по практике программирования › Стиль › Загадочные числа

Здесь опять-таки размер массива задается лишь в одном месте, и при его изменении весь остальной код менять не придется.

В данном макросе нет проблем с многократным вычислением аргумента, поскольку в нем нет никаких побочных эффектов, и на самом деле все вычисление происходит во время компиляции. Это пример грамотного использования макроса – здесь он делает то, чего не может сделать функция: вычисляет размер массива исходя из его описания.

Упражнение 1.10
Как бы вы переписали приведенные определения, чтобы уменьшить число потенциальных ошибок?

Иллюстрированный самоучитель по практике программирования › Стиль › Загадочные числа

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.