¿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.