Я долгое время негодовал по поводу того, что часто приходится копаться в плохо оформленном коде от коллег или в коде из интернета. Но теперь я решил подойти к проблеме с философской точки зрения. Отныне я коллекционирую такие куски нелепого кода. Буду сохранять отдельно все проявления нелепого кода и пополнять парад. Теперь каждая нелепая функция приносит мне радость так, как пополняет ценную коллекцию того, как не надо делать.
Я эти примеры не искал. Это прямо из будничной инспекции программ. Авторы - российские программисты 10+ лет опыта программирования микроконтроллеров каждый.
Итак, код к параду построен!
1--Использовать макросы препроцессора вместо перечислений.
//**************************************************************************************************
// Definitions of global (public) constants
//**************************************************************************************************
//! \name CAN frame identifier types
//! @{
#define CAN_ID_FORMAT_STANDARD (0U)
#define CAN_ID_FORMAT_EXTENDED (1U)
//! @}
//! \name CAN bus status values
//! @{
#define CAN_STATUS_ERROR_ACTIVE (0U)
#define CAN_STATUS_ERROR_PASSIVE (1U)
#define CAN_STATUS_BUS_OFF (2U)
#define CAN_STATUS_SLEEP (3U)
//! @}

16--Излишние повторные имена в перечислениях

и структурах

18--Драйвер IRQ, который даже не может активировать или прочитать факт активации конкретного прерывания по номеру в NVIC.

При этом в драйвере 29k строк кода! Это как?

2--Несостыковка по типам данных

3--Человек вызывает печать в UART из обработчика прерываний. Прерывание, которое генерирует другое прерывание. Здорово!

17--Драйвер чипа W25M02G, который позволяет работать только с одним экземпляром микросхемы SPI NAND Flash памяти (хотя на плате их две!).

4--Статические функции в заголовочном файле. Смысл статических функций как раз в том чтобы они не вылезали из *.с файла. Человек, который статические функции сует прототипы в *.h не знает основ Си языка.

5--Треугольные функции из вложенных if if if if if if


6--Транслит в названиях функций.

7--Отсутствие имен переменных в определении структуры справа. Если в структуре поменять местами переменные, то всё тихо рухнет в run-time.

8--Нет смысла в битовых полях если тип совпадает с базовыми типами

9--Размер типа битового поля не должен превышать ожидаемый размер всей структуры

10--Несовпадение типов в битовых полях.

11--Невнимательное заполнение битовых полей

12--Очевидные комментарии

13--Отдельная ветка if для нулевого значения, когда нулевое значение может и обработать формула

14--Перечисления маленькими буквами. Как и всякие константы, экземпляры перечислений тоже лучше прописывать заглавными буквами. Чтобы не путать с переменными.

15- Не надо делать таблицу в перечислении. Если это линейная функция, то её следует вычислять по формуле.

Вывод
Как видно, к нелепостям приводит CopyPaste-программирование, ментальная лень и банальная невнимательность. Не делайте так.
Присылайте в комментариях примеры нелепого кода, который встретили Вы. Мне просто интересны границы возможного абсурда.
Ссылки
№ | Название | URL |
1 | Потёмкинская Деревня в Коде | https://habr.com/ru/articles/837396/ |
2 | Атрибуты Хорошего С-кода | https://habr.com/ru/articles/679256/ |
