Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/86: Рейтинг темы: голосов - 86, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 9

Чем же макрос define так плох?

08.01.2010, 03:29. Показов 21158. Ответов 115

Студворк — интернет-сервис помощи студентам
После прочтения про директиву препроцессора define возник вопрос по поводу применения define, как функции:
C++
1
#define QQ (q) (q^q)
Можно же улучшить читаемость кода, используя вместо функций именно директиву define. Или у данного использования макроса есть подводные камки какие-то? Да и объем кода в разы сократиться, так как для define будет достаточно всего-навсего одной строчки.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2010, 03:29
Ответы с готовыми решениями:

Чем так плох чипсет P31?
Здрасти! Скажите чем так плох этот чипсет?

чем плох mysql_query
Просматривал вакансию на пхп juniora наткнулся на такое требование "В коде нет и намека на mysql_query("SELECT * ...." я...

Чем плох uCoz?
Добрый день! Хотел бы услышать объективные мнения специалистов, на тему "Почему юКоз нельзя использовать для создания полноценного...

115
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 12:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от castaway Посмотреть сообщение
const-переменная? Я не ослышался?
нет, не ослышались.

в программировании переменные могут быть константными.
как бы ни странно это звучало.

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

так что да, ваше замечание попало в цель.

Добавлено через 6 минут
Цитата Сообщение от Evg Посмотреть сообщение
Словом "константа" называть переменную
на языке с++ есть три группы объектов наделенных квалификатором const:

1.
константы времени компиляции
2.
константы времени выполнения
3.
mutable переменные.

только и только константы времени компиляции не являются переменными.

хотите сказать, что я это придумал?

Цитата Сообщение от Evg Посмотреть сообщение
Использовать понятие "адрес константы"
C++
1
2
const int v = 10;
const int* p = &v;
какие то проблемы?

Цитата Сообщение от Evg Посмотреть сообщение
Словом "inline" называть пропагирование константного значения
мне не знаком термин "пропагирование"

вам знаком термин "inline подстановка"?
вы понимаете, что это значит?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.10.2015, 12:50
Цитата Сообщение от hoggy Посмотреть сообщение
секцию бинарника для кода я не рассматриваю в принципе
Вот жесть, честное слово:
Цитата Сообщение от hoggy Посмотреть сообщение
Цитата Сообщение от Tulosba Посмотреть сообщение
она явно или косвенно попадет в сегмент данных или кода, что повлияет на размер объектного файла.
нет, не попадет.
В таких условиях построить нормальный диалог невозможно.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 12:54
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот жесть, честное слово:
я буду готов рассматривать секцию бинарника,
когда вы сравните версию с дефайном с версией с константой.

а не когда вы тупо удалили код и сказали: о боже! размер изменился!

мы же рассматриваем различные подходы для одного и того же действия.

выведите мнек цыферку 45 при помощи макроса, или при помощи константы.

но не нужно полностью удалять эту циферку,
и потом кричать: "размер изменился!"

Цитата Сообщение от Tulosba Посмотреть сообщение
В таких условиях построить нормальный диалог невозможно.
разумеется.


ведь то, что вы сейчас постулируете - в этом отсутствует здравый смысл.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.10.2015, 13:19
Цитата Сообщение от hoggy Посмотреть сообщение
хотите сказать, что я это придумал?
Понятия не имею. Можно, конечно, оперировать колхозными терминами, называть системный блок словом "процессор" или называть internet explorer словом "интернет". Всё зависит от того, насколько визави готов к колхозным терминам

Цитата Сообщение от hoggy Посмотреть сообщение
какие то проблемы?
Если ты не видишь разницы между "адресом переменной" и "адресом константы", то, видимо, проблем нет

Цитата Сообщение от hoggy Посмотреть сообщение
вам знаком термин "inline подстановка"?
Знаком

Цитата Сообщение от hoggy Посмотреть сообщение
вы понимаете, что это значит?
Понимаю

Не по теме:

Тема превратилась в очередной срач

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:22
Цитата Сообщение от Evg Посмотреть сообщение
Понятия не имею. Можно, конечно, оперировать колхозными терминами
а можно почитать стандарт языка с++
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.10.2015, 13:23
Цитата Сообщение от hoggy Посмотреть сообщение
ведь то, что вы сейчас постулируете - в этом отсутствует здравый смысл.
Прежде чем отвечать, читай полностью, что тебе пишут. А то складывается впечатление, что ты читаешь половину, потом из того что прочитал ещё половину интерпретируешь своим особенным образом. В итоге делаешь неверные выводы, которые повергают других в шок. И вот тут начинается срач в теме на N бессмысленных сообщений.

Кстати, ссылка-то открылась у тебя хоть какая-то про статический константный член класса, или файервол до сих пор не пускает?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:24
Цитата Сообщение от Evg Посмотреть сообщение
Если ты не видишь разницы между "адресом переменной" и "адресом константы", то, видимо, проблем нет
есть шаблон, который принимает адрес чевота, и выводит его в консольку:


