1

可能重复:
main() 在 C/C++ 中应该返回什么?

我在 C 中有这个简单的程序:

#include <stdio.h>

int main()
{
  return 8;
}

返回值的含义是什么,如何显示,或者如何使用?

4

8 回答 8

4

返回值的含义是什么?

它用于将main()函数的状态返回给调用者main()

参考:
C++03 标准:18.3 开始和终止

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

如何显示它,或如何使用它?

就像您将显示或使用任何其他函数的返回值一样。main()只是 C/C++ 中的另一个函数,在这方面 main 并没有什么特别之处。

于 2012-11-03T04:32:49.147 回答
3

在类 unix 系统上,结果代码可以这样显示:

$ ./myprogram
$ echo $?
8
$
于 2012-11-03T04:30:52.967 回答
2

0EXIT_SUCCESS给出一些实现定义的“成功退出”值。在某些系统上,这不一定直接通过。例如,在 VMS 上,偶数值表示失败,奇数值表示成功,所以return 0;在程序中实际上返回了一个非零值(如果我没记错的话,是 1)给 shell。

EXIT_FAILURE给出一些实现定义的“失败退出”值。

C 和 C++ 标准不尝试定义任何其他内容,但在典型系统(Windows、Linux 等)上,至少该值的低 8 位将作为程序的返回值传递回环境.

您可以从另一个程序(尤其是 shell)中使用它来确定这是成功还是失败(如果是,可能是如何/为什么失败)。你可以通过生成这个程序来显示它,收集返回的值,然后像任何其他数字一样打印出来:

#include <stdlib.h>
#include <stdio.h>
#include <process.h>
#include <signal.h>

int main(int argc, char **argv) {
    int retval;

    signal(SIGINT, SIG_IGN);
    retval = spawnvp(P_WAIT, argv[1], argv+1);

    printf("%s returned: %d\n", argv[1], retval);
    return 0;
}
于 2012-11-03T04:32:46.260 回答
1

return 0 表示正常退出。return x with x != 0 表示以“错误”终止。

于 2012-11-03T04:31:15.553 回答
0

返回的值被发送到派生新进程并执行您的程序的父进程。一般来说,父进程是shell,所以它什么都不做,但是如果父进程不是shell,那么父进程可以使用它来了解子进程的退出状态,并且可以根据它采取适当的行动。

于 2012-11-03T06:54:11.287 回答
0

The return value simply tells the CPU that the program either exited successfully or unsuccessfully. 0 means that the exit was successful, while 1 means that the exit was unsuccessful.

EXIT_SUCCESS is also equal to 0 and EXIT_FAILURE is also equal to 1. You can return it by using the signal() function and the spawnvp() function.

于 2012-11-03T04:39:18.530 回答
0

C 和 C++ 标准只定义了main返回值的两种可能含义,即 process success和 process failure

遵循标准,您可以通过返回来调用失败含义,您可以通过返回 0 或通过返回EXIT_FAILURE来调用成功EXIT_SUCCESS含义,其中两个命名常量是由 , 定义的宏符号<stdlib.h>,碰巧也声明了exitand abort

在实践中,*nix 和 Windows 的返回值直接成为进程退出代码。其主要用途是根据该程序的成功或失败有条件地执行其他程序。例如,在 Windows 的 [cmd.exe] 中:

[D:\开发\测试]
> md 等等

[D:\开发\测试]
> (rd blah 2>nul) && echo 讨厌的目录已删除 || echo oops,无法删除目录
讨厌的目录已删除

[D:\开发\测试]
>回显 %errorlevel%
0

[D:\开发\测试]
> (rd blah 2>nul) && echo 讨厌的目录已删除 || echo oops,无法删除目录
糟糕,无法删除目录

[D:\开发\测试]
>回显 %errorlevel%
2

[D:\开发\测试]
> _

在 *nix 和 Windows 中,您可以返回除 C 和 C++ 标准定义的值之外的其他值。

然而,在 Windows 中,一个略高于 256 的值(我永远记不起确切的值)用作轮询进程是否已完成的状态代码,因此为避免出现问题,应该保持低于 256 或远高于它,例如32 位状态码。

于 2012-11-03T04:49:29.920 回答
0

返回值是运行结束时的消息,0 表示没有错误,任何其他值都是错误代码。

于 2012-11-03T04:33:04.420 回答