You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中##运算符无法结合宏与字符串的问题求助

解决C++宏中##与__LINE__无法正确展开的问题

问题核心是##运算符会直接拼接符号,不会触发右侧__LINE__宏的展开,导致最终生成timer__LINE__而非带实际行号的变量名。要解决这个问题,需要引入中间宏先完成__LINE__的展开,再执行拼接操作:

  1. 定义辅助拼接宏

    #define CONCAT_IMPL(a, b) a ## b
    #define CONCAT(a, b) CONCAT_IMPL(a, b)
    

    外层的CONCAT会先展开传入的宏参数(比如__LINE__),再把展开后的结果传给内层的CONCAT_IMPL执行拼接。

  2. 修改你的ProfilerScope宏

    #define ProfilerScope(name) Timer CONCAT(timer, __LINE__);
    

这样调用ProfilerScope时,__LINE__会先被替换为当前代码的行号,再和timer拼接,最终生成类似Timer timer123;的代码(123为实际行号),完全符合预期。

内容的提问来源于stack exchange,提问作者AletropyZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:15:31