C++
1
2
3
4
foo(const auto* p)
{
    std::cout << p <<std::endl;
}
объясните мне (и компилятору), какую такую сакральную разницу мы должны понимать?

Добавлено через 29 секунд
Цитата Сообщение от Evg Посмотреть сообщение
Знаком
какие тогда у вас сложности с пониманием материала?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.10.2015, 13:26
Цитата Сообщение от hoggy Посмотреть сообщение
какую такую сакральную разницу мы должны понимать?
Например, такую, что первый код будет работать, а второй нет

C++
const int a = 10;
foo (&a);
C++
foo (&10);
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:27
Цитата Сообщение от Tulosba Посмотреть сообщение
Прежде чем отвечать, читай полностью, что тебе пишут. А то складывается впечатление, что ты читаешь половину,
вы в своем коде (см #61)

в одном случае выводите константу.
а в другом вообще её не выводите.

задайте себе вопрос: нахрена вы сделали такой тест?
как это соотносится с темой "дефайны против констант"?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
25.10.2015, 13:27
Цитата Сообщение от hoggy Посмотреть сообщение
какие тогда у вас сложности с пониманием материала?
Смысл слова "inline" я объяснил выше
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:31
Цитата Сообщение от Evg Посмотреть сообщение
Например, такую, что первый код будет работать, а второй нет
и какое это имеет отношение к функции foo?

ей то какая разница?

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

так что разницы не будет.

можете глянуть ассмо-выхлоп.

http://rextester.com/EOQ15501

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
 
void bar(auto&& )
{
    std::cout<< "ololo\n";
}
 
 
void foo(auto&& p)
{
    bar(&p);
}
 
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    foo(10);
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.10.2015, 13:32
Цитата Сообщение от hoggy Посмотреть сообщение
нахрена вы сделали такой тест?
Для тебя же и сделал, потому что ты ответил, что значение НИКУДА не попадает.
Цитата Сообщение от hoggy Посмотреть сообщение
как это соотносится с темой "дефайны против констант"?
Название темы "Чем же макрос define так плох?", снова ты додумываешь того, чего нет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:39
Цитата Сообщение от Tulosba Посмотреть сообщение
Для тебя же и сделал, потому что ты ответил, что значение НИКУДА не попадает.
я мыслю в контексте темы.
то бишь, понятно что попадает, но не более и не менее, чем в случае с дефайнами.
потому что компилятор не телепат.

однако,
константы, у которых не просили адреса, не кушают оперативную память.

в каком контексте мыслите вы? вот этого мне не понятно,
потому что у вас присутствует утеря здравого смысла.

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Название темы "Чем же макрос define так плох?", снова ты додумываешь того, чего нет.
там человечек выше писал, мол они жрут память.

я наглядно опровергаю этот тезис.

демонстрируя, что дефайны не имеют никаких приимуществ перед константами в этом смысле.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.10.2015, 13:49
Цитата Сообщение от hoggy Посмотреть сообщение
я мыслю в контексте темы.
Оно и видно, ещё бы не плохо научиться читать, что внутри темы написано.
Цитата Сообщение от hoggy Посмотреть сообщение
в каком контексте мыслите вы?
В контексте конкретных сообщений внутри конкретной темы.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 13:54
Цитата Сообщение от Tulosba Посмотреть сообщение
Оно и видно, ещё бы не плохо научиться читать, что внутри темы написано.
краеугольный камень данной темы: приимущества дефайнов против констант.
хотите сказать, что я неверно истолковал мотив автора?

Цитата Сообщение от Tulosba Посмотреть сообщение
В контексте конкретных сообщений внутри конкретной темы.
в вашем случае присутствует утеря здравого смысла,
потому что вы сравнивали не "дефайны против констант",
а "константу с ничем"

ваш тест никак не соотносится с изучаемой проблемой.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
25.10.2015, 19:53
Герб Саттер, "Новые сложные задачи на C++".
Не по теме, просто пусть будет здесь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2015, 19:53

Чем плох goto?
Вы хотели интересных тем? Так вот, я на днях думал, а почему goto так плох, и решил загуглить, почему же? Я нагуглил вот эту статью и, мне...

Чем плох make?
Дали написать реферат по make файлам и соответственно указать его минусы, а значит сравнить его с такими утилитами как CMake, но для меня...

Чем плох управляемый С++?
Я дико извиняюсь за подобную тему... но дело в том, что мне сегодня задали этот вопрос и, собственно, я не смог на него ответить. Сам я...

Чем плох void main?
Встретил мнение, что void main() - не канон и даже плохо. Но статья древняя, 1996 года, и даже автор открестился, сказав, что для новых...

Чем плох ProBuilder (Unity3D)?
Мне советовали не использовать ProBuilder, а моделить в какой-нибудь проге - текстурить и потом эспортировать в юнити. Аргументировали это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
116
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru