在C程序中,如果我们想从终端提供一些输入,那么我们可以通过以下方式给出:
int main(int argc, char *argv[])
同样,如果我们想获得main()
函数的返回值,那么我们如何才能得到它?
在每个main()
我们写return 1
或return 0
;我怎么知道我的main()
在终端返回了什么?
修改:1
我知道echo $?
我们可以获得main()
的返回值,但它只允许我成功返回小于125(在Linux中)的值。 $ variable
所以
为什么int
的返回类型为main()
?为什么不保留short int
?
EDIT2
如果main()
返回的值大于125,我在哪里可以找到错误代码的含义?
答案 0 :(得分:49)
大多数shell在$?
中存储上一个运行命令的退出代码,因此您可以存储或显示它。
$ ./a.out
$ echo $? # note - after this command $? contains the exit code of echo!
或
$ ./a.out
$ exit_code=$? # save the exit code in another shell variable.
请注意,在linux下,虽然您返回int
,但通常只有少于126的值可以安全使用。保留较高的值以记录在尝试运行命令时可能发生的其他错误,或记录哪个信号(如果有)终止了您的程序。
答案 1 :(得分:40)
你的shell可能有一个特殊的变量$?
,它保存最后一个程序的返回值。因此,在程序完成后不久,您就可以运行:
echo $?
查看返回的值。
答案 2 :(得分:31)
在DOS / Windows中,您可以在批处理文件中使用errorlevel
executable optional arguments
if errorlevel 4 goto LABEL4
if errorlevel 3 goto LABEL3
if errorlevel 2 goto LABEL2
if errorlevel 1 goto LABEL1
:SUCCESS
echo SUCCESS; errorlevel 0
goto :eof
:LABEL1
echo FAILURE; errorlevel 1
goto :eof
:LABEL2
echo FAILURE; errorlevel 2
goto :eof
REM ...
请记住检查从最高到最低,因为if errorlevel 42
确实意味着“如果errorlevel为42或更高”
答案 3 :(得分:6)
总结评论和点点滴滴,使它们在一个地方。
AC程序始终有一个退出代码,如果程序正常终止,程序可以自行决定,方法是从main
函数返回一个值或调用{{1}功能。如果程序异常终止,例如通过分段错误,则操作系统决定退出代码。
在Unix(Posix)中,退出代码是一个8位值:0-255。它与一些其他元数据结合为状态:其他元数据包括有关程序是否正常终止的信息,是否由于信号而终止,如果是,则终止哪个信号。有关详细信息,请参阅wait(2)手册页。
在Unix中,在shell中,上一个命令的状态可以作为exit
特殊变量访问。因为退出代码只有8位,并且它被视为无符号整数,如果返回负值,它将变为正数:-1变为255.同样,如果返回的值大于255,则只有最小值使用有效8位:256变为0。
$?
的返回类型为main
,而不是int
或short
,因为将其设为较小的类型没有特别的好处,特别是在此时历史,决定几十年后。现在改变它只会导致不必要的并发症。
如果要从C执行程序,标准库提供char
函数,可以方便地返回程序的状态。 (注意system
通过shell运行命令,如果在命令行上给命令提供任何外部提供的文件名或其他内容,则需要非常小心地正确转义所有内容。)
为了获得更大的灵活性,您可以使用系统调用system
,fork
(或其中一种变体,请参阅exec(3)手册页)和{{1}来执行其他程序。 (已经在上面提到过)。这是强大而灵活的,但也很容易出错,所以一定要先阅读文档并查看一些示例程序。 (另一方面,学习这些东西非常有趣。)
答案 4 :(得分:3)
您可以使用命令basic linux命令获取退出值 回声$? 错误代码是标准的,详细说明如下 link
一般代码是
**
0-成功
1-一般错误
126-许可问题
127-非法指挥
128-无效的参数和致命错误
255-超出范围**
答案 5 :(得分:1)
在windows命令行中从main读取返回值 使用 echo %errorlevel%
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
int i;
printf("Enter a number");
scanf("%d",&i);
if(i==2)
exit(1);
if(i==3)
exit(2);
return 0;
}