Дефайны клевая штука. Проблема в том, что как и любым хорошим инструментом некоторые люди не имеют ими пользоваться.
Например если у тебя есть микроконтроллер и дать его портам человекочитаемые назнвания при помощи дефайнов это хорошо. Сразу улучшается читаемость кода, когда вместо обращения к абстрактному B3 ты видишь что обращение идет к порту светодиода LED1. Да и потом в случае изменения схемы, ты просто меняешь один дефайн и всё работает хорошо.
Но я видел одного фаната дефайнов, который писал функции на дефайнах. И опять же это может быть тоже бы работало если бы функции были бы простыми бы (скажем сделать в дефайне функцию преобразования градусов цельсия в фарингейты возможно имело бы смысл, там всего пара операций можно не насиловать из за такой мелочи стек вызовов). Но он прям реально мог написать какую то логику внутри дефайна, которая в добавок еще и состояла из других дефайнов, которые в свою очередь состояли из... Короче пока это работало всё было круто. Но когда мне пришлось исправшять ошибку в одном из дефайнов я всё проклял.
> скажем сделать в дефайне функцию преобразования градусов цельсия в фарингейты возможно имело бы смысл, там всего пара операций можно не насиловать из за такой мелочи стек вызовов
man оптимизации компилятора, нет смысла ебаться с дефайнами.
а ради прикола сделай ещё inline-function + 3-4 вызова обоих вариантов и сравни размер exe :)
есть вообще от такого профит или нет?
* а тек4стовые редакторы умеют там щас находить такие вот define-функции и в тексте их предлагать?
* а тек4стовые редакторы умеют там щас находить такие вот define-функции и в тексте их предлагать?
не понял
ну могут находить подстановки такие и предлагать в подсказках параметры? типа что должно быть 2 параметра... для ф-й обычно пишет типа (int x, int y) в подсказке по мере ввода ...
Зачем сравнивать размер исполняемого файла, когда можно посмотреть, что за код получается на выходе? Компиляторы умеют генерить асм код, можно даже посмотреть онлайн https://gcc.godbolt.org/ и разницы не будет, даже инлайнить незачем https://gcc.godbolt.org/z/-glZJR
Ох уж эти библиотеки от производителей микроконтроллеров с макросными функциями :D Отлаживать их отдельное удовольствие)
#define SQR(x) x*x
вроде всё клёво? но нет...
а если x будет 2+2, на выходе 2+2*2+2 >> баг...
ок, обернём всё в скобочки
#define SQR(x) (x)*(x)
вроде всё клёво? но нет...
а если выражение будет будет 1/SQR(2), на выходе 1/(2+2)*(2+2) >> баг...
Вывод - нехуй функции вообще писать на define :)
Ребята не используют ежесуточную сборку и системы контроля версий.
Лет 20 назад такое прокатило бы. Сейчас - сами себе долбоёбы.
Так этот баян на баше был, еще когда я его читал. А уж это в совсем стародавние времена было xD
Ну нет, эта фигня отлавливается элементарно. Для счастливой отладки надо сделать то же самое, но рандомно с шансом один раз на десять тысяч.
IT-юмор
5.6K постов52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору