Desidero concatenare una stringa letterale e char letterale. Essendo sintatticamente corretto, "abc" 'd' "efg"
rende un errore di compilazione:Concatena stringa letterale con char letterale
x.c:4:24: error: expected ',' or ';' before 'd'
Ormai devo usare snprift (inutilmente), nonostante il valore della stringa letterale e l'essere letterale char conoscere al momento della compilazione.
Ho provato
#define CONCAT(S,C) ({ \
static const char *_r = { (S), (C) }; \
_r; \
})
ma non funziona perché il terminatore null S
non viene rimosso. (Oltre di dare gli avvisi del compilatore.)
C'è un modo per scrivere una macro per usare
"abc" MACRO('d') "efg"
oMACRO1(MACRO2("abc", 'd'), "efg")
oMACRO("abc", 'd', "efg")
?
Nel caso in cui qualcuno chieda perché lo voglio: Il char letteral proviene da una libreria e devo stampare la stringa come messaggio di stato.
Io non voglio * * voler utilizzare sprintf o qualsiasi funzioni di runtime. Si prega di non inserire alcuna risposta che impieghi le chiamate al metodo di runtime. – kay
Se il letterale proviene da una libreria, come stai accedendo? È una macro fornita dal file di intestazione della libreria? –
Sì, proviene da un file di intestazione. – kay