int main()的返回值是什么意思,以及如何显示它?
可能重复:
main()应该在C / C ++中返回什么?
我在C中有这个简单的程序:
#include int main() { return 8; }
返回值的含义是什么,如何显示或如何使用它?
返回值的含义是什么?
它用于将main()
函数的状态返回给main()
的调用者:
参考:
C ++ 03标准:18.3开始和终止
最后,控制权返回给主机环境。 如果status为零或EXIT_SUCCESS,则返回状态成功终止的实现定义forms 。 如果status为EXIT_FAILURE,则返回状态为不成功终止的实现定义forms 。 否则返回的状态是实现定义的。
如何显示它,或如何使用它?
正如您将显示或使用任何其他函数的返回值一样。 main()
只是C / C ++中的另一个函数,在这方面没有什么特别的main。
在类Unix系统上,结果代码可以这样显示:
$ ./myprogram $ echo $? 8 $
0
或EXIT_SUCCESS
为某些实现定义了“成功退出”值。 在某些系统上,这不一定是直接传递的。 例如,在VMS上,偶数值信号失败,奇数值表示成功,因此return 0;
在程序中实际上返回了一个非零值(1,如果我没记错的话)到shell。
EXIT_FAILURE
给出了一些实现定义的“失败退出”值。
C和C ++标准不会尝试定义任何其他内容,但在典型系统(Windows,Linux等)上,至少值的底部8位将作为程序的返回值传递回环境。
您可以从其他程序(尤其是shell)使用它来确定这是成功还是失败(如果是,可能是如何/为什么失败)。 您可以通过生成此程序,收集返回的值,然后像任何其他数字一样打印它来显示它:
#include #include #include #include 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; }
return 0表示正常退出。 使用x返回x!= 0表示以“错误”终止。
返回值是运行结束时的按摩,0表示没有错误,任何其他值都是错误代码。
返回值只是告诉CPU程序成功退出或失败。 0表示退出成功,而1表示退出不成功。
EXIT_SUCCESS也等于0,EXIT_FAILURE也等于1.您可以使用signal()
函数和spawnvp()
函数返回它。
C和C ++标准仅为main
返回值定义了两种可能的含义,即流程成功和流程失败 。
遵循标准,您可以通过返回EXIT_FAILURE
来调用失败含义,并且可以通过返回0或返回EXIT_SUCCESS
来调用成功含义,其中两个命名常量是由
定义的宏符号,正如它所发生的那样,也宣布exit
和abort
。
在* nix和Windows的实践中,返回的值直接成为进程退出代码 。 其主要用途是在此成功或失败的情况下有条件地执行其他程序。 例如,在Windows'[cmd.exe]中:
[d:\ dev的\测试] > md blah [d:\ dev的\测试] > (rd blah 2> nul)&& echo pesky dir删除|| echo oops,无法删除dir 讨厌的目录删除 [d:\ dev的\测试] > echo%errorlevel% 0 [d:\ dev的\测试] > (rd blah 2> nul)&& echo pesky dir删除|| echo oops,无法删除dir 哎呀,无法删除目录 [d:\ dev的\测试] > echo%errorlevel% 2 [d:\ dev的\测试] > _
在* nix和Windows中,您可以返回除C和C ++标准定义的值之外的其他值。
但是,在Windows中,一个略高于256的值(我永远无法回想起确切的值)被用作轮询进程是否已完成的状态代码,因此要避免出现问题,应该保持低于256,或者远高于它,例如32位状态代码。
返回的值将发送到父进程,该进程分叉一个新进程并执行您的程序。 通常父类是shell,因此它不对它做任何事情,但如果父进程不是shell,那么父进程可以使用它来知道子进程的退出状态,并且可以根据它采取适当的操作。