求教一个关于宏的有关问题
求教一个关于宏的问题
比如:
#define choose(n) obj##n
调用load(choose(1));//相当于load(obj1);这个是我需要的
如果
int i=0;
load(choose(i));//相当于load(obji);
有什么办法让这个i变成0吗?
------解决方案--------------------
楼主搞错概念了吧!
int i=0;该指令在程序编译后才能确定其值,而#define是预编译指令,要求在程序运行之前就得到其值。
------解决方案--------------------
不行吧,宏只是编译其的字符替换而已,而i的值却要到运行是才能确定
还是编个函数吧。
string choose(int i) //连接int的版本
{
char a[15];
itoa(i,a,10);
return string( "obj ")+a;
}
string choose(string s) //连接string的版本
{
return string( "obj ")+s;
}
cout < <choose(1) < <endl; //输出obj1
cout < <choose( "_dsa ") < <endl; //输出obj_dsa
比如:
#define choose(n) obj##n
调用load(choose(1));//相当于load(obj1);这个是我需要的
如果
int i=0;
load(choose(i));//相当于load(obji);
有什么办法让这个i变成0吗?
------解决方案--------------------
楼主搞错概念了吧!
int i=0;该指令在程序编译后才能确定其值,而#define是预编译指令,要求在程序运行之前就得到其值。
------解决方案--------------------
不行吧,宏只是编译其的字符替换而已,而i的值却要到运行是才能确定
还是编个函数吧。
string choose(int i) //连接int的版本
{
char a[15];
itoa(i,a,10);
return string( "obj ")+a;
}
string choose(string s) //连接string的版本
{
return string( "obj ")+s;
}
cout < <choose(1) < <endl; //输出obj1
cout < <choose( "_dsa ") < <endl; //输出obj_dsa