我怎样才能得到我的主要function已经返回?
在C程序中,如果我们想从terminal给一些input,那么我们可以给它:
int main(int argc, char *argv[])
同样,如果我们想要获得main()
函数的返回值,那么我们怎样才能得到它?
在每个main()
我们写return 1
或return 0
; 我怎么知道我的main()
在terminal返回了什么?
编辑:1
我明白,通过echo $?
我们可以得到main()
的返回值,但是它只允许我成功返回小于125的值(在Linux中)。 比这更多的返回值不能被$ variable
成功接收
为什么int
是main()
的返回types? 为什么不保持short int
?
EDIT2
如果main()
返回的值大于125,我可以从哪里find错误代码的含义?
大多数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的值才可以使用。 保留更高的值以logging尝试运行命令时可能发生的其他错误,或者logging哪个信号(如果有)终止程序。
你的shell可能有一个特殊的variables$?
,它保存最后的程序返回值。 所以,在你的程序结束后,你可以运行:
echo $?
看到返回的值。
在DOS / Windows中,您可以在batch file中使用错误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
真的意味着“如果错误级别是42或更大”
总结评论和点点滴滴,让他们在一个地方。
AC程序总是有一个退出代码 ,如果程序正常终止,程序可以自己决定退出代码 ,通过返回main
函数的值或调用exit
函数。 如果程序exception终止,例如分段错误,则操作系统决定退出代码。
在Unix(Posix)中,退出代码是一个8位值:0-255。 它与一些其他元数据结合到一个状态 :其他元数据包括有关程序是否正常终止,是否由于信号而终止的信息,如果是,哪个信号。 有关详细信息,请参阅wait(2)手册页。
在Unix中,在shell中,以前的命令的状态可以通过$?
特殊variables。 由于退出代码只有8位,并且被视为一个无符号整数,所以如果返回一个负值,它将变成正值:-1变成255.同样,如果返回一个大于255的值,有效的8位被使用:256变成0。
main
的返回types是int
,而不是short
或者char
,因为把它作为一个更小的types没有什么特别的好处,特别是在历史的这个时刻,在决定之后的几十年里。 现在改变它只会造成不必要的麻烦。
如果你想从C执行一个程序,标准库提供了system
函数,它可以方便地返回程序的状态。 (请注意, system
通过shell运行命令,如果您在命令行上提供了任何外部提供的文件名或其他内容,则必须非常小心地正确地转义所有内容。)
为了获得更大的灵活性,可以使用系统调用fork
, execl
(或其中一个变体,请参阅exec(3)手册页)执行其他程序,并wait
(上面已经提到)。 这个function强大而灵活,但也容易出错,因此请务必阅读文档,并首先查看一些示例程序。 (另一方面,学习这些东西非常有趣。)
您可以使用命令基本的linux命令echo $获取退出值? 错误代码是标准的,细节在这个链接中解释
一般的代码是
**
0-成功
1-一般错误
126-许可问题
127-非法指挥
128-无效的参数和致命错误
255 – 超出范围**