2012-06-28 36 views
1

我尝试做以下,使字符串或字符常量与宏展开:如何使用##操作

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

int main() 
{ 

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

puts语句都可以导致误差。作为\nn都是预处理程序标记我希望他们在那些puts报表正确输出,但流血/ DEVC++编译器给我下面的错误:

24:1 G:\BIN\cLang\macro2.cpp pasting "\" and "n" does not give a valid preprocessing token

在哪里其实我失踪?

+1

为什么'/'和'n'给出'\ n'? –

+0

dev-C++编译器是**古代**。比IE6更糟糕。不要使用它。获取最新的GCC。 – ThiefMaster

回答

3

预处理器使用一个需要C-ish输入的标记器。所以即使串化你也不能将随机垃圾传递给宏。 ==>不要让你的预处理器很悲伤 - 如果你经常这样做,它会吃小猫。

实际上,无法通过编译时级联创建"\n",因为"\\" "n"是由两个文字组成的字符串,即“\ n”。

+0

什么布特'\ u'代码或类似的东西? – nielsbot