c++ - For循环不会在没有return语句的int函数中终止

标签 c++ arduino undefined-behavior

在 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/

相关文章:

c++ - 替代系统 ("Pause");重访

c++ - 求图形显示/C++中(头文件)文件依赖关系的工具

networking - Arduino Wifi 屏蔽 - 无法发送 UDP 数据包

python - Windows 中的串行通信仿真

c - 将负 double 转换为 C 标准中定义的 unsigned int 的行为吗? ARM 与 x86 上的不同行为

C++ 无处引用

c++ - CMake ExternalData 自定义获取脚本

c - 指向数组的全局指针

c++ - 访问边界外的数组元素是否会破坏它

c++ - 如何在树结构中从子节点移动到父节点?