|
Вызов «xcat(xcat(1, 2), 3)» будет заменён на «123», не хватает мозга понять! |
|
|
|
 |
Ответов
|
Apr 9 2018, 09:40
|

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

|
Ага, так в выражении: Если в замещающей последовательности перед параметром не стоит знак #, если и ни перед ним, ни после него нет знака ##, то лексемы аргумента проверяются на наличие в них макровызовов; если таковые есть, то до подстановки аргумента в нём выполняется раскрытие соответствующих макросов. "если таковые есть" относится к макровызовам, а не к знакам # и ##
Так вижу правило макроподстановок касательно стрингизации и склеивания: Если в замещающем выражении макроопределения перед параметром нет знака # или между параметрами нет знака ##, то лексемы параметров проверяются на наличие в них макроопределений и замещаются раскрытыми макроопределениями. В противном случае параметры не проверяются на наличие в них макроопределений, а подставляются в замещающую последовательность как есть.
Рассмотрим макроподстановки xcat(xcat(1,2),3) Видим первый внешний xcat. Смотрим, в его макроопределении (cat(x,y)) нет # или ##. Проверяем параметры xcat(1,2) и 3 этого внешнего xcat на наличие макроопределений. Находим xcat внутренний. Смотрим, в его макроопределении (cat(x,y)) нет # или ##. Проверяем его параметры 1 и 2 внутреннего xcat на наличие макроопределений. Для них макроопределений нет. Подставляем макроопределение внутреннего cat, который превращается в 12. Подставляем вместо первого параметра во внешний cat. Подставляем макроопределение внешнего cat. Получаем 123.
|
|
|
|
Сообщений в этой теме
ViKo Вызов «xcat(xcat(1, 2), 3)» будет заменён на «123» Apr 7 2018, 19:41 jcxz Цитата(ViKo @ Apr 7 2018, 22:41) Как прой... Apr 7 2018, 19:47 ViKo Цитата(jcxz @ Apr 7 2018, 22:47) В свойст... Apr 7 2018, 19:52  AHTOXA Eclipse показывает 4 шага:
Кодxcat(cat(1,... Apr 7 2018, 20:01 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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|