我怎样才能得到我的主要function已经返回?

在C程序中,如果我们想从terminal给一些input,那么我们可以给它:

int main(int argc, char *argv[]) 

同样,如果我们想要获得main()函数的返回值,那么我们怎样才能得到它?

在每个main()我们写return 1return 0 ; 我怎么知道我的main()在terminal返回了什么?

编辑:1

我明白,通过echo $? 我们可以得到main()的返回值,但是它只允许我成功返回小于125的值(在Linux中)。 比这更多的返回值不能被$ variable成功接收

为什么intmain()的返回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运行命令,如果您在命令行上提供了任何外部提供的文件名或其他内容,则必须非常小心地正确地转义所有内容。)

为了获得更大的灵活性,可以使用系统调用forkexecl (或其中一个变体,请参阅exec(3)手册页)执行其他程序,并wait (上面已经提到)。 这个function强大而灵活,但也容易出错,因此请务必阅读文档,并首先查看一些示例程序。 (另一方面,学习这些东西非常有趣。)

您可以使用命令基本的linux命令echo $获取退出值? 错误代码是标准的,细节在这个链接中解释

一般的代码是

**

0-成功

1-一般错误

126-许可问题

127-非法指挥

128-无效的参数和致命错误

255 – 超出范围**