define绝对不是一个好的解决方案。
#define loop(n) for(int i=0;i<n;i++)
int main()
{
int i = 0;
loop(10000) { i++; };
cout << i << endl;//i==0 here,because of naming duplication.
getchar();
return 0;
}
除了使用非常复杂的名称替换i之外,还有其他解决方案吗?
答案 0 :(得分:5)
如果我理解正确的话,使用宏的(邪恶的)方法是:
#define loop(n) for (int i=0; i < n; ++i)
int main()
{
loop(10000)
{
std::cout << i << std::endl;
}
return 0;
}
一个不太邪恶的解决方案是使用lambda函数:
template<typename T>
void loop(int n, T func)
{
for (int i=0; i < n; ++i)
func(i);
}
int main()
{
loop(10000, [] (int i)
{
std::cout << i << std::endl;
});
return 0;
}
但是不要在实际代码中这样做,只需编写简单的for
语句,每个人都会理解你。