我有
#define NAME(value) my ## value ## value
当我执行NAME(1)
时,它是my1value
,这很好!
但我想将变量传递给NAME()
,
比如
for(int i=0;i<10;i++)
{
NAME(i);
...
}
但不幸的是,它变为myivalue
,但我想要my0value
,my1value
等。
我应该改变什么? 感谢
答案 0 :(得分:6)
宏在编译时被替换(实际上,即使在“真正的”编译开始之前它们也被预处理器替换),并且它是纯粹的文本处理。
您不能指望您的宏根据变量的值来计算其扩展。
答案 1 :(得分:1)
宏只在编译之前进行文本替换。它与对代码执行“查找和替换”基本相同。循环在运行时执行 - 所以这没有任何意义。
但无论如何要回答你的问题....你可以使用(编译时)宏'循环':
#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支持预处理器循环。
答案 2 :(得分:0)
## 是预处理器指令
## 将 ## 之前的内容与#define语句中的内容连接起来
正如你所说“#define NAME(value)my ## value ## value”这就成了一个错误。这意味着“myii”不是myivalue