在宏定义中使用 __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;
在宏中我想生成一个具有不同名称的变量并尝试使用 __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;