![]() |
|
Модераторы: bsa |
![]()
|
|
| 666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Помогите разобраться. Столкнулся с макросами. Приблизительно понял что эт такое. По сути те же функции,дык зачем тогда они нужны?Почему нельзя просто также описывать функции без всяких директив #define и т.д.
Или есть какието преимущества макросов?Если да то какие? Все поисковые запросы мои увенчались тем что я находил описания что эт такое. Поэтому и возник сей вопрос.. Заранее спасибо |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Ну почему же. Макросы довольно удобная вещь. К примеру, - если надо объявить кучу переменных с заранее известным размером, - N число, а потом в процессе если понадобится заменить N число, то придется перебрать весь код заново, а так поменял в define(е)...
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| Galaran |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.5.2009 Репутация: нет Всего: 2 |
Для переменных можно использовать константы
Опередили =) Это сообщение отредактировал(а) Galaran - 16.8.2009, 21:39 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
насчет переменных - можно использовать enum, а не макросы. Макросы заменяют просто текст, в то время как enum - конструкция языковая.
Я знаю только одно действительно мне нужное использование макросов:
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Или так (Builder2009) :
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
юмор не понял.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
И опасная, поэтому если человек не понимает для чего она нужна, лучше не использовать. И где интересно такому учат |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
||||
|
||||
| sdukshis |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Макросы можно использовать для избежания лишних вызовов функций и, таким образом, оптимизации по времени выполнения. Например
В C++ такие макросы не нужны, поскольку есть встраиваемые функции. |
||||
|
|||||
| 666TEHb666 |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Ну раз я неправильно понимаю их назначения может объясните?По крайней мере хотя бы смогу сам понять достоинства/недостатки. а так я представляю их пока только функциями/константами... Именно поэтому я задал вопрос)) С помощью макросов как я понял можно написать функции..зачем если их можно оисать точно ткже в теле прграммы или еще лучше в длл и заинклдить а не перемешивать эти макросы с хидерами,устраивая в программе кашу...мое мнение..аналогично с переменными..существуют константы..кроме того их можно объявить еще и по тексту программы..опять же зачем макросы?))
а в чем проблема также функцию написать?
Интересная стратегия говорить как опасны макросы и какая от них головная боль не объяснив в чем именно опасность и суть =) Поясните вашу точку зрения. В чем опасность?
Единственный ответ вроде бы по сути...Благодарю. Хотя было бы интересно узнать оправдывает ли оптимизация нагромождение (мое мнение) кода. Очень информативно =) xD Благодарю =) Мне все сразу стало ясно %) |
||||||||
|
|||||||||
| mes |
|
||||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
использование в качестве функций или констант это лишь частный (и зачастую не лучший) случай использования макросов. Макросы предназначены для управляемой генерации исходного кода. Вот первый пришедший в голову пример : Допустим нам надо объявить некое кол-во строковых констант, к оформлению значений каждой из которых предъявляются определенные требования, в нашем случае допустим шаблон должен выглядить так : <prefix%s>, тогда реализация может выглядить так :
Потому что можно
и значение x не будет вычисляться если лог не ведется. ну вот Вам простенький пример для разминки :
вначале исправьте ошибку компиляции, а потом объясните полученный результат пример подправлен/упрощен в связи с нижеследующим постом azesmcar`a Это сообщение отредактировал(а) mes - 17.8.2009, 11:15 |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |