【问题标题】:Which is a better choice to exit a Console, "FreeConsole (void)", "return 0", or "exit (EXIT_SUCCESS)"?退出控制台,“FreeConsole (void)”、“return 0”或“exit (EXIT_SUCCESS)”哪个是更好的选择?
【发布时间】:2013-12-04 17:36:09
【问题描述】:

我知道return vs exit()之间的区别。
我想知道它们与FreeConsole() 有何不同。

  1. FreeConsole() 是一个 API 函数

  2. (scope: main function) return 是 C 语言中的一个语句。

  3. exit (EXIT_SUCCESS) 是一个函数调用。

您想在 C 中使用哪个来退出程序,为什么?

【问题讨论】:

  • return 仅在从main 调用时退出程序,因此它与exit 不同。
  • @Luchian Grigore 对不起。我已经修改了这个问题
  • 调用exit不会调用局部变量的析构函数;从main 返回确实如此。根据文档,FreeConsole 根本不会终止进程;它只是将它与控制台断开连接。

标签: c++ c function winapi mingw32


【解决方案1】:

在C中,调用exit相当于从main返回。

在 C++ 中,调用 exit 将绕过堆栈展开,因此无法正确调用析构函数(IOW,您几乎总是希望避免它)。

FreeConsole 释放控制台而不退出程序。释放控制台后,进程可以继续分离执行。因此,它甚至与其他两者中的任何一个都不接近。当然,FreeConsole 是一个 Win32 API 函数,所以使用它也会导致代码不可移植。

【讨论】:

  • FreeConsole 显然也是不可移植的。
  • @JamesMcLaughlin:是的,这似乎很明显,但正如你暗示的那样,这可能值得明确提及。
【解决方案2】:

您想在 C 中使用哪个来退出程序?为什么?为什么不?

我不会使用FreeConsole(),因为我从不为微软平台编程;如果您希望代码可移植,则不应使用它。从您链接到的文档来看,它似乎做了一些完全不同的事情(从控制台分离而不结束程序),所以在任何情况下都不能使用它来结束程序。

main 内,我会使用return 来确保局部变量被销毁。 exit() 不会那样做。 (虽然这是 C++ 的一个习惯;在 C 中,这没什么区别)。

要从其他函数结束程序,return 将不起作用,所以我会使用exit()。但前提是我确信在那个时候结束程序是有意义的。

在我看来,return 和 exit() 是一样的。对吗?

来自main(),差不多。 return 会在程序结束前销毁局部变量; exit() 不会。

(这仅适用于 C++;在 C 中,没有任何东西有析构函数,它们实际上是相同的。也许您应该一次将您的问题限制在一种语言上;我最初没有注意到您已标记用两种不同的语言提问。)

从其他功能上看,它们显然完全不一样。

【讨论】:

  • 感谢您的回答。这真的很有帮助。 :-)
猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 2012-10-13
  • 2011-03-29
  • 2014-05-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多