#c #metaprogramming #c-preprocessor #c99
#c #метапрограммирование #c-препроцессор #c99
Вопрос:
В a #define
можно использовать A ## B
для объединения переменных препроцессора и определения идентификатора.
#define ADD_UNDERSCORE(X) X##_
/* ADD_UNDERSCORE(n) -> n_ */
Существует ли эквивалентная левая сторона #define ? Например.
#define A a
#define B b
#define A##B(X) X
/* ab(n) -> n */
Комментарии:
1. В комментарии во втором примере вы имеете в виду
ab(n) -> n
? Я не совсем понимаю, чего вы пытаетесь достичь.2. @Vicky: да, я имел в виду
ab(n)
, исправлено.
Ответ №1:
Нет. В определении макроса первым токеном после define
должен быть идентификатор ((проект) ISO / IEC 9899; 1999, 6.10, стр. 149).
Нет другой предварительной обработки #define
директив, которая могла бы создать идентификатор из чего-то другого. В частности, стандарт определяет (6.10.3):
Токены предварительной обработки в директиве предварительной обработки не подлежат расширению макроса, если не указано иное.
И для имени макроса не указано «иначе».
Комментарии:
1. Очень жаль. 🙁 Спасибо за точный ответ!