Как дважды объединить с препроцессором C и развернуть макрос как в «arg ## _ ## MACRO»?
Я пытаюсь написать программу, в которой имена некоторых функций зависят от значения определенной макропеременной с помощью макроса:
#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE
int NAME(some_function)(int a);
К сожалению, макросNAME()
превращает это в
int some_function_VARIABLE(int a);
скорее, чем
int some_function_3(int a);
так что это явно неправильный путь. К счастью, число различных возможных значений для VARIABLE мало, поэтому я могу просто сделать#if VARIABLE == n
и перечислить все случаи отдельно, но мне было интересно, есть ли умный способ сделать это.