Объединить строковый литерал с символьным литералом

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

10
задан kay 28 March 2012 в 16:54
поделиться