Подтвердить что ты не робот

C: развернуть макрос с вставкой токена

Итак, вот несколько макросов, которые я создал:

#define MODULE_NAME moduleName
#define MODULE_STRUCT MODULE_NAME ## _struct
#define MODULE_FUNCTION(name) MODULE_NAME ## _ ## name

После этих определений мне бы хотелось, чтобы произошли следующие расширения:

MODULE_STRUCT   -->   moduleName_struct
MODULE_FUNCTION(functionName)    -->    moduleName_functionName

Однако, когда я добавляю операторы вставки маркера, расширение MODULE_NAME в MODULE_FUNCTION и MODULE_STRUCT больше не происходит... Кажется, что MODULE_NAME считается литеральной строкой при вставке их вместе.

Есть ли способ обойти это?

4b9b3361

Ответ 1

В C операнды оператора ввода-вывода ## не расширяются.

Вам понадобится второй уровень косвенности, чтобы получить расширение.

#define CAT(x, y) CAT_(x, y)
#define CAT_(x, y) x ## y