我正在阅读示例代码,发现对于错误消息,他们使用了return -1;
,而对于主要功能,他们使用了return 0;
。但是,当我将main函数返回值替换为return 10000;
时,它仍然构建并运行时没有错误。这是否意味着可以任意选择返回值并且对计算机没有意义(排除使用某些用户定义操作的返回值的情况)?为不同情况分配返回值的常规惯例是什么?
答案 0 :(得分:4)
主函数(应用程序)的返回值可以在其他应用程序中使用,以指示程序如何终止。传统上,如果程序成功终止,则使用0
,而其他整数(negative or positive
)表示存在某些问题或其他条件。
这些与应用程序不同,您可以在他们的手册中找到这些,以找出每个返回值的含义。
例如,您可以看到grep
命令手册(http://www.gnu.org/software/grep/manual/html_node/Exit-Status.html)它指出退出值0
如果选择了一行,1
表示没有选择任何行, 2
表示存在错误
答案 1 :(得分:1)
在使用libc
的系统上,这几乎是Unix系统的主要部分,当程序退出时会发生以下情况:
atexit
或on_exit
注册的功能按相反顺序调用_exit
,终止程序仅保留退出状态的低8位,将其截断为0
和255
之间的值。如何处理退货状态取决于父流程。例如,如果父进程是Bash,则0
和127
之间的值是用户定义的值,而128+
是专门处理的。
答案 2 :(得分:1)
按照惯例, main 中的返回值0通常是提示操作系统和用户成功执行程序。其他值可用于表示不同的错误代码或成功执行的不同路径特定于程序。你可以自由选择它们。
对于程序中的其他函数,返回值的解释取决于开发人员。
答案 3 :(得分:1)
便携式返回值为EXIT_SUCCESS
,EXIT_FAILURE
和0
(返回与EXIT_SUCCESS
相同的值。这些清单联系人在< cstdlib>中定义。任何其他值的含义都是特定于系统的。
答案 4 :(得分:0)
返回值由函数定义指定:
ret function(params);
然后,编译器将接受类型ret
的任何值。
示例:
int main();
可以返回int
类型的任何值(-INT_MAX
和+INT_MAX
之间)。超出此范围的值可由编译器自动转换。但是,非int
值(例如return std::vector<int>()
)将导致编译器错误。
具体来说,对于main
函数,您可以返回任何值。惯例是在没有错误发生时返回0,在发生错误时返回任何其他内容。错误值可以是正数或负数,如您所愿。