这是我写的一个简短程序
#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'未在此范围内声明
答案 0 :(得分:2)
没有。宏在编译之前被扩展(因此术语 pre -processor),并且只能操纵源代码中出现的标记。在程序运行之前,不知道变量的值。
答案 1 :(得分:2)
没有
预处理器(处理#define
和#include
的编译器部分)在任何其他编译器传递之前运行,并且在程序运行之前很久。在程序运行之前,变量i
将没有值。
请记住,预处理器只不过是程序源代码的文本替换工具。