如何获得我的主要功能返回的内容?

Jee*_*tel 65 c linux gcc

在C程序中,如果我们想从终端提供一些输入,那么我们可以通过以下方式给出:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

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

在每个main()我们写return 1return 0; 我怎么知道我main()在码头回来了什么?

编辑:1

我得到它,因为echo $?我们可以获得返回值,main()但它只允许我成功返回小于125(在Linux中)的值.不止于此返回值不能被成功地接收到$ variable这样

为什么int回归类型main()?为什么不保留它short int

EDIT2

如果main()返回大于125的值,我在哪里可以找到错误代码的含义?

CB *_*ley 50

大多数shell存储上一个运行命令的退出代码,$?以便您可以存储或显示它.

$ ./a.out
$ echo $?     # note - after this command $? contains the exit code of echo!
Run Code Online (Sandbox Code Playgroud)

要么

$ ./a.out
$ exit_code=$?    # save the exit code in another shell variable.
Run Code Online (Sandbox Code Playgroud)

请注意,在linux下,虽然您返回一个int,但通常只有小于126的值可以安全使用.保留较高的值以记录在尝试运行命令时可能发生的其他错误,或记录哪个信号(如果有)终止程序.

  • 我不知道UNIX风味保持超过最低8位. (2认同)
  • @MikeDeSimone:我刚刚查看了bash手册页,它实际上比我记忆中的要少.如果您尝试使用> 125,则可能会与shell使用的值发生冲突.我不确定其他炮弹. (2认同)
  • 好点子.Unix在操作系统级别允许最多255个,但它没有规定shell保留所有这些...... (2认同)

sid*_*yll 40

你的shell可能有一个特殊的变量$?,它保存最后一个程序的返回值.因此,在程序完成后不久,您可以运行:

echo $?
Run Code Online (Sandbox Code Playgroud)

查看返回的值.

  • @sidyll:我认为你的意思是7位,而不是8位.-1的低8位为255,低7位为127. (6认同)
  • 仅解释低8位(这就是返回值必须在0-255范围内的原因).127来自负整数的表示,然后被解释为无符号. (3认同)
  • @eharvest:我不明白你的工作.-1是很多的,将它截断为8位并视为有符号,你仍然有-1,将它视为无符号,你有255. (2认同)

pmg*_*pmg 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 ...
Run Code Online (Sandbox Code Playgroud)

只记得检查从最大到最低,因为if errorlevel 42真的意味着"如果errorlevel是42或更高"

  • +1好答案.我一直在寻找一种特定于Windows的方法,这可能不需要单独的问题. (12认同)
  • -1因为作者用"linux"标记了问题. (9认同)
  • +1 @Alex:好点.在我的辩护中,我在开始写答案后才注意到标签 - 并决定完成并发布它 (4认同)

小智 6

总结评论和点点滴滴,使它们在一个地方.

AC程序总是有退出代码,如果程序正常终止,程序可以通过返回main函数的值或通过调用exit函数来自行决定退出代码.如果程序异常终止,例如通过分段错误,则操作系统决定退出代码.

在Unix(Posix)中,退出代码是一个8位值:0-255.它与一些其他元数据结合到一个状态:其他元数据包括有关程序是否正常终止的信息,是否由于信号而终止,如果是,则返回哪个信号.有关详细信息,请参阅wait(2)手册页.

在Unix中,在shell中,可以访问上一个命令的状态作为$?特殊变量.因为退出代码只有8位,并且它被视为无符号整数,如果返回负值,它将变为正数:-1变为255.同样,如果返回的值大于255,则只有最小值使用有效8位:256变为0.

返回类型mainint,而不是,shortchar因为没有特别的好处使它成为一个较小的类型,特别是在历史的这一点,几十年后决定.现在更改它只会导致不必要的并发症.

如果要从C执行程序,标准库提供了该system函数,可以方便地返回程序的状态.(请注意,system通过shell运行命令,如果在命令行上为命令提供任何外部提供的文件名或其他内容,则需要非常小心地正确转义所有内容.)

对于更多的灵活性,你可以执行使用系统调用其他程序fork,execl(或其变体之一,看到EXEC(3)手册页),和wait(上面已经提到).这是强大而灵活的,但也很容易出错,所以一定要先阅读文档并查看一些示例程序.(另一方面,学习这些东西非常有趣.)