在 Arduino Uno 上,for 循环在不返回任何内容的 int 函数中表现非常奇怪。
void setup() {
Serial.begin(9600);
}
void loop() {
foo();
Serial.println("Never reached");
}
int foo() {
for (int i = 0; i < 9; i++) {
Serial.println(i);
}
}
这将输出以下内容,并继续通过 ASCII 无限循环...
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
此外,将 for 条件设置为 i < 12 会使它永远按数字计数,没有 ASCII 输出。
这一切都可以通过向 foo() 添加 return 0;
来解决,但我很好奇为什么会这样。有什么想法吗?
最佳答案
C++ 语言有一个概念 undefined behavior .可以编写不构成程序的代码。
Once 未定义行为的示例是未从声明为 int foo()
的函数返回值。从优化编译器的角度来看,函数永远不会返回,因为不可能从 int foo()
返回而不返回 int
值,因此它优化了结束 -循环条件。
检查您的编译器警告 - 应该有关于可能缺少 return
的警告。
如果您不打算从 foo()
返回任何内容,则应将其声明为 void foo()
。
关于c++ - For循环不会在没有return语句的int函数中终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62985401/