正如我们所知:-
exit()
执行以下操作。
- 刷新未写入的缓冲数据
- 关闭所有打开的文件
- 删除临时文件
- 向操作系统返回整数退出状态
和
abort()
可能无法关闭打开的文件。它也可能不会删除临时文件,并且可能不会刷新流缓冲区。此外,它没有调用在atexit((中注册的函数。
来源:-https://www.geeksforgeeks.org/understanding-exit-abort-and-assert/
所以我的问题是,当一个程序在没有这两个函数的情况下终止时(正常情况下(会发生什么?
我希望你明白我的问题。。。
根据C11标准(好吧,另一个问题中链接的n1570草案(,第5.1.2.2.3节程序终止规定行为未指定。
引用C11草案:
如果主函数的返回类型与int,从初始调用到主函数的返回是等价的使用main返回的值调用exit函数作为其论据;11( 到达终止main的}函数返回一个值0。如果返回类型不兼容对于int,返回到主机环境的终止状态为未指明。
据我所知,自从C.成立以来,这种行为一直是一样的
如果您曾经遇到过这种情况,最好将这种情况视为需要修复的错误,除非您愿意深入研究编译器/工具链/框架指定的任何行为。