在我的大学C++课程中,我习惯于并且被教导在for循环中声明一个int变量,像这样:
for(int i = 0; i < 5; i++)
{
// code
}
但是现在我正在修读一门机电一体化课程,我们要用c和Arduino编写代码,老师告诉我这样做是不好的实践,并建议采用如下方式:
int i = 0;
for(i; i < 5; i++)
//code
为什么会有一个比另一个更受青睐?
机电一体化课程
我会进行一个合理的猜测。
你所使用的编译器可能很笨,会将此代码编译为:
for(int i = 0; i < 5; i++) {
//code
}
for(int i = 0; i < 5; i++) {
//code
}
使用两个独立的堆栈变量。现代编译器比这好,但嵌入式系统有旧的愚蠢编译器,而老师们记得问题已经解决很久了。鉴于这是Arduino,如果您拥有最新的编译器,那么它现在就是完全错误的。
我记得使用一个编译器,这段代码会出现"i已经被声明"的错误提示,但我偏离了主题。
i
已经被声明的错误会崩溃” - 实际上,微软的 Visual C++ 曾经有过这个 bug!荒谬。因此,必须在 for
循环中添加额外的大括号。 - Bungo{}
的时间的整个目的是手动释放堆栈内存 :( - user15244951if
块内的变量声明,它会向后传播堆栈帧大小。 - Joshua
for(int i; i<5; ++i)
这种形式。 - François Andrieux