10.5 macro replacement within a string literal

有些ANSI 前的编译器/预处理器把下面这样的宏

#define TRACE(var, fmt) printf("TRACE: var = fmt\n", var)

解释为

TRACE(i, %d);

这样的调用会被扩展为

printf("TRACE: i = %d\n", i);

换言之,

字符串常量内部也作了宏参数扩展。

K&R 和标准C 都没有定义这样的宏扩展。

当你希望把宏参数转成字符串时,

你可以使用新的预处理操作符#和字符串常量连接(ANSI的另一个新功能):

#define TRACE(var, fmt) \

printf("TRACE: " #var " = " #fmt "\n", var)

参见问题11.18。

永不止步步 发表于01-16 15:39 浏览65215次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:305117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号