реклама на сайте
подробности

 
 
> Вызов «xcat(xcat(1, 2), 3)» будет заменён на «123», не хватает мозга понять!
ViKo
сообщение Apr 7 2018, 19:41
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Что в книге Кернигана с Ричи, что на просторах интернет говорится о том что во вложенных макросах надо объединять строки в два этапа:
#define cat(x,y) x##y
#define xcat(x,y) cat(x,y)
и тогда уже будет нормально выполняться
xcat(xcat(1,2),3)
Как пройти по шагам, что при этом будет выполняться?
В Википедии бред какой-то наблюдаю. Также и во многих интернетных статьях.
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%...80_%D0%A1%D0%B8
http://we.easyelectronics.ru/Soft/preprocessor-c.html
https://www.opennet.ru/docs/RUS/cpp/cpp-5.html
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Apr 7 2018, 19:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Apr 7 2018, 22:41) *
Как пройти по шагам, что при этом будет выполняться?

В свойствах проекта IAR, например, есть чекбокс "Preprocessor output to file".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 7 2018, 19:52
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Apr 7 2018, 22:47) *
В свойствах проекта IAR, например, есть чекбокс "Preprocessor output to file".

Да ну... там конечный результат будет выдан. Мне промежуточные нужны, как в Википедии показано. Но там неправильно, на мой тупой взгляд.

P.S. и стандарт листал, и все равно не понял
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 7 2018, 20:01
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Eclipse показывает 4 шага:

Код
xcat(cat(1,2),3)
xcat(12,3)
cat(12,3)
123


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Вызов «xcat(xcat(1, 2), 3)» будет заменён на «123»   Apr 7 2018, 19:41
- - ViKo   То есть, сначала в аргументе макрофункции произошл...   Apr 7 2018, 20:18
- - ViKo   Точнее, вопрос, почему в макрофункции cat(cat(1,2)...   Apr 8 2018, 05:19
|- - SSerge   Цитата(ViKo @ Apr 8 2018, 12:19) Точнее, ...   Apr 8 2018, 10:31
|- - AHTOXA   Цитата(ViKo @ Apr 8 2018, 10:19) Точнее, ...   Apr 8 2018, 10:33
- - ViKo   Ага, так в выражении: Если в замещающей последоват...   Apr 9 2018, 09:40
- - Baser   Если есть желание совсем "надломить моск...   Apr 9 2018, 09:54
- - ViKo   Спасибо, почитаем-с! Я, в принципе, пользуюсь ...   Apr 9 2018, 10:01
- - XVR   Можно проще - # и ## применяются ДО ТОГО, как прои...   Apr 9 2018, 11:02
- - Arlleex   В общем это тема для меня пока что не совсем понят...   May 4 2018, 07:50
|- - Baser   Цитата(Arlleex @ May 4 2018, 10:50) Это в...   May 4 2018, 13:42
- - Arlleex   Кодпотому что каждый раз макросы разворачиваются д...   May 4 2018, 16:36
|- - Baser   Цитата(Arlleex @ May 4 2018, 19:36) funct...   May 4 2018, 18:23
- - Arlleex   Ну да, получается, что так. Спасибо   May 4 2018, 18:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016