在单个函数中回收变量名称

时间:2010-10-16 22:05:51

标签: variables g++ conceptual

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

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

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

4 个答案:

答案 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 ...; ... ; ...) { 
    ... 
}

那是一面红旗。