当一个 C 程序在没有退出或中止函数的情况下终止时会发生什么?

问题描述

正如我们所知:-

exit() 执行以下操作。

abort() 可能不会关闭打开的文件。它也可能不会删除 临时文件,可能不会刷新流缓冲区。此外,它不 调用使用 atexit() 注册函数

来源:- https://www.geeksforgeeks.org/understanding-exit-abort-and-assert/

所以我的问题是当程序在没有这两个函数的情况下(通常)终止时会发生什么?

我希望你能回答我的问题...

解决方法

根据 C11 标准(好吧,another question 中链接的 n1570 草案),第 5.1.2.2.3 节程序终止声明行为未指定。

引用 C11 草案:

如果main函数的返回类型是兼容的类型 int,从初始调用到主函数的返回是等效的 用main函数返回的值调用exit函数 函数作为其参数;11) 到达终止 main 的 } 函数返回值 0。如果返回类型不兼容 使用int,返回给宿主环境的终止状态为 未指定。

据我所知,这种行为几乎自 C 出现以来一直是一样的。

如果您曾经遇到过这种情况,最好将此情况视为需要修复的错误,除非您愿意深入研究编译器/工具链/框架指定的任何行为。