您的位置:首页 > 其它

#

2016-03-16 21:20 281 查看
如定义好#define STRING(x) #x之后,下面二条语句就等价。

char *pChar = “hello”;

char *pChar = STRING(hello);

还有一个#@是加单引号(Charizing Operator)

define makechar(x) #@x

char ch = makechar(b);与char ch = 'b';等价。


但有小问题要注意,宏中遇到#或##时就不会再展开宏中嵌套的宏了。什么意思了?比如使用char *pChar = STRING(FILE);虽然FILE本身也是一个宏,但编译器不会展开它,所以pChar将指向”FILE“而不是你要想的形如”D:\XXX.cpp”的源文件名称。因此要加一个中间转换宏,先将FILE解析成”D:\XXX.cpp”字符串。

的功能,它可以拼接符号(Token-pasting operator)。

define paster( n ) printf( “token”#n” = %d\n”, token##n )

int token9 = 100;

再调用 paster(9);宏展开后token##n直接合并变成了token9。整个语句变成了

printf( “token”“9”” = %d”, token9 );

在C语言中字符串中的二个相连的双引号会被自动忽略,于是上句等同于

printf(“token9 = %d”, token9);。

即输出token9 = 100
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: