Парад Нелепого Си Кода

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Я эти примеры не искал. Это прямо из будничной инспекции программ. Авторы - российские программисты 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/

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы встречали нелепый Си код?
100% да3
0% нет0
Проголосовали 3 пользователя. Воздержались 3 пользователя.
Источник: https://habr.com/ru/articles/718300/


Интересные статьи

Интересные статьи

В наше время многие компании используют различные сервисы для связи с клиентами и партнерами. Один из самых популярных мессенджеров - WhatsApp, стал незаменимым инструментом коммуникации в бизнесе. Од...
Во второй части статьи про bitrix кластер мы будет рассматривать настройку percona xtradb cluster mysql 5.7, настройка арбитра, настройка удобного dashboard.Если вы пропустили предыдущие части: Первая...
Процесс изучения защищённости компаний от киберугроз осложняется тем, что отсутствуют какие-либо объективные критерии, по которым можно произвести сравнение. Чтобы решить...
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны
Вам нужна недорогая «печатная машинка», но вместо нее Microsoft и Acer сделали для вас «китайскую поделку» с заведомо неработоспособной конфигурацией. Под катом о том, как выглядит работа ...