Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> макросы в плюсовом коде, макросы в плюсовом коде 
:(
    Опции темы
 
Макросы в плюсах
Пользуюсь [ 16 ]  [47.06%]
Не пользуюсь [ 13 ]  [38.24%]
Предпочитаю вместо макросов использовать ... (свой вариант в каментах) [ 5 ]  [14.71%]
А что это такое? [ 0 ]  [0.00%]
Всего проголосовавших: 34
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
mes
Дата 21.4.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(serghd @  20.4.2012,  22:35 Найти цитируемый пост)
я всегда всё делаю дотошно. Какая разница что именно?   

а не лень дотошно делать то, что может сделать беззатратней и надежнее компилятор ?

Цитата(serghd @  20.4.2012,  23:33 Найти цитируемый пост)
Без дублирования кода и создания дополнительных типов-прослоек или дополнительных функций разумеется 

привет из будущего Вам в 90е годы )

Цитата(serghd @  20.4.2012,  23:33 Найти цитируемый пост)
дь мы же не будем оверхедить или преждевременно оптимизировать (т.е. не подумав перед оптимизацией, а всё ли мы учли?).

а ваш шаблон это не преждевременность ?!!!  smile

Добавлено через 2 минуты и 5 секунд
Цитата(serghd @  20.4.2012,  23:33 Найти цитируемый пост)
а как вы бы организовали код, например, следующей задачи?:

переписал бы, не оставив не единной строчки smile



--------------------
PM MAIL WWW   Вверх
serghd
Дата 21.4.2012, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



>привет из будущего Вам в 90е годы )
т.е. сегодня принято оверхедить? Надо же.

>а ваш шаблон это не преждевременность ?!!!
ну... пока вроде нет. Я чего-то не смог бы дописать в макрос?

> переписал бы, не оставив не единной строчки smile
да это понятно, чисто по-русски. Но ответа по теме не было.

Это сообщение отредактировал(а) serghd - 21.4.2012, 01:36
PM MAIL   Вверх
mes
Дата 21.4.2012, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(serghd @  21.4.2012,  00:35 Найти цитируемый пост)
т.е. сегодня принято оверхедить? Надо же.

неа не принято ) акцент не на оверхеде, а на аргументации оверхеда smile
при таком взгляде на программирование, спорить просто не о чем.. Вы считаете , что высоуровневость Вам не нужна и вы справитесь лучше.. В таком стиле Вам подойдет чистый Си, так как преимущества С++ Вы не желаете воспринимать smile

Добавлено через 46 секунд
Цитата(serghd @  21.4.2012,  00:35 Найти цитируемый пост)
ну... пока вроде нет. Я чего-то не смог бы дописать в макрос?

почему вы выбрали макрос, а не функцию ?

Добавлено через 2 минуты и 32 секунды
Цитата(serghd @  21.4.2012,  00:35 Найти цитируемый пост)
Но ответа по теме не было.

В той плоскости в которой Вы задаете вопрос, ответов и аргументаций нет..
Пока вы предпочитаете нести груз на себе, пользу от осла-помощника Вы не почуствуете smile



--------------------
PM MAIL WWW   Вверх
serghd
Дата 21.4.2012, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Цитата(mes @ 21.4.2012,  01:44)
почему вы выбрали макрос, а не функцию ?

что в неё передавать для вызова у всех объектов нужного метода?

Добавлено через 1 минуту и 50 секунд
Цитата(mes @ 21.4.2012,  01:44)
В той плоскости в которой Вы задаете вопрос, ответов и аргументаций нет..

ну не знаю, что плоского...
я привёл пример, всё вроде бы конкретно.
PM MAIL   Вверх
mes
Дата 21.4.2012, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(serghd @  21.4.2012,  00:47 Найти цитируемый пост)
я привёл пример, всё вроде бы конкретно.

вот пример выбора действия на основе перегрузки :
http://liveworkspace.org/code/b41461abbf69...4810be27e645aa9



--------------------
PM MAIL WWW   Вверх
serghd
Дата 21.4.2012, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Цитата(mes @ 21.4.2012,  01:58)
Цитата(serghd @  21.4.2012,  00:47 Найти цитируемый пост)
я привёл пример, всё вроде бы конкретно.

вот пример выбора действия на основе перегрузки :
http://liveworkspace.org/code/b41461abbf69...4810be27e645aa9

аа, ну панислась))...

зы. подобных решений на самом деле достаточно, поэтому я и оговаривал не юзать дополнительные типы. 
То есть принцип сводится (правда, не всегда) к одному: бойся макросов и всеми путями их избегай. Потому что так надо: ты потом запутаешься при его разворачивании, т.к. всё в одной строке, он что-нибудь перекроет и т.п. и т.д...

Это сообщение отредактировал(а) serghd - 21.4.2012, 02:04
PM MAIL   Вверх
mes
Дата 21.4.2012, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



вот еще пример, по вызову метода для массива объектов :
http://liveworkspace.org/code/d38498898d65...625f478c20981cd

