在宏中,我想生成一个具有不同名称的变量,并尝试使用__LINE__
作为区分它们的方法。简化示例:
#define UNIQUE_INT int prefix##__LINE__
UNIQUE_INT;
UNIQUE_INT;
但似乎__LINE__
没有扩展,因为我在第二个中获得了“int prefix__LINE__':redefinition”。
我认为__LINE__
不能在宏定义中使用,就好像它扩展了#definition的行号而不是宏的调用行,但让我问一下有人有话要说。
答案 0 :(得分: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;