una - strcmp c++ para que sirve
Macro para concatenar dos cuerdas en C (3)
El derecho de hacerlo es colocar las 2 cuerdas una al lado de la otra. ''##'' no funcionará. Sólo:
#define concatenatedstring string1 string2
Estoy tratando de definir una macro que se supone que toma 2 valores de cadena y los devuelve concatenados con un espacio entre ellos. Parece que puedo usar cualquier personaje que quiera además del espacio, por ejemplo:
#define conc(str1,str2) #str1 ## #str2
#define space_conc(str1,str2) conc(str1,-) ## #str2
space_conc(idan,oop);
space_conc
devolvería "idan-oop"
Quiero algo para devolver "idan oop", sugerencias?
Prueba esto
#define space_conc(str1,str2) #str1 " " #str2
El ''##'' se utiliza para concatenar símbolos, no cadenas. Las cadenas simplemente se pueden yuxtaponer 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 usas como este space_conc(hello, world)
) y los coloca uno al lado del otro con la cadena simple, de un solo espacio, entre ellos. Es decir, la expansión resultante sería interpretada por el compilador de esta manera.
"hello" " " "world"
que va a concatenar
"hello world"
HTH
Editar
Para completar, el operador ''##'' en la expansión de macros se usa así, digamos que tiene
#define dumb_macro(a,b) a ## b
resultará en lo siguiente si se llama como dumb_macro(hello, world)
helloworld
que no es una cadena, sino un símbolo y probablemente terminará con un error de símbolo indefinido que dice que ''helloworld'' no existe a menos que lo defina primero. Esto sería legal:
int helloworld;
dumb_macro(hello, world) = 3;
printf ("helloworld = %d/n", helloworld); // <-- would print ''helloworld = 3''
#define space_conc(str1, str2) #str1 " " #str2
printf("%s", space_conc(hello, you)); // Will print "hello you"