2

我看过这个问题:

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

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

我试图用clang来实现它。

这里是我的报关表:

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

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

这可能是一个clang错误吗?clang帮助页面说它有__COUNTER__宏。

最后我需要这样的宏:

#define TRACE(stream) FuncTrace x#__COUNTER__ (stream, __FUNCTION__, __LINE__)
4

1 回答 1

9
  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__)
    
于 2012-10-02T13:02:03.493 回答