2 toughcookie1 toughcookie1 于 2016.09.11 10:25 提问

求问为什么要用两个宏,

_STR(x)和_VAL(x)用一个不行吗?为什么用了_VAL(x)还要用_STR(x)代替?图片说明

2个回答

hijack00
hijack00   Rxr 2016.09.11 11:44
已采纳

因为存在多次宏替换(__LINE__也是宏),定义一个宏与定义两个宏效果是不一样的。
如果想理解底层宏替换的细节,只要在gcc编译选项中增加-E,即只进行预处理,这样就可以看到预处理(宏替换)之后的结果。

可以试试看只定义一个宏和定义两个宏得到的结果有什么不同

qq_35553864
qq_35553864   2016.09.11 14:56

你试试只用一个宏就知道了。LINE也是个宏,通过一个中间宏,LINE才能来得及展开

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!