Стилевое единство и идиомы
Все три способа, в принципе, правильны, однако устоявшаяся, идиоматическая форма выглядит так:
for (1 = 0; i < n; i++) array[i] = 1.0;
Выбор именно этой формы не случаен. При такой записи обходятся все п элементов массива, пронумерованные от 0 до n-1. Все управление циклом находится непосредственно в его заголовке; обход происходит в возрастающем порядке; для обновления переменной счетчика цикла используется типичная операция инкремента (++). После выхода индекс цикла имеет известное нам значение как раз за последним элементом массива. Те, для кого этот язык как родной, все понимают без пояснений и воспроизводят конструкцию не задумываясь.
В C++ и Java стандартный вариант включает еще и объявление переменной цикла:
for (int 1=0; i < n; i++) array[i] = 1.0;
Вот как выглядит стандартный цикл для обхода списка в С:
for (р = list; р!= NULL; р = p › next) …….
И опять все управляющие элементы цикла находятся непосредственно в выражении for.
Для бесконечного цикла мы предпочитаем конструкцию:
for (;;)
Однако популярна и конструкция:
while (1) ……..
Не используйте других форм, кроме двух приведенных.
Использование отступов также должно быть стандартным, можно сказать – идиоматичным. Вот такое необычное вертикальное расположение управляющих элементов цикла ухудшает читабельность кода, поскольку выглядит как три отдельных выражения, а не как единый заголовок цикла:
Стандартную форму записи цикла воспринять гораздо проще:
for (ар = агг; ар < агг+128; ар++) *ар = 0;
Небрежно выбранное расположение отступов растянет код на несколько экранов или страниц, что также не улучшает его восприятие.
Еще один стандартный прием – вставлять присваивание внутрь условия цикла:
while ((с = getchar())!= EOF) putchar(c);