Правильный стиль C

Правильный стиль C Reddit, Языки программирования, Винни-Пух, Скриншот, Программирование

IT-юмор

5.6K постов52.5K подписчиков

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
22
Автор поста оценил этот комментарий

Эти дефайны, конечно, тот ещё геморрой.

https://bash.im/quote/268036

Иллюстрация к комментарию
раскрыть ветку (23)
25
Автор поста оценил этот комментарий

Дефайны клевая штука. Проблема в том, что как и любым хорошим инструментом некоторые люди не имеют ими пользоваться.


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


Но я видел одного фаната дефайнов, который писал функции на дефайнах. И опять же это может быть тоже бы работало если бы функции были бы простыми бы (скажем сделать в дефайне функцию преобразования градусов цельсия в фарингейты возможно имело бы смысл, там всего пара операций можно не насиловать из за такой мелочи стек вызовов). Но он прям реально мог написать какую то логику внутри дефайна, которая в добавок еще и состояла из других дефайнов, которые в свою очередь состояли из... Короче пока это работало всё было круто. Но когда мне пришлось исправшять ошибку в одном из дефайнов я всё проклял.

раскрыть ветку (15)
9
Автор поста оценил этот комментарий

> скажем сделать в дефайне функцию преобразования градусов цельсия в фарингейты возможно имело бы смысл, там всего пара операций можно не насиловать из за такой мелочи стек вызовов


man оптимизации компилятора, нет смысла ебаться с дефайнами.

раскрыть ветку (9)
Автор поста оценил этот комментарий

а ради прикола напиши такую функцию мне )

#comment_138194657

раскрыть ветку (8)
раскрыть ветку (7)
Автор поста оценил этот комментарий

я про " функцию преобразования градусов цельсия в фарингейты " в define...

раскрыть ветку (6)
Автор поста оценил этот комментарий

как-то так:


#define celcius_to_farenheit(x) ((x) * 1.8 + 32)

раскрыть ветку (5)
Автор поста оценил этот комментарий

а ради прикола сделай ещё inline-function + 3-4 вызова обоих вариантов и сравни размер exe :)

есть вообще от такого профит или нет?


* а тек4стовые редакторы умеют там щас находить такие вот define-функции и в тексте их предлагать?

раскрыть ветку (4)
Автор поста оценил этот комментарий

* а тек4стовые редакторы умеют там щас находить такие вот define-функции и в тексте их предлагать?

не понял

раскрыть ветку (2)
Автор поста оценил этот комментарий

ну могут находить подстановки такие и предлагать в подсказках параметры? типа что должно быть 2 параметра... для ф-й обычно пишет типа (int x, int y) в подсказке по мере ввода ...

раскрыть ветку (1)
Автор поста оценил этот комментарий

ну, у меня neovim предлагает(дополнения deoplete-clangx и echodoc)

Автор поста оценил этот комментарий

Зачем сравнивать размер исполняемого файла, когда можно посмотреть, что за код получается на выходе? Компиляторы умеют генерить асм код, можно даже посмотреть онлайн https://gcc.godbolt.org/ и разницы не будет, даже инлайнить незачем https://gcc.godbolt.org/z/-glZJR

4
Автор поста оценил этот комментарий

Ох уж эти библиотеки от производителей микроконтроллеров с макросными функциями :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 :)

раскрыть ветку (3)
Автор поста оценил этот комментарий

просто нужно больше скобочек богу скобочек:


#define SQR(x) ((x)*(x))

раскрыть ветку (2)
2
Автор поста оценил этот комментарий
Сиськи стриптизерши с крестиками из черной изоленты, между сиськами кулон с печатью Бафомета
раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Это заказ?

3
Автор поста оценил этот комментарий

Ребята не используют ежесуточную сборку и системы контроля версий.

Лет 20 назад такое прокатило бы. Сейчас - сами себе долбоёбы.

раскрыть ветку (2)
2
Автор поста оценил этот комментарий

Так этот баян на баше был, еще когда я его читал. А уж это в совсем стародавние времена было xD

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Это байка ходила раньше баша.

И вообще.

#define InterlockedAdd(x,y) (*x+=y)

2
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Всё уже украдено до нас

#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))

Автор поста оценил этот комментарий

так это и был главный аргумент против их в принципе)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку