metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

Вебинар: Трудности при интеграции SAST, как с ними справляться - 04.04

>
>
>
По колено в Си++ г... коде

По колено в Си++ г... коде

01 Мар 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';

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++;
}

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;
  }

Вывод

Собственно вывод, как и всегда, один. Не ошибается только тот, кто ничего не делает. От ошибок, даже глупых, не застрахован ни один даже высококвалифицированный разработчик.

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form