c ++ #define和concatenate case(我正在使用gcc)

时间:2013-03-14 18:46:08

标签: c++ c gcc

我有

#define NAME(value) my ## value ## value

当我执行NAME(1)时,它是my1value,这很好!

但我想将变量传递给NAME(), 比如

for(int i=0;i<10;i++)
{
    NAME(i);
    ...
}

但不幸的是,它变为myivalue,但我想要my0valuemy1value等。

我应该改变什么? 感谢

3 个答案:

答案 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