预处理器双哈希(##)运算符,如何连接变量值

时间:2014-01-21 17:08:05

标签: c++ concatenation c-preprocessor

这是我写的一个简短程序

#include <iostream>
#define test0 "abc"
#define test1 "def"
#define concat(x,y) x##y
int main()
{
  for (int i = 0 ; i < 2 ; ++i)
      std::cout << concat(test,i) << std::endl;
  return 0;
}

但由于某些原因它不能编译(它连接i而不是i值),有没有办法可以连接i的值而不是{{1名字?

  

test1.cpp:在函数'int main()'中:
      test1.cpp:8:1:错误:'testi'未在此范围内声明

2 个答案:

答案 0 :(得分:2)

没有。宏在编译之前被扩展(因此术语 pre -processor),并且只能操纵源代码中出现的标记。在程序运行之前,不知道变量的值。

答案 1 :(得分:2)

没有

预处理器(处理#define#include的编译器部分)在任何其他编译器传递之前运行,并且在程序运行之前很久。在程序运行之前,变量i将没有值。

请记住,预处理器只不过是程序源代码的文本替换工具。