这可能是一个愚蠢的问题,但我总是发现自己想知道哪个是标准。
在大多数(不是说全部)C ++第一个例子中,您可能会看到main函数返回0值。这意味着操作是否正常?
这是标准的做法吗?
顺便说一下,在这种情况下返回整数或布尔值会更好吗?
谢谢你们!
答案 0 :(得分:6)
0
或EXIT_SUCCESS
表示成功。 EXIT_FAILURE
表示失败。任何其他值都是实现定义的,并不保证支持。特别是,std::exit(1)
或return 1;
实际上并不能保证表示失败,尽管在大多数常见系统中都会出现失败。
EXIT_SUCCESS
和EXIT_FAILURE
在<cstdlib>
中定义。
编辑:我认为提供系统特定的示例可能很有用:
GNU make实用程序返回操作系统的退出状态:
设置多个不同的失败值意味着您可以准确指定程序失败的方式。但有两点需要注意:
答案 1 :(得分:2)
0没关系,其他值是错误代码。主函数应根据标准返回int而不返回任何其他内容。之前在What should main() return in C and C++?
讨论了这个问题答案 2 :(得分:0)
在C早期,没有例外概念。所以程序员通过使用错误代码帮助自己,并将0定义为无错误。所有其他错误代码都有自己的含义,由程序员定义。
这个方案被接管到C ++。但是现在你也有了在错误上抛出异常的概念(这是一种更好的OOP风格)。那个主要仍然使用int作为返回值有历史原因。
答案 3 :(得分:0)
这不是一个规则,而是更多的设计决策(但是,如果我没记错的话,像POSIX这样的标准有其定义)
0
作为返回值被视为“正常”或“确定”。当您返回other than 0
内容时,可以为OK或错误。例如,如果您发出read()
调用,它可能会返回读取的正字节数 - 这肯定不是错误。但是,如果它返回0
,则意味着文件结束。任何负值都会意味着阅读时会出现一些错误。
答案 4 :(得分:0)
S_OK
常量等于零)。如果操作成功,Windows文件操作(CreateFile
等)将返回非零。你看,这取决于。可能涉及的唯一约定是:必须记录代码!!! int
可能更适合更复杂的功能(您可能需要分析潜在的错误)。由于int
和bool
通常在 EAX 寄存器中返回(假设您使用 x86 架构),因此无需额外内存即可返回一个int
而不是bool
。答案 5 :(得分:0)
最初返回值与错误代码相对应。想象一下,程序可能存在的所有可能错误结果的大表。该计划终止;你想知道什么,如果有的话,出错。如果返回非零整数,则在错误代码表中查找。如果返回0,则相当于“没有出错。”
我只是这样说,因为有时人们发现0不直观,0意味着好事。这有点像玻璃完全是空的......毒药。
答案 6 :(得分:0)
这是C / Unix遗产的残余。
如果在脚本中调用您的程序,则脚本可以了解您的程序是否成功。因此,诞生了从可执行程序返回0成功的惯例。
C没有本机布尔类型,所以这是一个整数。这使我们能够针对不同类型的错误返回不同的数字。
然后,这个约定传播到常规函数,因为正如其他人发布的那样,C / C ++最初没有异常,甚至一旦我们有异常,它就需要纪律才能正确使用它们,并且有很多遗留代码(和传统程序员)使用返回值约定。
如果您感兴趣的是成功/失败,那么0表示失败,1表示成功。对于内部返回值,即使目前只有两个值,我建议使用enum
类型,因为双态有一种演变为三态的方式,并且更容易理解你的'做的。