Quiero concat un literal de cadena y literal de char. Al ser sintácticamente incorrecta, "abc" 'd' "efg"
hace que un error del compilador:Concatenar literal de cadena con literal de char
x.c:4:24: error: expected ',' or ';' before 'd'
Por ahora tengo que usar snprift (innecesariamente), a pesar del valor de cadena literal y el ser literal carbón saber en tiempo de compilación.
me trataron
#define CONCAT(S,C) ({ \
static const char *_r = { (S), (C) }; \
_r; \
})
pero no funciona porque el terminador nulo de S
no es despojado. (Además de dar advertencias del compilador.)
¿Hay una manera de escribir una macro para usar
"abc" MACRO('d') "efg"
oMACRO1(MACRO2("abc", 'd'), "efg")
oMACRO("abc", 'd', "efg")
?
En caso de que alguien pregunte por qué quiero eso: El literal de char proviene de una biblioteca y necesito imprimir la cadena como un mensaje de estado.
Yo no quiero * * que desee usar ninguna de las funciones de tiempo de ejecución o sprintf. No coloque ninguna respuesta que emplee llamadas de método de tiempo de ejecución. – kay
Si el literal proviene de una biblioteca, ¿cómo está accediendo a él? ¿Es una macro proporcionada por el archivo de encabezado de la biblioteca? –
Sí, proviene de un archivo de encabezado. – kay