在宏定义中使用__LINE__

tru*_*ru7 1 c++ macros c-preprocessor

在宏中,我想生成一个具有不同名称的变量,并尝试用__LINE__它来区分它们.简化示例:

#define UNIQUE_INT   int prefix##__LINE__

UNIQUE_INT;
UNIQUE_INT;
Run Code Online (Sandbox Code Playgroud)

但似乎__LINE__没有扩大,因为我在第二个中得到"int prefix__LINE__':重新定义".

我想这__LINE__不能在宏定义中使用,就好像它扩展会对#definition的行号而不是宏的调用行所做的那样,但是让我问一下,以防有人有话要说.

Chr*_*eck 7

问题是在预处理器中,扩展##之前发生__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;
Run Code Online (Sandbox Code Playgroud)