【发布时间】:2019-10-01 10:59:00
【问题描述】:
这是一个简单的问题,但我一直看到相互矛盾的答案:C++ 程序的主例程应该返回0 还是EXIT_SUCCESS?
#include <cstdlib>
int main(){return EXIT_SUCCESS;}
或
int main(){return 0;}
它们是完全一样的吗? EXIT_SUCCESS 应该只与exit() 一起使用吗?
我认为EXIT_SUCCESS 会是更好的选择,因为其他软件可能希望将零视为失败,但我还听说如果您返回0,编译器无论如何都能够将其更改为不同的值。
【问题讨论】:
-
This answer about C90 解释了标准——
0和EXIT_SUCCESS都被解释为成功。 -
我会在这里回复,因为我觉得将来会有其他人阅读此内容。基本上有很多关于“正确 C”的范式。一些范例更喜欢使用字面量而不是宏,例如,不是将 NULL 作为参数传递,它们可能会传递 (const char *)0 来指示它不仅仅是一个空值,但如果它不是空值,它应该是一个常量字符指针。其他范例更喜欢与类型无关,并且通过使用宏类型,它们可以避免在事情发生根本变化时更改其代码库。例如,许多 -
-
@Dmitry
Windows API 类型定义在较新的平台上是不正确的,但由于它们是宏,它们可以通过重新定义宏轻松地将所有类型更改为可以工作的类型,并且这些类型中的大部分只是根据定义进行缩放(例如 int 在不同的平台上是不同的)。总而言之,如果返回代码很重要并且将来可能会更改,请使用 EXIT_SUCCESS 之类的东西,否则返回 0 可能看起来像一个神奇的数字,但这仍然是完全有效的标准约定。错误代码主要用于程序将数字结果从一个管道传递到另一个,- -
@Dmitry
使用错误代码来调试你的程序有点弱,因为如果它确实返回 0,它是非常无用的信息,除非在某些情况下,程序中存在未引发的未处理错误,可能会导致程序静默中断,您需要检查它是否正常返回(0)或发生静默错误。数字返回对于根据输入将 0..255 从一个程序传递到另一个程序更有用,否则没有理由考虑它:要么返回 0,要么使用预编译的 main 内联 void “init” 调用而不是视觉上用无用的回报惹恼你。 -
@Dmitry 还值得注意的是,通过返回 EXIT_SUCCESS,您大大降低了检查程序返回的难度,因为如果人们查看您的主源代码并看到它返回一个宏,他们就不能自信说它是 0 而不去 EXIT_SUCCESS 的定义并检查它:在某些编辑器中很容易,在其他编辑器中很难。在您的文档中说它返回 EXIT_SUCCESS 是完全没用的,因为除非他们做出假设,否则人们不知道 EXIT_SUCCESS 是什么,并且对宏做出假设可能会导致返回错误,因为宏可能会有所不同
标签: c++ c return-value main