Эквивалент хеш-хэша в имени определения - PullRequest
2 голосов
/ 28 октября 2011

В #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 Ответ

4 голосов
/ 28 октября 2011

Нет.В определении макроса первым токеном после define должен быть идентификатор ( (черновик) ИСО / МЭК 9899; 1999 , 6.10, стр. 149).

Нет другой предварительной обработки директив #define, которая могла бы сделать идентификатор из чего-то еще.В частности, стандарт определяет (6.10.3):

Токены предварительной обработки в директиве предварительной обработки не подлежат расширению макросов, если не указано иное.не указано «иначе» для имени макроса.

...