C++ 是否通过C/C+;中的int main()返回0+;,在任何操作系统上,清除程序在任何(RAM、缓存或任何…)内存中使用的所有资源?

C++ 是否通过C/C+;中的int main()返回0+;,在任何操作系统上,清除程序在任何(RAM、缓存或任何…)内存中使用的所有资源?,c++,c,return,main,C++,C,Return,Main,我属于一所新成立的学院,有一些老师不是很有才华。我个人曾多次发现他们犯错误。这是因为他们自己有错误的知识。因此,我自学编程和网络。因为我不能依赖他们 既然是这样,我就陷入了很大的怀疑 我的一位算法主题分析老师说过,“当int main()返回0时,所有缓冲区都关闭,所有使用的资源都被清除,并为其他程序创建了空间。因此,返回0是一种很好的做法”。 对此,我争辩道,“妈妈,我们一直都知道,这只是为了表明程序已经成功地完成了EXEXEXION。” 对此,她说,“你有一部分是对的” 这显然意味着她是说返

我属于一所新成立的学院,有一些老师不是很有才华。我个人曾多次发现他们犯错误。这是因为他们自己有错误的知识。因此,我自学编程和网络。因为我不能依赖他们

既然是这样,我就陷入了很大的怀疑

我的一位算法主题分析老师说过,“当int main()返回0时,所有缓冲区都关闭,所有使用的资源都被清除,并为其他程序创建了空间。因此,返回0是一种很好的做法”。 对此,我争辩道,“妈妈,我们一直都知道,这只是为了表明程序已经成功地完成了EXEXEXION。” 对此,她说,“你有一部分是对的”

这显然意味着她是说返回非零并不释放资源

现在谁是对的,我还是她?
我应该要求退款吗?

你的老师完全错了

你说得对。
你应该要回你的钱


MIT有nice,它会更准确。

main返回的值被赋予操作系统。C或C++标准中没有任何东西表明基于该值发生的不同的事情。

< P>当<代码>主< /COD>函数返回时,打开的文件被关闭,输出流被刷新。C没有指定malloc分配的内存是否被释放。

我们可以从两个层次来考虑这个问题

  • C/C++结束时会发生什么(返回代码)
  • C/C++结束后会发生什么(以及操作系统如何处理资源和返回代码)
  • 对于1),C/C++不进行任何资源管理,它只向操作系统返回返回代码,而不考虑0或其他值

    我能想到的一个例外是复杂的库资源(例如流),它们可能会在超出范围时被破坏。。。并且可能具有与之相关联的资源清理行为(例如,ofstream中包含的filebuf将在中关闭该文件)

    但上述情况将视具体情况而定

    2)。。。简单的答案是,这取决于操作系统。典型的主流操作系统会在程序完成后进行资源清理。边缘操作系统(如嵌入式系统)可能不会。。。。甚至在maintream OS的情况下,不同的资源将得到不同的处理或需要更多的时间来恢复(发现:和)



    最后,操作系统如何处理返回值,同样取决于操作系统,我怀疑资源处理是否会随着不同的返回值而改变。。。但是谁知道具体的情况呢。

    以上答案的最终结论。。。操作系统按照编程的方式工作。返回任何整数只意味着操作系统程序已经终止,其他什么都没有。操作系统不在乎它是否成功终止。当我们从main()返回任何整数时,该整数对于操作系统来说只是垃圾。无论返回0或-556或任何整数。操作系统的一切都是一样的。操作系统不清除任何资源。事实上,当涉及到C/C++时,程序员有责任清理资源。操作系统什么也不做。我们返回0只是因为这是一个标准约定

    所以她的说法是,如果你返回1,那么资源就不会被释放?@dsolimano她没有这么说。但她可能是这个意思。通过返回-1来创建更多的免费资源@RisingDarky抱歉,你没听懂,只是问老师当你返回一个不同于
    0
    的值时会发生什么。但是请注意,在
    main
    返回后,在资源返回操作系统之前,POSIX系统中仍然会发生大量事情。如果他要求退款,学校可能会
    返回0
    。这里的否决票是完全不必要的,但我还是会把这当作一个评论而不是回答……问题是“现在谁是对的,我还是她?我应该要求退款吗?”。我觉得我直接而准确地回答了这个问题(还做了一些尖刻的评论)@FiddlingBits哇,它一直盯着我的脸,我甚至没有想到:-D@barakmanos这个问题,谁对,回答正确。这是正确的答案。C/C++标准不关心抽象机器获取
    0
    或任何其他返回值时会发生什么。确实会执行一些清理,例如刷新缓冲区,对吗?@Jeffrey但是操作系统对这些整数做了什么?当程序成功(返回0)或不成功(返回非零)时,它的行为有多大不同?操作系统可以做任何它想做的事情。shell可能仅在返回代码为非零时才显示返回代码。更智能的shell可能会根据程序对其进行解释,并显示一条人类可读的错误消息(参见f.i.)。关键是C语言规范没有指定应该发生什么,从它的角度来看,返回
    0
    或任何其他整数都具有完全相同的含义。@peppe ok。所以你的意思是,不管返回任何整数,正的,负的或0,操作系统都会做它必须做的事情?我已经尝试过了。例如,如果在文件中写入,则仅当关闭文件时写入才会成功。如果不关闭,写入内容将保留在缓冲区中并刷新。如果不关闭文件,则不会写入文件。因此,在我的第一次测试运行中,当我没有关闭文件时,即使返回0,也没有进行写入。在我的第二次程序测试中,我关闭了文件并返回了89。但文件编写是成功的。所以我断定你说的是错的。很抱歉,这是真的。@user3182942可能写入缓冲区没有刷新到文件中。但这不是问题所在。相反,如果缓冲区被释放,这是个问题。@harper,但如果缓冲区没有被刷新,这就是“有时”的情况。但这“总是”发生