C++中##运算符无法结合宏与字符串的问题求助
解决C++宏中##与__LINE__无法正确展开的问题
问题核心是##运算符会直接拼接符号,不会触发右侧__LINE__宏的展开,导致最终生成timer__LINE__而非带实际行号的变量名。要解决这个问题,需要引入中间宏先完成__LINE__的展开,再执行拼接操作:
定义辅助拼接宏
#define CONCAT_IMPL(a, b) a ## b #define CONCAT(a, b) CONCAT_IMPL(a, b)外层的
CONCAT会先展开传入的宏参数(比如__LINE__),再把展开后的结果传给内层的CONCAT_IMPL执行拼接。修改你的ProfilerScope宏
#define ProfilerScope(name) Timer CONCAT(timer, __LINE__);
这样调用ProfilerScope时,__LINE__会先被替换为当前代码的行号,再和timer拼接,最终生成类似Timer timer123;的代码(123为实际行号),完全符合预期。
内容的提问来源于stack exchange,提问作者AletropyZ
相关产品推荐
相关产品推荐

