在C++程序的主要函数中,“return 0”的作用和含义是什么

In the main function of a C++ program, what does `return 0` do and mean?

本文关键字:作用 是什么 return 程序 C++ 函数      更新时间:2023-10-16

可能的重复项:
什么是主的适当声明?

在没有特别引用任何代码的情况下,我正在寻找以下示例的解释:

#include <iostream>
int main()
{
    std::cout << "Hello world" << std::endl;
    return 0;
}

我不明白return 0做什么。你能用尽可能简单的英语解释一下吗?

这定义了进程的退出状态。尽管是一个int,但在类Unix系统上,该值始终在0-255范围内(请参阅退出和退出状态(。在Microsoft系统上,您可以使用 32 位有符号整数作为退出代码,您可以使用 %ERRORLEVEL% 进行检查。为了便于携带,我建议坚持0-255范围。

下面是一个微不足道的例子:

$ cat -n exit_code.cpp 
     1  int main()
     2  {
     3      return 42;
     4  }
     5  

建:

$ make exit_code
g++ exit_code.cpp -o exit_code

运行(在 bash(:

$ ./exit_code

检查退出状态:

$ echo $?
42

通常,状态为零表示成功,非零表示失败。这在 shell 脚本中很有用,依此类推,用于指示故障级别(如果有(:

$ ./exit_code
exit_status=$?
if [[ ${exit_status} ]] ; then
    echo "The process failed with status ${exit_status}."
else
    echo "Success!"
fi
The process failed with status 42.

以下评论...

在标准C++标头<cstdlib>中,定义了以下宏:

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

然而,GNU C 库文档的退出状态部分描述了相同的宏,明智地指出:

可移植性说明:某些非 POSIX 系统对退出状态值使用不同的约定。为了获得更大的可移植性,您可以分别对成功和失败的传统状态值使用宏EXIT_SUCCESS和EXIT_FAILURE。它们在文件 stdlib.h 中声明。

General return

ing

每个函数都有一个返回类型

在下面的示例中,类型为 void ,这是一个没有值的"不完整类型";使用此作为返回类型意味着该函数不返回任何值:

void foo() {
   std::cout << "Hello worldn";
}

但是,在下面的示例中,返回类型为 int

int foo() {
   return 3;
}

return 语句确定对函数的调用foo的计算结果。因此,std::cout << foo()将导致"3"被打印到标准输出。


returnmain,特别是

当所讨论的函数恰好是"main"函数或程序的入口点时,它就更特殊了,因为"main"函数的"返回值"被视为程序的"退出代码"——它告诉调用环境(例如终端会话(程序的执行是否被视为成功。它必须是一个int,这里的值0表示"一切顺利":

值得注意的是,您实际上可以在"main"函数中完全省略return 0;,因为它将被隐式包含。但是,如果您想return 1;或其他一些值,这对您没有多大帮助,并且它不会与其他功能一起发挥作用。


引文

[C++11: 3.6.1/5]: main中的返回语句具有以下效果: 离开主功能(使用自动销毁任何对象 存储持续时间(std::exit并使用返回值作为 论点。如果控制到达main末尾而没有遇到 return 语句,效果是执行return 0;

[C++11: 18.5/8]:

       [[noreturn]] void exit(int status)

该函数exit()在此国际标准中具有其他行为

  • 首先,销毁具有线程存储持续时间并与当前线程关联的对象。
    接下来,销毁具有静态存储持续时间的对象,并调用通过调用atexit注册的函数。有关销毁和调用的顺序,请参见 3.6.3。(自动对象不会因调用 exit(( 而被销毁。
    如果控件离开由 exit 调用的已注册函数,因为该函数未为引发的异常提供处理程序,则应调用 terminate() (15.5.1(。
  • 接下来,刷新所有具有未写入缓冲数据的打开 C 流(由 <cstdio> 中声明的函数签名调解(,关闭所有打开的 C 流,并删除通过调用tmpfile()创建的所有文件。
  • 最后,控制权返回到主机环境。如果状态为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式。如果 状态为 EXIT_FAILURE ,则返回状态不成功终止的实现定义形式。否则,返回的状态是实现定义的。

引导说明

我建议使用其中一种资源,因为这种事情在任何一本体面的同行评审C++书中都有适当的解释;YouTube教程不是学习C++的好方法,Stack Overflow的贡献者通常会希望你在寻求帮助之前有一本像样的书来形成你之前的研究。

之所以使用它,是因为您可以将程序用作命令行工具。如果有另一个进程等待程序的输出,你可以选择在一切成功时返回 0,如果有错误或任何其他常量,则返回 -1,根据你想要传达的内容。

想想你的老板让你去取邮件。拿起邮件后,你告诉你的老板一切都很好。

操作系统是老板,程序是你。return 0所做的只是告诉操作系统一切顺利。

在窗口下,您可以按如下方式测试返回值(在批处理脚本中(:

MyAppTest.exe
@if "%ERRORLEVEL%" == "0" goto success
 echo Failure
 goto end
:success
 echo Success
:end

main()返回与调用std::exit()并将返回值作为 status 参数传递具有相同的效果。

std::exit的行为在第 18.5 节 ( [support.start.term] ( 中详细介绍,并描述了状态代码:

最后,控制权返回到主机环境。 如果状态为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式。如果 状态为 EXIT_FAILURE ,则返回状态不成功终止的实现定义形式。 否则,返回的状态是实现定义的。

返回用于转义函数。返回值 0 只是允许它以代码退出:0。此外,返回 0 表示应用程序成功退出。

取决于操作系统,但退出代码 0 表示在 UNIX、VMS 和 Windows 上成功

main 函数的返回值将返回给调用应用程序或进程(很多时候这是一个 shell 脚本(。 返回值用于指示应用程序的退出状态。

对于返回值

应该是什么没有严格的规则,但按照惯例,返回值为零表示正常的应用程序退出。 任何非零值都表示应用程序异常退出。

在像您这样的简单应用程序中,返回的值没有任何意义。 如果存在观察过程(例如,如果一个程序启动另一个程序(,则可以是获取状态或错误代码的简单方法。

对于没有状态或错误代码的简单应用程序,大多数人return 0正常的应用程序退出(通常是成功(,如果应用程序无法正确执行,则return 1

0是一个

整数。

主函数必须返回一个整数。

看看:

int main()

int代表整数,在这种情况下return返回0:一个整数来终止程序。

通常对于错误,您必须返回1; 0是成功的常规价值。

在现代操作系统上,每个程序都将以特定的"退出代码"退出。

免责声明1.:该概念的实际规范(具有退出代码(根本不在任何编程语言规范的范围之内。所以:任何再次问我关于标准参考的人都可以退缩到它本身,暂时考虑一个更好的答案。

DISPLAIMER NO 2.:这些退出代码的实际值没有在实际的"编程语言规范"中指定,因为这超出了"编程语言规范"的范围。

长期以来,实践表明,退出代码"0"意味着"成功",而任何其他代码都表示错误......