求教一个关于宏的有关问题

求教一个关于宏的问题
比如:
#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