我有一个包含两个for
循环的函数,我使用一个名为count
的变量作为计数器。我已选择回收名称,因为第一个循环将在第二个循环开始之前完成它的执行,因此计数器不会相互干扰。 G ++编译器通过以下警告对此进行了例外处理:
error: name lookup of ‘count’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)
可变回收在专业软件开发中被认为是不好的做法,还是一种情境问题,我在这里错过了哪些其他含义?
答案 0 :(得分:4)
你这样做吗?
for(int count = 0; ...)
{
...
}
for(count = 0; ...)
{
...
}
我怀疑gcc
会这样,因为第二个count
不在范围内。我认为它仅适用于第一个for
循环,但gcc
可以选择接受不良代码。如果您制作第二个int count
或将第一个移到外部范围,gcc
应该感到高兴。
这取决于具体情况,但我通常不会重复使用变量。变量的名称应该反映其目的,并且通过函数切换部分可能会令人困惑。声明你需要的东西,让编译器负责优化。
答案 1 :(得分:2)
Steve McConnell建议不要在Code Complete中的函数中重用局部变量。
他不是专业软件开发实践中最明确的声音,但是他会尽可能接近确定的声音。
论证是它使得阅读代码变得更加困难。
你还算什么?在此之后命名变量。答案 2 :(得分:2)
听起来你在for中定义变量?即“for(int count = 0; count ++; count< x)”?如果是这样,那可能会有问题,也可能不清楚。如果您打算在第二个for循环中使用它,请在两个循环之外定义它。
答案 3 :(得分:1)
如果您正在使用这样的循环计数器变量,那么它通常无关紧要。
for (int i ...; ... ; ...) {
...
}
for (int i ...; ... ; ...) {
...
}
但是,如果您打算隐藏另一个变量:
int i ...;
for (int i ...; ... ; ...) {
...
}
那是一面红旗。