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-ish 输入的标记器。因此,即使在进行字符串化时,您也不能将随机垃圾传递给宏。==> 不要让你的预处理器伤心——如果你经常这样做,它会吃掉小猫。

实际上,没有办法"\n"通过编译时连接来创建,因为"\\" "n"它是一个由两个文字组成的字符串,即“\n”。

于 2012-06-28T15:13:33.677 回答