Como concatenar duas vezes com o pré-processador C e expandir uma macro como em “arg ## _ ## MACRO”?

Eu estou tentando escrever um programa onde os nomes de algumas funções são dependentes do valor de uma determinada variável de macro com uma macro como esta:

#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE

int NAME(some_function)(int a);

Infelizmente, a macroNAME() transforma isso em

int some_function_VARIABLE(int a);

ao invés de

int some_function_3(int a);

Então, este é claramente o caminho errado para fazê-lo. Felizmente, o número de diferentes valores possíveis para VARIABLE é pequeno, então eu posso simplesmente fazer um#if VARIABLE == n e listar todos os casos separadamente, mas eu queria saber se existe uma maneira inteligente de fazer isso.

questionAnswers(2)

yourAnswerToTheQuestion