在宏定义中使用 __LINE__

Using __LINE__ in a macro definition

在宏中我想生成一个具有不同名称的变量并尝试使用 __LINE__ 作为区分它们的方法。简化示例:

#define UNIQUE_INT   int prefix##__LINE__

UNIQUE_INT;
UNIQUE_INT;

但似乎 __LINE__ 没有扩展,因为我在第二个中得到 "int prefix__LINE__' : redefinition"。

我想 __LINE__ 不能用在宏定义中,就好像它扩展到 #definition 的行号而不是调用宏的行一样,但让我问一下以防万一有人有话要说。

问题是在预处理器中,## 发生在 __LINE__ 展开之前。如果再加一层间接,就可以得到想要的结果。

出于技术原因,您实际上需要两个宏(有时,如果您在现有宏中使用它,则不需要第二个,似乎...):

#define TOKEN_PASTE(x, y) x##y
#define CAT(x,y) TOKEN_PASTE(x,y)
#define UNIQUE_INT \
  int CAT(prefix, __LINE__)

UNIQUE_INT;
UNIQUE_INT;