文字リテラルとcharリテラルを連結したい。文法的に間違っている、"abc" 'd' "efg"
は、コンパイラエラーをレンダリング:今では文字リテラルをcharリテラルと連結する
x.c:4:24: error: expected ',' or ';' before '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リテラルはライブラリから来ているので、文字列をステータスメッセージとして出力する必要があります。
私は* *はsprintfまたは任意のランタイム関数を使用したいしたくありません。ランタイムメソッド呼び出しを使用する答えは入れないでください。 – kay
リテラルがライブラリから来た場合、どのようにアクセスしていますか?それはライブラリヘッダーファイルによって提供されるマクロですか? –
はい、ヘッダーファイルからのものです。 – kay