¿Cómo concatenar dos veces con el preprocesador de C y expandir una macro como en “arg ## _ ## MACRO”?

Estoy tratando de escribir un programa donde los nombres de algunas funciones dependen del valor de una determinada variable de macro con una macro como esta:

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

int NAME(some_function)(int a);

Desafortunadamente, la macroNAME() convierte eso en

int some_function_VARIABLE(int a);

más bien que

int some_function_3(int a);

así que esta es claramente la forma incorrecta de hacerlo. Afortunadamente, el número de diferentes valores posibles para VARIABLE es pequeño, así que simplemente puedo hacer una#if VARIABLE == n y enumere todos los casos por separado, pero me preguntaba si hay una forma inteligente de hacerlo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta