为什么在 for 循环中声明 int 是不好的做法?

jus*_*Guy 2 c c++ for-loop

在我大学的 C++ 课程中,我习惯了(并被教导)for 循环中声明 int 的做法,如下所示:

for(int i = 0; i < 5; i++)
{
    // code
 }
Run Code Online (Sandbox Code Playgroud)

但是现在我在一个机电一体化课上,我们用 c 和 Arduino 编写,老师告诉我这样做是不好的做法,并建议这样做:

int i = 0;
for(i; i < 5; i++)
    //code
Run Code Online (Sandbox Code Playgroud)

为什么一个比另一个更受欢迎?

Jos*_*hua 6

《机电班》

我将采用合理的猜测。

您拥有的编译器可能是愚蠢的并编译了这个

for(int i = 0; i < 5; i++) {
    //code
}
for(int i = 0; i < 5; i++) {
    //code
}
Run Code Online (Sandbox Code Playgroud)

使用两个独立的堆栈变量。现代编译器比这更好,但嵌入式系统有旧的愚蠢编译器,老教师在问题修复后很长一段时间都会记住这些问题。鉴于这是 Arduino,如果你有一个最新的编译器,那么它现在就完全错误了。

我记得使用的编译器会在这段代码上爆炸,i并且已经声明,但我离题了。


eer*_*ika 5

为什么一个比另一个更受欢迎?

例如,在您提前退出循环的情况下,您可能想知道它的最后一个值i当然只有在循环外声明时才能访问。因此,在这种情况下,这是唯一的选择(除非您为此使用单独的变量,但这会增加不必要的复杂性)。

但通常当两者都是有效选项时,在尽可能小的范围内声明所有变量可能会稍微更有效,更容易阅读 - 尽管后者可能是主观的,所以这主要是一个品味问题。前者客观上不是一般的“不良做法”。