![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
ertyuo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.1.2010 Репутация: нет Всего: нет |
В различных ЯП применяется define, так вот в статье про define прочитал, что данную директиву можно использовать еще как функцию, ну или макрос:
#define S_Fig(x) (x * x) В связи с этим возник вопрос. А что по ресурсам лучше использовать функции или define? И можно ли в define передавать несколько параметров сразу? Например: #define S_Fig(a,b) ((a*b) * (a+b)) Просто в некоторых приложениях своих иногда накручиваю уж слишком много функций и различных переменных, было бы в разы легче использовать именно директиву define, которая занимает всего одну строчку. |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 0 Всего: 49 |
Можно, но категорически не нужно. Чтобы было понятно, почему - попробуйте подумать, что Вы получите при последующем, например, таком вызове: S_Fig(2+3). Думаете, 25? Ничего подобного, 11. ![]() |
|||
|
||||
ertyuo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.1.2010 Репутация: нет Всего: нет |
Да читал про этот момент там же. Но вот ни разу не было ситуаций на практике, когда нужно было передавать не 5, а сумму (4+1 или 2+3)... Данная ситуация все же исключение, чем обыденность. Да и в define можно же взять каждый отдельный аргумент в круглые скобки - да не удобно, но кода-то меньше будет=) |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: нет Всего: 39 |
>Думаете, 25? Ничего подобного, 11.
Это потому что макрос написан отстойно. #define S_Fig(x) ((x)*(x)) Даст правильные 25. Но толку в них и правда нет. Макросы хороши для автоматизации использования громоздких конструкций, а не в качестве замены функций. Алсо inline-функция заберет и тот микроскопический выигрыш, что есть. Добавлено через 59 секунд ertyuo, о, так вы написли про круглые скобки. Я не заметил. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Фантом |
|
||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 0 Всего: 49 |
Как говорится, все когда-нибудь случается в первый раз... К тому же это не единственная проблема, возникающая при использовании макросов.
Можно, но ради чего? В языке существует нормальный инструмент, позволяющий получить то же самое, но корректным образом - inline-функции. |
||||
|
|||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: нет Всего: 72 |
Если используется C89 для разработки несвежего embed, то альтернативы нет. Приходится использовать макросы и для задания констант, и в качестве встраиваемых функций. Затраты на вызов функций и постоянная нехватка стековой памяти подталкивают к их грамотному использованию. Кстати, кодогенерацию без макр не реализовать. При аккуратном использовании и комментировании/документировании даёт хороший профит. Знает ли кто-нибудь нормальную систему логирования для C/C++, не использующую макросы? |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 0 Всего: 49 |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: нет Всего: 39 |
>Знает ли кто-нибудь нормальную систему логирования для C/C++, не использующую макросы?
В плюсах можно на темплейтах нагородить. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]() ![]() ![]() |
Правила раздела "Философия программирования": | |
|
Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО: • вопросы перспективного развития методов написания ПО; • изменяющиеся языки и методологии программирования; Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Философия программирования | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |