Правила программирования на С и С++. Главы 7-8 - Подавляйте демонов запутанности (Часть 2)
ОГЛАВЛЕНИЕ
Страница 3 из 74
85. Подавляйте демонов запутанности (Часть 2).
Демоны запутанности особенно опасны в С. Кажется, что этот язык сам собой поощряет выбор неестественно усложненных решений для простых задач. Последующие правила посвящаются этой проблеме.
85.1. Устраняйте беспорядок.
Язык С предоставляет богатый набор операторов и, как следствие, предлагает множество способов ничего не делать, что и иллюстрируется примерами из таблицы 2.
Таблица 2. Как ничего не делать в С.
Плохо | Хорошо | Комментарии |
type *end = array; end += len-1; | type *end = array+(len-1) | Инициализируйте при объявлении. |
while (*p++ != '\0') | while ( *p++) | |
while (gets(buf) != NULL) | while ( gets() ) | |
if ( p != NULL ) | if ( p ) | !=0 ничего не делает в выражении |
if ( p == NULL ) | if ( !p ) | отношения |
if (условие != 0) | if ( условие ) | |
if (условие == 0) | if ( !условие ) | |
if( условие ) return TRUE; else return FALSE; | return условие; | (или return условие != 0). Если оно не было верным, то вы не сможете выполнить return TRUE. |
return условие?0:1; return условие?1:0; | return !условие; return условие!=0; | Используйте соответствующий оператор. Операторы отношения типа ! и != выполняют по определению сравнение с 1 или 0. |
++x; f(x); --x; | f( x-1 ); | Не модифицируйте значение, если вам после этого не нужно его использовать более одного раза. |
return ++x; | return x+1; | Смотрите предыдущее правило. |
int x; f( (int)x ); | f(x); | Переменная x и так имеет тип int. |
(void)printf("все в порядке"); | printf("все в порядке"); | Попросту опускайте возвращаемый тип, если он вам не нужен. |
if (x > y) else if (x ? y) else if (x ==y) | if ( x > y ) else if ( x ? y ) else | Если первое значение не больше и не меньше второго, то они должны быть равны. |
*(p+i) | p[i]; | Это по сути единственное исключение из приводимого ниже в данной главе правила об использовании указателей. При реализации действительно случайного доступа к элементам массива запись со скобками легче читается, чем вариант с указателем, в равной степени неэффективный при случайном доступе. |
то вы, должно быть, попали в беду.