Я хочу объединить строковый литерал и символьный литерал.Синтаксически некорректно, "abc" 'd' "efg"
выдает ошибку компилятора:
xc: 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 поступает из библиотеки, и мне нужно распечатать строку в виде сообщения о состоянии.