当C程序在没有正常退出或中止功能的情况下终止时会发生什么



正如我们所知:-

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.成立以来,这种行为一直是一样的

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

最新更新