Как объединить строки с точками в препроцессоре C?

Я прочитал следующий вопрос, и ответ кажется достаточно ясным: Как выполнить двойную конкатенацию с препроцессором C и расширить макрос, как в "arg##_##MACRO"?

Но что, если ПЕРЕМЕННАЯ имеет точку в конце?

Я пытаюсь написать простой макрос, увеличивающий счетчики в структуре для целей отладки. Я могу легко сделать это даже без помощи из приведенного выше вопроса, просто с помощью

#ifdef DEBUG
#define DEBUG_INC_COUNTER(x) x++
#endif

и назвав его

DEBUG_INC_COUNT(debugObj.var1);

Но добавив «debugObj.» каждому макросу кажется ужасно избыточным. Однако, если я попытаюсь объединить :

#define VARIABLE debugObj.
#define PASTER(x,y) x ## y++
#define EVALUATOR(x,y)  PASTER(x,y)
#define DEBUG_INC_COUNTER(x) EVALUATOR(VARIABLE, x)
DEBUG_INC_COUNTER(var)

gcc -E macro.c

, я получу

macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token

. Так как же мне изменить это, чтобы

DEBUG_INC_COUNTER(var);

генерировал

debugObj.var++;

?

5
задан Community 23 May 2017 в 12:00
поделиться