Nightmare1
@Nightmare1
Программист

Почему не компилируется макрос?

#define ОпределениеНазвания(НАЗВАНИЕ) _с__Машинный__ ## НАЗВАНИЕ

#define Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) \
    ОпределениеНазвания(НАЗВАНИЕ1 ## _ ## НАЗВАНИЕ2)

#define НФлагИнициализации(НАЗВАНИЕ1, НАЗВАНИЕ2) \
    Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) ## флаг_инициализации


../Стороннее/webdriverxx/src/include/webdriverxx/detail/to_string.h:120:42: warning: multi-character character constant [-Wmultichar]
  120 |                         result.push_back('//');
      |                                          ^~~~
In file included from ../Исходники/Машинный/Определения/Типы Данных/../Шаблон Перечислений.hpp:4,
                 from ../Исходники/Машинный/Определения/Типы Данных/Базовые.h:100,
                 from ../Исходники/Машинный/Определения/Типы Данных.h:12,
                 from ../Исходники/Машинный/Определения/Определения.h:15,
                 from ../Исходники/Машинный/Определения.h:5,
                 from ../Исходники/Точка Входа.cpp:3:
../Исходники/Машинный/Определения/Типы Данных/../Уловки Кода.hpp:30:46: error: pasting ")" and "флаг_инициализации" does not give a valid preprocessing token
   30 |     Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) ## флаг_инициализации
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему не компилируется макрос?

#define НФлагИнициализации(НАЗВАНИЕ1, НАЗВАНИЕ2) \
    Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) ## флаг_инициализации


error: pasting ")" and "флаг_инициализации" does not give a valid preprocessing token

потому что ты думаешь, что сначала выполнится подстановка макроса Определение2Названия, а потом к результату будет приклеен флаг_инициализации, в то время как на самом деле сначала препроцессор делает подстановку НАЗВАНИЕ1 и НАЗВАНИЕ2 и приклеивает флаг_инициализации к скобочке, после чего рапортует тебе о том, что полученный результат выглядит не очень.
Чтобы заработало тебе прийдётся тащить ## флаг_инициализации внутрь Определение2Названия.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы