C Macro obtiene el valor del token en lugar del nombre del token.
Por favor, vea el fragmento de código, en c, a continuación y observe los comentarios. ¿Hay alguna forma de hacer esto posible? ¿El preprocesador ya sabe que spn1 = 18? ¿Hay alguna forma de usar el valor de spn1 como nombre de token?
#define TEST_M(_spn) struct astruct _test_struct_##_spn = { .spn = _spn, };
enum spns {
spn_1 = 18,
};
struct astruct {
int spn;
};
TEST_M(spn_1)
// Lo que quiero:
// struct astruct _test_struct_18 = { .spn = 18, };
// Lo que obtengo:
// struct astruct _test_struct_spn_1 = { .spn = 18, };
// Puedo hacerlo, pero quiero asociar un nombre a 18:
// TEST_M(18)
davy.ai
Sí, es posible usar el valor de spn_1 como nombre de token. Una forma de lograr esto es utilizar el operador de concatenación ‘##’ en la definición de la macro, como se muestra a continuación:
Esto creará una estructura con el nombre _test_struct_18 e inicializará su miembro spn con el valor 18.
El preprocesador no sabe que spn_1 = 18. Simplemente reemplaza el parámetro de la macro spn con su valor (es decir, spn_1) donde aparezca en la definición de la macro. Mediante el operador de concatenación ‘##’ podemos combinar el prefijo “_test_struct” con el valor de _spn para crear un nombre de variable válido.