哪个是退出控制台,“FreeConsole(void)”,“return 0”或“exit(EXIT_SUCCESS)”的更好选择?

时间:2013-11-20 16:02:35

标签: c++ c function winapi mingw32

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

  1. FreeConsole()是API函数

  2. (scope: main function) return是C语句。

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

  4. 您希望在C中使用哪个退出程序?为什么?

2 个答案:

答案 0 :(得分:6)

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

在C ++中,调用exit将绕过堆栈展开,因此不会正确调用析构函数(IOW,你几乎总是想避免它)。

FreeConsole在不退出程序的情况下释放控制台。在释放控制台后,该过程可以继续执行分离。因此,它实际上甚至不等于其他两个中的任何一个。当然,FreeConsole是Win32 API函数,因此使用它也会使代码不可移植。

答案 1 :(得分:5)

  

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

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

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

要从其他功能结束程序,return将无效,因此我会使用exit()。但是,只有当我确信在那时结束该计划是有意义的时候。

  

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

几乎来自main()return会在结束程序之前销毁局部变量; exit()不会。

(仅适用于C ++;在C中,没有任何析构函数,它们效率相同。也许你应该一次将你的问题限制为一种语言;我最初没有注意到你已经标记了两种不同语言的问题。)

从其他功能来看,它们显然根本不相同。