【问题标题】:What's the meaning of the return value of int main(), and how to display it? [duplicate]int main()的返回值是什么意思,如何显示? [复制]
【发布时间】:2012-10-23 17:51:47
【问题描述】:

可能重复:
What should main() return in C/C++?

我有这个简单的 C 程序:

#include <stdio.h>

int main()
{
  return 8;
}

返回值是什么意思,如何显示,或者如何使用?

【问题讨论】:

  • 为什么这个问题由于“重复”问题而被关闭?该问题主要处理返回值的含义,但我的问题主要集中在如何获取/显示以及如何使用该值。 @sinni800
  • 我不知道,但是我链接的这个问题也顺便回答了你的问题

标签: c++ c return


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    C和C++标准只定义了main返回值的两种可能含义,即进程成功和进程失败

    按照标准,你可以通过返回EXIT_FAILURE来调用失败含义,你可以通过返回0或返回EXIT_SUCCESS来调用成功含义,其中这两个命名常量是由&lt;stdlib.h&gt; 定义的宏符号,碰巧也声明了exitabort

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

    [D:\开发\测试] > md blah [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 位状态码。

    【讨论】:

      【解决方案3】:

      返回值只是告诉 CPU 程序要么成功退出,要么不成功。 0表示退出成功,1表示退出不成功。

      EXIT_SUCCESS 也等于 0,EXIT_FAILURE 也等于 1。您可以使用signal() 函数和spawnvp() 函数返回它。

      【讨论】:

        【解决方案4】:

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

        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;
        }
        

        【讨论】:

          【解决方案5】:

          返回值为运行结束时的消息,0表示没有错误,其他值为错误码。

          【讨论】:

            【解决方案6】:

            返回值是什么意思?

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

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

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

            如何展示,或者如何使用?

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

            【讨论】:

            • C++11 标准 3.6.1.5;参考 18.5.8 中介绍的 std::exit(),以防有人感兴趣。
            • 相反,main 非常特别,与其他任何函数都不一样……你不能调用它,获取它的地址,而且你永远不会自己显式调用它。对我来说似乎很特别。
            • 另外,它是唯一具有默认结果值(即0)的函数。
            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              $ ./myprogram
              $ echo $?
              8
              $
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-03-09
                • 2021-07-21
                • 1970-01-01
                • 2013-04-25
                • 2019-12-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多