Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

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

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

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

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

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


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

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

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

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

Вывод

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

Популярные статьи по теме
Как различить C и C++ разработчиков по их коду

Дата: 12 Май 2022

Автор: Гость

Так уж случилось, что я пишу код для разных IoT-железок, связанных с электричеством, типа зарядных станций автомобилей. Поскольку аппаратных ресурсов, как правило, вполне достаточно, то основным фоку…
Отладочный вывод на микроконтроллерах: как Concepts и Ranges отправили мой printf на покой

Дата: 06 Май 2022

Автор: Гость

Здравствуйте! Меня зовут Александр, и я работаю программистом микроконтроллеров.
Нереальный baselining или доработки PVS-Studio для Unreal Engine проектов

Дата: 26 Апр 2022

Автор: Валерий Комаров

Статический анализатор PVS-Studio постоянно развивается: улучшаются различные механизмы, происходит интеграция с игровыми движками, IDE, CI/CD и другими системами и сервисами. Благодаря этому несколь…
Разбор некоторых вредных советов для С++ программиста

Дата: 21 Апр 2022

Автор: Андрей Карпов

Юмор юмором, но осторожность не повредит. Вдруг кому-то не до конца понятно, почему какой-то из советов является вредным. Здесь можно найти соответствующие пояснения.
Четыре причины проверять, что вернула функция malloc

Дата: 20 Апр 2022

Автор: Андрей Карпов

Некоторые разработчики пренебрежительно относятся к проверкам: удалось ли выделить память с помощью функции malloc или нет. Их логика проста – памяти всегда должно хватить. А если не хватит, всё равн…

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

Следующие комментарии
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять