Re[3]: Головоломка с const
От: vsb Казахстан  
Дата: 14.01.23 10:58
Оценка: :)
Здравствуйте, rg45, Вы писали:

vsb>>Да поставь define и всё, как деды писали, зачем тебе нужны эти новомодные константы, одни проблемы от них.


R>Ну вот, а говорил
Автор: vsb
Дата: 13.01.23
, что перфекционист. Это несколько неожиданный совет от перфекциониста.


Ну правильный ответ ты уже дал, а написать что-то мне в субботу хочется )

Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.
Отредактировано 14.01.2023 10:59 vsb . Предыдущая версия .
Re: Головоломка с const
От: Iso12  
Дата: 14.01.23 11:19
Оценка: 8 (1)
Здравствуйте, Shmj, Вы писали:

Есть неплохой доклад на эту тему на CPPCON 2021 :
Back to Basics: const and constexpr — Rainer Grimm
Доклад
Re[9]: Головоломка с const
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.01.23 11:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

Pzz>>И с ними надо что-то делать, на уровне линкера. Это — часть этого механизма.

LVV>Спасибо.
LVV>Саму схему линкования я студням рассказывал, но до такой конкретики не опускался.

Я это очень поверхностно знаю. Мне Юра Харон, известный больше в ФИДО, чем тут, по телефону рассказывал

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

LVV>На эту тему есть неплохая книжки (и по-моему единственная) Линкеры и загрузчики (не переведена у нас — а зря).


Это — очень старая книжка. С появлением C++ появились новые проблемы, типа этой, которых раньше не было.

Вроде был советский перевод, но я на 100% не уверен.
Re[10]: Головоломка с const
От: LaptevVV Россия  
Дата: 14.01.23 11:30
Оценка:
Pzz>Но меня вымораживает, если честно, что преподаватель C++ не знает таких вещей. Я C++ не знаю, сознательно прошел мимо него, а и то в курсе.
Это одна конкретная реализация конкретной фирмы.
Тем более, я микрософт не люблю...
Если для работы понадобится — я разберусь.
Я и внутрь gcc не лазил -потребности же не было серьезной.
LVV>>На эту тему есть неплохая книжки (и по-моему единственная) Линкеры и загрузчики (не переведена у нас — а зря).
Pzz>Это — очень старая книжка. С появлением C++ появились новые проблемы, типа этой, которых раньше не было.
Да, я ее в конце 90-х еще с инета качал.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Головоломка с const
От: AleksandrN Россия  
Дата: 14.01.23 21:07
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.


#define — не объявление константы, а подстановка символов вместо макроса.

Однажды он напишет что-то вроде
#define A 2
#define B 3
#define C A + B

и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.
Re[5]: Головоломка с const
От: пффф  
Дата: 14.01.23 23:45
Оценка:
Здравствуйте, AleksandrN, Вы писали:

vsb>>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.


AN>#define — не объявление константы, а подстановка символов вместо макроса.


AN>Однажды он напишет что-то вроде

AN>
AN>#define A 2
AN>#define B 3
AN>#define C A + B
AN>

AN>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.


Шмыги, не желающие ничего изучать — должны страдать.

Но, как я помню недавние дискуссии — ему это не грозит. Он C++ уже пару недель изучает, и не нашел там ничего сложного
Re[4]: Головоломка с const
От: Doom100500 Израиль  
Дата: 15.01.23 10:20
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.



Не, тут только в дальнобойщики идти. Програмирование на этом — всё .
Спасибо за внимание
Отредактировано 15.01.2023 10:21 Doom100500 . Предыдущая версия .
Re[5]: Головоломка с const
От: vsb Казахстан  
Дата: 15.01.23 10:24
Оценка: +1
Здравствуйте, AleksandrN, Вы писали:

AN>Однажды он напишет что-то вроде

AN>
AN>#define A 2
AN>#define B 3
AN>#define C A + B
AN>

AN>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.

Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.
Отредактировано 15.01.2023 10:24 vsb . Предыдущая версия .
Re[6]: Головоломка с const
От: Doom100500 Израиль  
Дата: 15.01.23 11:07
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, AleksandrN, Вы писали:


AN>>Однажды он напишет что-то вроде

AN>>
AN>>#define A 2
AN>>#define B 3
AN>>#define C A + B
AN>>

AN>>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.

vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.


Ключевое слово — учат.
Спасибо за внимание
Re[6]: Головоломка с const
От: rg45 СССР  
Дата: 15.01.23 11:20
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.


Только это не отменяет того факта, что макросы — это просто манипуляции с текстом, которые выполняются до того, как текст программы передается компилятору. Поэтому называть макроопределение объявлением константы — это несколько неправильно — никаких констант не создается при этом.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 15.01.2023 13:50 rg45 . Предыдущая версия . Еще …
Отредактировано 15.01.2023 11:21 rg45 . Предыдущая версия .
Re[6]: Головоломка с const
От: _NN_ www.nemerleweb.com
Дата: 15.01.23 14:08
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, AleksandrN, Вы писали:


AN>>Однажды он напишет что-то вроде

AN>>
AN>>#define A 2
AN>>#define B 3
AN>>#define C A + B
AN>>

AN>>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.

vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.


И учат ставить всегда пробелы

#define A(b) 0x123e+(b)
int x = A(1); // error: invalid suffix "+" on integer constant

#define B(b) 0x123e + (b)
int y = B(1); // Работает как ожидается
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 15.01.2023 14:09 _NN_ . Предыдущая версия .
Re[4]: Головоломка с const
От: B0FEE664  
Дата: 16.01.23 13:39
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>P.S. А чем тебе новомодный constexpr-то не угодил? Или в макинтош его еще не завезли?


Скорее всего у него отсутствует строчка CONFIG += c++17 в его .pro проекте.
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.