Правила программирования на С и С++. Главы 1-6 - Условные операторы выделяются абзацными отступами
ОГЛАВЛЕНИЕ
Страница 45 из 93
41. Условные операторы выделяются абзацными отступами.
Я делаю это даже в операторах из одной строки:
if ( by_land )one();
else
two();
а не так: if ( by_land ) one() else two();Очевидным исключением является: if ( by_land ){
one();
}
else if ( by_sea )
{
two();
}
else if ( by_air )
{
three();
}
Я использовал здесь скобки по двум причинам. Во-первых, я как-то попал внутрь условного оператора при отладке и забыл вставить скобки, как в следующем тексте: if ( by_land )one(); if(debug) printf("aagh");
else if ( by_sea )
что привело привело фактически к: if ( by_land )one();
if (debug)
printf("aagh");
else
if ( by_sea )
Со скобками программа к тому же лучше читается. Я часто нарушаю правило абзацных отступов, когда используюформатирование для того, чтобы показать с кристальной ясностью, что происходит. Аккуратные столбцы делают это осуществимым:
if ( by_land ) one();else if ( by_sea ) two();
else if ( by_tunnel ) three();
но это нечитаемо: if (by_land)one();else if(by_sea)two();
else if(by_tunnel)three();
Подобный код никуда не годится: for ( a ; b ; c );while ( ++i ? 10 );
Слишком просто случайно сделать следующее: while ( i ? 10 );++i;
(Другими словами, "вечно сравнивать i с 10, затем увеличить i"). Если точка с запятой никогда не ставится в конце строки, начинающейся с for или while, то вы можете использовать утилиту поиска строки типа grep для обнаружения таких проблем.