1. По колено в Си++ г... коде
Автор: Андрей Карпов
Дата: 01.03.2011
Наверное, многие знают сайт govnokod.ru. Если нет - рекомендую заглянуть тем, кто считает себя
программистом. Хорошее настроение будет обеспечено. Сайт так заявляет о себе:
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки
не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру,
посмеёмся вместе!
Я по роду своей деятельности много и часто медитирую над разнообразнейшим С++ кодом. И, как
говорится, у меня тоже накопилось. Не могу больше нести это в себе. Извините, сейчас и с вами
поделюсь.
Предлагаю топ 10 лучших "лучших" фрагментов кода из собранных мною за последнее время. У
этих примеров есть существенное отличие от собранных на сайте "Говнокод.ру". Если там
множество примеров взято из студенческих курсовых и частных малоизвестных проектов, то мои
примеры из солидных мест. Это известные open-source приложения и открытые библиотеки.
Этими проектами и библиотеками мы все регулярно пользуемся уже не один год. Названия
приводить не буду, так как считаю это неэтичным. То, что в проекте попался один особенно
красивый фрагмент кода, вовсе не характеризует качество всего проекта.
10. Честные выборы кандидатов партий TRUE и FALSE.
m_bTypeED = ( nCmd == nCmd ) ? TRUE : FALSE;
9. Господи, пусть база данных всегда открывается. А то что мне на
"зюки" смотреть?
wstring myDBFName;
...
printf("Cannot open database %s",myDBFName);
8. А вот не надо такие вещи с помощью Ctrl-V делать.
fhead[11] = '0';
fhead[12] = '0';
fhead[13] = '0';
fhead[13] = '0';
2. 7. Хороший и подробный комментарий, это замечательно! Хотя
конечно правильный код лучше.
/** Deletes all previous field specifiers.
* This should be used when dealing with clients that
* send multiple NEP_PACKET_SPEC messages, so only the last
* PacketSpec is taken into account. */
int NEPContext::resetClientFieldSpecs() {
this->fspecs.empty();
return OP_SUCCESS;
} /* End of resetClientFieldSpecs() */
6. Просто и со вкусом.
flag = true;
flag = false;
// дальше flag вообще не используется
5. А вдруг с первого раза проверка не сработает...
if(freeze||winfreeze||(mainmenu&&gameon)||(!gameon&&gamestarted)||
(mainmenu&&gameon)||(!gameon&&gamestarted)||(!gameon&&gamestarted))
Примечание. gameon и gamestarted это самые обыкновенные переменные типа bool.
4. Первородный грех использования Basic.
t.printf("%10.5f, %10.5f, %10.5f,n%10.5f, %10.5f,
%10.5f,n%10.5f, %10.5f, %10.5f)",
m[0, 0], m[0, 1], m[0, 2],
m[1, 0], m[1, 1], m[1, 2],
m[2, 0], m[2, 1], m[2, 2]);
3. Цикл для постижения Дао.
for (i = 0; i < num_tbl; i++) {
*tbl++;
}
3. 2. Да куда собственно этот файл денется? И так сойдет.
FILE *fp;
if (! (fp = fopen(filename, "wb")) == -1) {
perror("opening image file failed");
exit(1);
}
Примечание. Это условие всегда ложно благодаря двум ошибкам. Найди же их, искатель правды!
1. Первое место достается оператору switch.
switch(LOWORD(wParam))
{
case (IDOK || IDCANCEL):
EndDialog(hDlg,TRUE);
return(TRUE);
break;
}
Вывод
Собственно вывод, как и всегда, один. Не ошибается только тот, кто ничего не делает. От ошибок,
даже глупых, не застрахован ни один даже высококвалифицированный разработчик.