Препроцессор C разбивает исходный текст на токены и выполняет только расширения, соответствующие этим токенам.Обычно это ожидаемое поведение, но иногда нет.
Возьмите этот пример, я хотел бы реализовать некоторую функциональность, подобную шаблону, хорошим способом.Обычно это реализовано так:
#define add_function_template(mytype) \
mytype add_##mytype(mytype a, mytype b) { \
return a + b; \
}
Оператор конкатенации ##
расширяет это, но необходимость заключать в кавычки всю функцию с обратной косой чертой очень громоздко.Можно ли как-то сделать подобное расширение для имени функции вне тела макроса?
Например, что-то вроде
#define TYPENAME int
TYPENAME add_TYPENAME(TYPENAME a, TYPENAME b) {
return a + b;
}
Идентификатор add_TYPENAME
не раскрывается, остальное -.Нет, как я могу расширить такие идентификаторы?Вспомогательные макросы тоже были бы в порядке, но я не могу найти какой-либо разумный способ ...