Добавлено через 2 минуты и 37 секунд
Цитата(serghd @  21.4.2012,  00:59 Найти цитируемый пост)
То есть принцип сводится (правда, не всегда) к одному: бойся макросов и всеми путями их избегай. 

нет, нет и еще раз нет! не надо никого бояться.. просто есть более удобные и выразительные средсттва и там где можно желательно использовать именно их, а не макросы..

Добавлено через 3 минуты и 43 секунды
Цитата(serghd @  21.4.2012,  00:59 Найти цитируемый пост)
Потому что так надо: ты потом запутаешься при его разворачивании, т.к. всё в одной строке, он что-нибудь перекроет и т.п. и т.д...

нет, не потому что с помощью макросов плохо, а потому что без них лучше smile

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


--------------------
PM MAIL WWW   Вверх
serghd
Дата 21.4.2012, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



про указатель на метод я думал (ибо он сулит наименьший оверхед), но показалось не таким простым для понимания как макрос что-ли...хз.
За усилия по коду спасибо, это время.

Это сообщение отредактировал(а) serghd - 21.4.2012, 03:50
PM MAIL   Вверх
mes
Дата 21.4.2012, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(serghd @  21.4.2012,  01:21 Найти цитируемый пост)
ибо он сулит наименьший оверхед

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

Цитата(serghd @  21.4.2012,  01:21 Найти цитируемый пост)
 но показалось не таким простым для понимания

тогда еще один примерчик : http://liveworkspace.org/code/3725a92b935e...619e5ef1c1678c4

Добавлено через 4 минуты и 43 секунды
P.S: насчет оверхеда : сравните релизный асм-выход последнего примера, и примера с макросом.. 
будете сильно удивлены  smile 

Это сообщение отредактировал(а) mes - 21.4.2012, 02:43


--------------------
PM MAIL WWW   Вверх
asmdzen
Дата 21.4.2012, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



я навидался ошибок от применения макросов, но как насчет использования макросов на короткие расстояния, типа делаем #define -> используем макрос -> делаем #undef?
PM MAIL   Вверх
volatile
Дата 21.4.2012, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(serghd @  21.4.2012,  00:33 Найти цитируемый пост)
ввели негласное правило именования макросов только в верхнем регистре

Интересно кому и когда это ввели?
Мелкомягким, это походу никто не вводил. У них полно макросов с маленькими буквами, хоть теже мин/макс
Да и других полно.

Цитата(asmdzen @  21.4.2012,  09:28 Найти цитируемый пост)
я навидался ошибок от применения макросов, но как насчет использования макросов на короткие расстояния

asmdzen, Ваш вопрос напоминает что-то типа: 
Я навидался доказательств что курить вредно, а как насчет того, чтобы курить изредка и не в затяжку?

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

PM MAIL   Вверх
boostcoder
Дата 21.4.2012, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



кстати, вот тот редкий случай, когда бы я предпочел макрос.
этот код:
Код

// stat
game::_pots_mutex.lock();
game::_global_pot += _pot;
game::_pots_mutex.unlock();


заменил бы на этот:
Код

struct game {
   std::atomic<double> _global_pot;
};


#define ATOMIC_ADD(type, atomicval, newval) \
{ \
   type _oldval = atomicval.load(); \
   type _newval; \
   do { \
      _newval = _oldval+newval; \
   } while( !atomicval.compare_exchange_weak(_oldval, _newval) ); \
}

...

ATOMIC_ADD(double, _global_pot, _pot);


1. использовать мьютекс для блокировки арифметических операций - это мегаоверхед!
2. использовать функцию вместо макроса ATOMIC_ADD, мне кажется будет большим оверхедом из-за того, что функция будет содержать цикл, а заинлайнивание таких функций проблематично. и, как следствие, для одной атомарной операции будет происходить сохранение стека+создание_нового+разрушение_нового+восстановление_старого.
хотя нужно смотреть ассемблерный код.

в данном случае да - макрос незаменим.

Это сообщение отредактировал(а) boostcoder - 21.4.2012, 13:59
PM WWW   Вверх
volatile
Дата 21.4.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(boostcoder @  21.4.2012,  13:55 Найти цитируемый пост)
заинлайнивание таких функций проблематично. и, как следствие, для одной атомарной операции будет происходить сохранение стека+создание_нового+разрушение_нового+восстановление_старого.

boostcoder, я бы заинлайнил, и пусть компилятор разруливает.  smile 
Более чем уверен, что все будет оптимально.
Я пару раз проверял в студии. Код макроса и инлайн функции, не отличались.



Это сообщение отредактировал(а) volatile - 21.4.2012, 14:37
PM MAIL   Вверх
boostcoder
Дата 21.4.2012, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(volatile @  21.4.2012,  14:15 Найти цитируемый пост)
пусть компилятор разруливает

он-то разрулит. но под вопросом остается эффективность.
PM WWW   Вверх
mes
Дата 21.4.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  21.4.2012,  12:55 Найти цитируемый пост)
 что функция будет содержать цикл, 

имхо, Вы перепутали "вызов функции с циклом" и "вызов функции в цикле"..


Это сообщение отредактировал(а) mes - 21.4.2012, 15:37


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.