|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.08.2012, 02:30 | #1 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Использование макросов в C++ (+ и -)
Недавно наткнулся на такую фразу в интернете.
Цитировать не буду, полностью не помню, но звучит примерно так: Использовать макросы вредно, используйте в крайних случаях. И у меня возник вопрос почему. Смотрел в интернете. Конкретного ответа на "почему" не нашел. Вот и решил спросить у людей а не у гугла))). Можно узнать о всех плюсах и минусах использования макросов. И как часто вы их используете. И каковы эдакие последствия частого использования макросов в программе. Знаю один плюс: 1. Визуально сокращается объем кода (почему визуально думаю понятно) И минус: 2. При использовании макросов, которые вычисляют сложные выражения, могут принести кучу проблем (думаю сами знаете какие)
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Последний раз редактировалось kineziz; 16.08.2012 в 02:37. |
16.08.2012, 02:52 | #2 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Макросы - лобовая подстановка значений аргументов вместо выражения. Отсюда у многих большие проблемы при их написании.
Код:
Код:
Ошибки в макросах, как правило, очень дорого обходятся, так как компилятор не сможет Вам о них сообщить (макросы обрабатываются препроцессором, до компилятора). Они общие на всю единицу трансляции, и если они будут повторяться в разных, например, заголовочных файлах, то, опять же, Вы об этом узнаете только когда сами во всем разберетесь. Многие случаи использования макросов можно заменить языковыми конструкциями (константы, inline-функции, классы, шаблоны), причем замена будет в разы безопаснее, так как о ней знает компилятор и он в силах сообщить нормальную информацию об ошибках. Но, конечно, многие вещи пока без макросов сделать невозможно.
Форматируйте код, будьте людьми.
|
16.08.2012, 02:58 | #3 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Спасибо за содержательный ответ. Все понятно. А на производительности это никак да не сказывается?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
16.08.2012, 03:11 | #4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Макросы модифицируют текст исходного кода. На производительность может повлиять только конечный текст исходного кода. На мой взгляд, потенциально опасны только глобальные макросы. Критерий "правильности" использования макроса можно сформулировать так: 1. Макрос не должен ухудшать читабельность кода сторонними лицами. А напротив - улучшать её. Если макрос не улучшает читабельность - он не нужен. 2. Макрос не должен быть глобальным, и создавать угрозу конфликтов тегов исходного кода. Его надлежит использовать только на коротких участках кода, и undef`ить сразу же, как только он становится не нужным. 3. Макросы не являются пользовательскими инструментами. И существуют только в недрах механизмов. 4. Макросы надлежит именовать с префиксами согласно принятой нотации, что бы избежать любых возможных конфликтов тегов исходного кода. 5. Идешки не умеют разворачивать макросы. Любые ошибки, которые происходят внутри макроса - сложно отлаживать. Это наиболее критичный фактор, который стоит учитывать, прежде чем будет принято решение использовать макрос. Резюмируя: если есть возможность написать читабельный/сопровождаемый код без макросов - макросы не нужны. Если использование макросов улучшит читабельность/сопровождаемость, и при это он будет запрятан в недрах механизмов - можно рассмотреть возможность его применения. Последний раз редактировалось _Bers; 16.08.2012 в 03:13. |
|
16.08.2012, 08:52 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Макросы нельзя "положить" в namespace
Макросы не различают типы данных |
16.08.2012, 14:52 | #6 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Спасибо всем за ответы. Сделал выводы. Лучше ответов не найти
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объединение макросов | Pilot | Microsoft Office Excel | 13 | 31.08.2010 18:05 |
Создание макросов | Женечка2607 | Microsoft Office Excel | 3 | 23.04.2009 21:17 |
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без | Neoli | Microsoft Office Excel | 2 | 09.03.2009 14:31 |
Сравнение макросов | valerij | Microsoft Office Excel | 24 | 09.06.2008 00:57 |