如果这可能是一个愚蠢的问题,我很抱歉。上次我朋友跟我说,我for loop在嵌入式系统上开发的时候应该在外面声明迭代器变量,例如:
int i = 0;
for (i = 0; i < 10; i++) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
不应该使用如下:
for (int i = 0; i < 10; i++) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我问他为什么,但他只是说“这是小费”。有人可以给我一些解释吗?
我有下面的短代码(一个用于初始化 for 循环内的迭代器变量,一个用于 for 循环外)。你能告诉我什么更好吗?
int i = 0;
for (i = 0; i < 10; i++) {
// Do something
}
for (i = 0; i < 100,; i++) {
// Do something
}
// Do something, but don't need to use variable `i`
Run Code Online (Sandbox Code Playgroud)
另一个:
for (int i = 0; i < 10; i++) {
// Do something
}
for (int i = 0; i < 100,; i++) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我知道,当在 中声明迭代器时for loop,它被限制在for loop. 在两种情况下有什么重要的事情吗?
作为一般规则,最佳实践是在for循环中声明变量。它避免了混淆,并为编译器提供了更多优化机会。
在外部作用域中声明的唯一时间是如果您需要再次使用该变量 - 说循环直到达到某个标准,然后从您在另一个循环中停下的地方开始。
从历史上看,这里存在一个问题,即在语言标准化之前,不同的编译器会以不同的方式对待循环迭代器的范围。
在以下代码中i,超出范围的地方会有所不同:
void func(void)
{
for (int i = 0; i < 10; ++i)
{
...
} // Some compilers have i going out of scope on the last loop iteration
int j = i; // So in some compilers this is valid, others not
} // Other compilers i goes out of scope here
Run Code Online (Sandbox Code Playgroud)
因此,编写更便携:
void func(void)
{
int i;
for (i = 0; i < 10; ++i)
{
...
}
int j = i; // Valid on all compilers
} // i goes out of scope here on all compilers
Run Code Online (Sandbox Code Playgroud)
因为尽早声明循环计数器更便于携带。但这在 90 年代被标准化为更紧的范围,所以现在这不是真正的问题。