Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Философия программирования > Макрос define или функция |
Автор: ertyuo 6.1.2010, 00:26 |
В различных ЯП применяется define, так вот в статье про http://www.mir-koda.ru/full_leson.php?id=9 прочитал, что данную директиву можно использовать еще как функцию, ну или макрос: #define S_Fig(x) (x * x) В связи с этим возник вопрос. А что по ресурсам лучше использовать функции или define? И можно ли в define передавать несколько параметров сразу? Например: #define S_Fig(a,b) ((a*b) * (a+b)) Просто в некоторых приложениях своих иногда накручиваю уж слишком много функций и различных переменных, было бы в разы легче использовать именно директиву define, которая занимает всего одну строчку. |
Автор: ertyuo 6.1.2010, 02:14 | ||
Да читал про этот момент там же. Но вот ни разу не было ситуаций на практике, когда нужно было передавать не 5, а сумму (4+1 или 2+3)... Данная ситуация все же исключение, чем обыденность. Да и в define можно же взять каждый отдельный аргумент в круглые скобки - да не удобно, но кода-то меньше будет=) |
Автор: djamshud 6.1.2010, 02:22 |
>Думаете, 25? Ничего подобного, 11. Это потому что макрос написан отстойно. #define S_Fig(x) ((x)*(x)) Даст правильные 25. Но толку в них и правда нет. Макросы хороши для автоматизации использования громоздких конструкций, а не в качестве замены функций. Алсо inline-функция заберет и тот микроскопический выигрыш, что есть. Добавлено через 59 секунд ertyuo, о, так вы написли про круглые скобки. Я не заметил. |
Автор: Фантом 6.1.2010, 02:45 | ||||
Как говорится, все когда-нибудь случается в первый раз... К тому же это не единственная проблема, возникающая при использовании макросов.
Можно, но ради чего? В языке существует нормальный инструмент, позволяющий получить то же самое, но корректным образом - inline-функции. |
Автор: Shaggie 6.1.2010, 07:35 | ||
Если используется C89 для разработки несвежего embed, то альтернативы нет. Приходится использовать макросы и для задания констант, и в качестве встраиваемых функций. Затраты на вызов функций и постоянная нехватка стековой памяти подталкивают к их грамотному использованию. Кстати, кодогенерацию без макр не реализовать. При аккуратном использовании и комментировании/документировании даёт хороший профит. Знает ли кто-нибудь нормальную систему логирования для C/C++, не использующую макросы? |
Автор: Фантом 6.1.2010, 15:14 | ||
Ну, положим, есть - не обязательно пользоваться именно C. ![]() |
Автор: djamshud 6.1.2010, 15:17 |
>Знает ли кто-нибудь нормальную систему логирования для C/C++, не использующую макросы? В плюсах можно на темплейтах нагородить. |