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的行号而不是宏的调用行所做的那样,但是让我问一下,以防有人有话要说.
问题是在预处理器中,扩展##之前发生__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)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |