Я прочитал следующий вопрос, и ответ кажется достаточно ясным: Как выполнить двойную конкатенацию с препроцессором 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++;
?