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

Наверное, многие знают сайт govnokod\.ru\.  Если нет \- рекомендую заглянуть тем, кто считает себя программистом\. Хорошее настроение будет обеспечено\.

Сайт так заявляет о себе:

> Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод\.ру, посмеёмся вместе\!

Я по роду своей деятельности много и часто медитирую над разнообразнейшим С\+\+ кодом\. И, как говорится, у меня тоже накопилось\. Не могу больше нести это в себе\. Извините, сейчас и с вами поделюсь\.

Предлагаю топ 10 лучших "лучших" фрагментов кода из собранных мною за последнее время\. У этих примеров есть существенное отличие от собранных на сайте "Говнокод\.ру"\. Если там множество примеров взято из студенческих курсовых и частных малоизвестных проектов, то мои примеры из солидных мест\. **Это известные open\-source приложения и открытые библиотеки\.** Этими проектами и библиотеками мы все регулярно пользуемся уже не один год\. Названия приводить не буду, так как считаю это неэтичным\. То, что в проекте попался один особенно красивый фрагмент кода, вовсе не характеризует качество всего проекта\.

## 10\. Честные выборы кандидатов партий TRUE и FALSE

```cpp
m_bTypeED = ( nCmd == nCmd ) ? TRUE : FALSE;
```

## 9\. Господи, пусть база данных всегда открывается\. А то что мне на "зюки" смотреть?

```cpp
wstring myDBFName;
...
printf("Cannot open database %s",myDBFName);
```

## 8\. А вот не надо такие вещи с помощью Ctrl\-V делать

```cpp
fhead[11] = '\0';
fhead[12] = '\0';
fhead[13] = '\0';
fhead[13] = '\0';
```





## 7\. Хороший и подробный комментарий, это замечательно\! Хотя конечно правильный код лучше

```cpp
/** 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\. Просто и со вкусом

```cpp
flag = true;
flag = false;
// дальше flag вообще не используется
```

## 5\. А вдруг с первого раза проверка не сработает\.\.\.

```cpp
if(freeze||winfreeze||(mainmenu&&gameon)||(!gameon&&gamestarted)||
   (mainmenu&&gameon)||(!gameon&&gamestarted)||(!gameon&&gamestarted))
```

Примечание\. gameon и gamestarted это самые обыкновенные переменные типа bool\.

## 4\. Первородный грех использования Basic

```cpp
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\. Цикл для постижения Дао

```cpp
for (i = 0; i < num_tbl; i++) {
  *tbl++;
}
```



## 2\. Да куда собственно этот файл денется? И так сойдет

```cpp
FILE *fp;
if (! (fp = fopen(filename, "wb")) == -1) {
  perror("opening image file failed");
  exit(1);
}
```

Примечание\. Это условие всегда ложно благодаря двум ошибкам\. Найди же их, искатель правды\!

## 1\. Первое место достается оператору switch

```cpp
switch(LOWORD(wParam))
  {
    case (IDOK || IDCANCEL):
      EndDialog(hDlg,TRUE);
      return(TRUE);
      break;
  }
```

## Вывод

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