1

私は次のことをしようとしています:

#define mkstr(str) #str
#define cat(x,y) mkstr(x ## y)

int main()
{

   puts(cat(\,n));
   puts(cat(\,t))
   return 0;
}

両方のputsステートメントでエラーが発生します。\nどちらもプリプロセッサ トークンであるため、これらのステートメントでnそれらを正しく出力することを期待していましたputsが、Bloodshed/DevC++ コンパイラで次のエラーが発生しました。

24:1 G:\BIN\cLang\macro2.cpp "\" と "n" を貼り付けると、有効な前処理トークンが得られません

私が行方不明になっているという事実はどこにありますか?

4

1 に答える 1

3

プリプロセッサは、C っぽい入力を必要とするトークナイザを使用します。したがって、文字列化する場合でも、ランダムなガベージをマクロに渡すことはできません。==> プリプロセッサを悲しませないでください - あまり頻繁に行うと、子猫を食べてしまいます。

実際には、 は 2 つのリテラル、つまり "\n" で構成される文字列である"\n"ため、コンパイル時に連結して作成する方法はありません。"\\" "n"

于 2012-06-28T15:13:33.677 に答える