变量名中的__COUNTER__

Red*_*edX 1 c++ macros clang c-preprocessor

我见过这个问题:

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

通过以下答案:https://stackoverflow.com/a/1675203/551045

我试图在clang中实现它.

这里是我的报关表:

#define TRACE(stream) FuncTrace x#__COUNTER__ (llvm::errs(), "hallo", 1)
Run Code Online (Sandbox Code Playgroud)

我尝试了所有的变化x##__COUNTER__; x ## __COUNTER__等等,但似乎没有工作.

这可能是一个铿锵的bug吗?clang 帮助页面说它有__COUNTER__宏.

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

#define TRACE(stream) FuncTrace x#__COUNTER__ (stream, __FUNCTION__, __LINE__)
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 7

  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__)
    
    Run Code Online (Sandbox Code Playgroud)