2

我有一个包含两个for循环的函数,并且我正在使用一个称为count计数器的变量。我选择回收名称,因为第一个循环将在第二个循环开始之前完全完成它的执行,因此计数器不会相互干扰。G++ 编译器通过以下警告对此表示例外:

error: name lookup of ‘count’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)

变量回收是否被认为是专业软件开发中的不良做法,还是一种情境问题,我在这里错过了哪些其他含义?

4

4 回答 4

4

你在做这个吗?

for(int count = 0; ...)
{
    ...
}

for(count = 0; ...)
{
    ...
}

我怀疑gcc会这样,因为第二个count不在范围内。我认为它只适用于第一个for循环,但gcc可以选择接受糟糕的代码。如果您制作第二个int count或将第一个移到外部范围,gcc应该很高兴。

这取决于具体情况,但我一般不重用变量。变量的名称应该反映其用途,并且通过函数切换部分方式可能会造成混淆。声明你需要什么,让编译器负责优化。

于 2010-10-16T22:13:18.050 回答
2

Steve McConnell 建议不要在 Code Complete 的函数中重用局部变量。

他不是专业软件开发实践中的权威声音,但他几乎与您将获得的权威声音一样接近。

争论是它使阅读代码变得更加困难。

你在数什么?之后命名变量。

于 2010-10-16T22:07:31.200 回答
2

听起来您是在 for 中定义变量?即“for (int count=0;count++;count < x)”?如果是这样,那可能是有问题的,并且不清楚。如果您要在第二个 for 循环中使用它,请在两个循环之外定义它。

于 2010-10-16T22:11:40.730 回答
1

如果您使用这样的循环计数器变量,那么通常没关系。

for (int i ...; ... ; ...) { 
    ... 
}
for (int i ...; ... ; ...) { 
    ... 
}

但是,如果您打算隐藏另一个变量:

int i ...;
for (int i ...; ... ; ...) { 
    ... 
}

这是一个危险信号。

于 2010-10-16T22:12:57.957 回答