Red*_*edX 1 c++ macros clang c-preprocessor
我见过这个问题:
通过以下答案: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)
要将两个标记连接成一个标记,请使用##运算符.该#运营商用于打开令牌成字符串.
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)