You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言字符串化宏展开结果不符预期的解决方法及可行性咨询

C语言字符串化宏展开结果不符预期的解决方法及可行性咨询

嗨,我来帮你搞定这个问题~

你遇到的问题其实是C预处理器里#运算符的特性导致的:当你直接用#对宏参数进行字符串化时,预处理器不会先展开参数里的表达式,而是直接把传入的原始文本转成字符串,所以STR(5+6)就直接变成了"5+6",而不是先计算出11再转字符串。

不过别担心,用两层宏嵌套就能解决这个问题,而且C和C++都支持这种写法。具体代码如下:

#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

为什么这样就能行?这是因为预处理器的宏展开规则:当宏参数被传递给另一个没有用###修饰的宏时,会先展开这个参数。所以当你调用STR(5+6)时,预处理器会先处理外层的STR(x),把x替换成5+6,然后调用STR_HELPER(5+6)——这时候STR_HELPER的参数x没有被#修饰,所以预处理器会先把5+6展开计算成11,最后再用#x11字符串化,得到你想要的"11"

你可以试试这个写法,完全符合你的需求,不管是C还是C++环境下都能正常工作哦~

备注:内容来源于stack exchange,提问作者hopy

火山引擎 最新活动