我有
#define NAME(value) my ## value ## value
当我这样做时NAME(1)
,它是my1value
,这很好!
但我想将变量传递给NAME()
,例如
for(int i=0;i<10;i++)
{
NAME(i);
...
}
但不幸的是,它变成了myivalue
,但我想要my0value
,my1value
等等。
我应该改变什么?谢谢
宏在编译时被替换(实际上,它们甚至在“真正的”编译开始之前就被预处理器替换),它是纯文本处理。
你不能指望你的宏根据变量的值来计算它的展开。
宏只在编译前进行文本替换。这与对代码执行“查找和替换”基本相同。循环在运行时执行——所以这没有任何意义。
但是无论如何要回答您的问题....您可以使用(编译时)宏“循环”:
#include <iostream>
#define NAME(v) my##v##value
#define LOOP10 NAME(0), NAME(1), NAME(2), NAME(3), NAME(4), NAME(5), NAME(6), NAME(7), NAME(8), NAME(9)
int main()
{
int LOOP10; // example usage
}
据我所知,boost 支持预处理器循环。
##是预处理器指令
##将##之前的 内容与 #define 语句中的内容连接起来
正如你所说的“#define NAME(value) my ## value ## value”这变成了一个错误。它的意思是“myii”而不是 myivalue