Я хочу объединить строковый литерал и символьный литерал. Будучи синтаксически неверным, "abc" 'd' "efg"
выдает ошибку компилятора:
x.c:4:24: ошибка: ожидается ',' или ';' перед 'd'
Теперь мне приходится использовать snprift (без нужды), несмотря на то, что значение строкового литерала и символьного литерала известно во время компиляции.
Я пробовал
#define CONCAT(S,C) ({ \
static const char *_r = { (S), (C) }; \
_r; \
})
, но это не работает, потому что нулевой терминатор S
не удален. (Помимо предупреждения компилятора.)
Есть ли способ написать макрос для использования
"abc" MACRO('d') "efg"
илиMACRO1(MACRO2("abc" , 'd'), "efg")
илиMACRO("abc", 'd', "efg")
?На случай, если кто-то спросит, зачем мне это нужно: литерал char взят из библиотеки, и мне нужно распечатать строку как сообщение о состоянии.