probar este
#define space_conc(str1,str2) #str1 " " #str2
El '##' se utiliza para concatenar los símbolos, no cadenas. Las cadenas pueden simplemente yuxtaponerse en C, y el compilador las concatenará, que es lo que hace esta macro. Primero convierte str1 y str2 en cadenas (digamos "hola" y "mundo" si lo usa así space_conc(hello, world)
) y los coloca uno al lado del otro con la cadena simple de un espacio entremedio. Es decir, la expansión resultante sería interpretado por el compilador como esto
"hello" " " "world"
que se va a concatenar
"hello world"
HTH
Editar
Para completar, el '# # 'operador en macro expansión se usa así, digamos que tiene
#define dumb_macro(a,b) a ## b
dará lugar a la siguiente si es llamado como dumb_macro(hello, world)
helloworld
que no es una cadena, sino un símbolo y que probablemente va a terminar con un error de símbolo no definido diciendo 'Hola Mundo' no existe a menos tu lo defines primero Esto sería legal:
int helloworld;
dumb_macro(hello, world) = 3;
printf ("helloworld = %d\n", helloworld); // <-- would print 'helloworld = 3'
Tenga en cuenta que esto no es necesariamente tonta si está haciendo algo como 'dumb_macro (mypackage, mifuncion)' ... –
@R, por supuesto, el concepto tiene usos, pero es generalmente conectada. a algún otro valor semántico, o la opción de reemplazar la macro con otra cosa (como, por ejemplo, para la depuración). No quería sumergirme en algo así, así que este en particular es solo una tonta macro concatenando dos nombres de símbolos sin ningún propósito real ... :) – falstro
whoa esa es una gran respuesta. Quería saber cómo hacer esa concatenación de símbolos. Es realmente útil. – Anubis