Как дважды объединить с препроцессором 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 и перечислить все случаи отдельно, но мне было интересно, есть ли умный способ сделать это.

Ответы на вопрос(2)

Ваш ответ на вопрос