unir una sirve que para funcion concatenar caracteres caracter cadenas cadena c string c-preprocessor

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"