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

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

08.01.2010, 03:29. Показов 20586. Ответов 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
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.10.2015, 22:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от castaway Посмотреть сообщение
Почему/по какой причине оно может измениться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
 
void foo ( const int & x )
{
    const_cast<int&>(x) = 10 ;
}
 
 
 
const int & bar ()
{
    static const volatile int cv = 5 ;
    return const_cast<const int&>(cv) ;
}
 
 
 
int main()
{
    std::cout << bar() << std::endl ;
    foo(bar()) ;
    std::cout << bar() << std::endl ;
}
http://rextester.com/SJSNG36240
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.10.2015, 22:09
Я начинаю понимать что вы имеете в виду. Просто меня больше интересовало понятие "неконстантная константа" по канонам языка...
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
#include <cstdio>
 
int main() {
    const int i = 123;
    printf( "%p - %d\n", &i, i );
    int & j = const_cast<int &>( i );
    ++j;
    printf( "%p - %d\n", &j, j );
}


Добавлено через 4 минуты
ValeryS, ну это ты загнул конечно))
0
24.10.2015, 22:22

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
ну это ты загнул конечно))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
 
 
 
const volatile int & bar ()
{
    static const volatile int cv = 5 ;
    return cv ;
}
 
 
 
int main()
{
    int arr[1] ;
    std::cout << bar() << std::endl ;
    arr[-(arr - &bar())] = 10 ; 
    std::cout << ( arr + -(arr - &bar()) ) << std::endl ;
    std::cout << bar() << std::endl ;
}
http://rextester.com/CPJIK90737
чисто поржать :D

0
24.10.2015, 22:29

Не по теме:

Croessmah, тебе бы обфускатором работать))

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.10.2015, 22:42
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
static const volatile int cv = 5 ;
Только вот при таком определении будет UB при попытке изменить переменную cv. Т.к. volatile подразумевает изменение извне кода (чтобы компилятор не пытался оптимизировать доступ). А убирание константности через const_cast с дальнейшей записью как бы ничем не отличается от случая, если бы volatile не было вовсе. Т.е. попытка записать в константную ячейку.

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
тебе бы обфускатором работать))
а ты разве не знал, что Croessmah переводится как Обфускатор?

1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.10.2015, 22:47

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Croessmah переводится как Обфускатор?
croessmah - это уже обфусцированное имя :)



Добавлено через 35 секунд
Цитата Сообщение от Tulosba Посмотреть сообщение
Только вот при таком определении будет UB
так никто не утверждает обратного.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.10.2015, 22:55
Цитата Сообщение от Croessmah Посмотреть сообщение
так никто не утверждает обратного.
Ну никто из Croessmah'ов и не утверждал не обратного. Или утверждал?

Не по теме:

P.S. Надо в подпись добавить "Если не оговорено обратное, код может содержать UB" :)

0
24.10.2015, 22:56

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
P.S. Надо в подпись добавить "Если не оговорено обратное, код может содержать UB"
Такую подпись следует сделать доброй половине форума))

0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.10.2015, 23:03
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну никто из Croessmah'ов и не утверждал не обратного. Или утверждал?
Не обратного не утверждал, думаю, здесь все посвящены в это и так.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
24.10.2015, 23:06
бяда С(и плюсов) в том что он пытается быть языком высокого уровня и в тоже время разрешает низкоуровневый доступ
и в результате на каждое нововведение ограничивающие программиста, найдется "финт ушами" который это нововведение нивелирует
если есть неконтролируемый доступ к памяти, особенно на архитектуре фон Немана,считай что все ограничения обошли
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.10.2015, 23:16
ValeryS, это не беда плюсов, это беда холиварщиков.
3
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
24.10.2015, 23:20
Цитата Сообщение от castaway Посмотреть сообщение
это беда
Цитата Сообщение от ValeryS Посмотреть сообщение
бяда
видишь как я слово написал что как бы подразумевает
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.10.2015, 23:23
Цитата Сообщение от ValeryS Посмотреть сообщение
видишь как я слово написал что как бы подразумевает
Ну, если читать далее, то как бы не совсем подразумевает...
0
24.10.2015, 23:26

Не по теме:

Так вот подумал сейчас, что тему надо вообще на N разбить:
1. Исходная
2. Занимают ли память константы
3. Могут ли константы быть переменными
4. Почему Croessmah обфусцирован
5. В чем отличие бяды Си(++) от беды Си(++)
и т.д.

0
24.10.2015, 23:30

Не по теме:

Tulosba, ты чертовски прав, приятель:D

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
4. Почему Croessmah обфусцирован

))))))))))))))))))))))))))))))))))))...) )))))))))

0
24.10.2015, 23:30

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Так вот подумал сейчас, что тему надо вообще на N разбить:
как по мне, так пора просто её закрыть. Вроде всё уже сказали :)
Цитата Сообщение от Tulosba Посмотреть сообщение
4. Почему Croessmah обфусцирован
это одна из величайших нерешенных задач современности. Обсуждение сего предмета - большой холивар и прямой путь в психушку :)

0
24.10.2015, 23:32

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Вроде всё уже сказали
hoggy ещё не высказался по ссылкам, которые, надеюсь всё же у него откроются.

0
Evg
24.10.2015, 23:45

Не по теме:

Словом "inline" называют подстановку тела функции в точку её вызова, а не подстановку значения const-переменной в точку её обращения (это уже constant propagation или что-то типа того)

const - НЕ означает "константный", а означает "немодифицируемый". Ссылка на всякий случай: [Задача] const volatile

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.10.2015, 12:19
Цитата Сообщение от Tulosba Посмотреть сообщение
Убираем константу:
хех, вы не поняли.

"убрать константу" в данном случае значит заменить её не константой.

а не убрать целиком и полностью.

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

Цитата Сообщение от Tulosba Посмотреть сообщение
Как вообще можно было предположить, что значение явно присутствующее в исходном файле, может выводиться на консоль и при этом НИГДЕ не храниться?
когда я выше писал:
компилятор значения констант inline подстановками профигачит.

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

----------------------------------------

в памяти не хранится.

(секцию бинарника для кода я не рассматриваю в принципе)

Добавлено через 5 минут
Цитата Сообщение от Evg Посмотреть сообщение
"Пример выше" это который?
см #43.
Цитата Сообщение от Evg Посмотреть сообщение
Из этого никак не следует, что const-переменная является константой
это не принципиально.
const-переменная является константой просто потому,
что у неё такой квалификатор.

при этом она может и не быть константой времени компиляции.
но это так же не принципиально.

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

Цитата Сообщение от Evg Посмотреть сообщение
Он веник называет пряником, а потому и сложно понять, чего он говорит
я называю адресом значение указателя.

вы можете привести пример хотя бы одного такого случая, когда я веник называл пряником.
потому что сейчас ваши речи - ложь и клевета.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.10.2015, 12:27
Цитата Сообщение от hoggy Посмотреть сообщение
вы можете привести пример хотя бы одного такого случая, когда я веник называл пряником
Словом "константа" называть переменную
Использовать понятие "адрес константы"
Словом "inline" называть пропагирование константного значения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2015, 12:27

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru