__COUNTER__变量名中

__COUNTER__ in variable name

本文关键字:COUNTER 变量名      更新时间:2023-10-16

我看到了这个问题:

如何使用宏在C++中生成随机变量名称?

答案如下:https://stackoverflow.com/a/1675203/551045

我试图在叮当声中实现它。

这是我的声明:

#define TRACE(stream) FuncTrace x#__COUNTER__ (llvm::errs(), "hallo", 1)

我尝试了所有变体x##__COUNTER__; x ## __COUNTER__等等,但似乎都没有奏效。

这可能是一个叮当虫吗?clang 帮助页面说它有__COUNTER__宏。

最后,宏我需要这样的东西:

#define TRACE(stream) FuncTrace x#__COUNTER__ (stream, __FUNCTION__, __LINE__)
  1. 要将两个令牌连接为一个,请使用 ## 运算符。#运算符用于将令牌转换为字符串。

  2. x ## __COUNTER__只会产生x__COUNTER__.您需要首先完全展开__COUNTER__。一种可能的方法是添加更多的间接寻址,例如

    #define YTRACE(x, y) FuncTrace x##y (llvm::errs(), __FUNCTION__, __LINE__)
    #define XTRACE(x, y) YTRACE(x, y)
    #define TRACE(x) XTRACE(x, __COUNTER__)