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

时间:2011-12-24 18:11:40

标签: c linux gcc

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

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

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

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

修改:1

我知道echo $?我们可以获得main()的返回值,但它只允许我成功返回小于125(在Linux中)的值。 $ variable所以

无法成功收到超过该值的返回值

为什么int的返回类型为main()?为什么不保留short int

EDIT2

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

6 个答案:

答案 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,而不是intshort,因为将其设为较小的类型没有特别的好处,特别是在此时历史,决定几十年后。现在改变它只会导致不必要的并发症。

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

为了获得更大的灵活性,您可以使用系统调用systemfork(或其中一种变体,请参阅exec(3)手册页)和{{1}来执行其他程序。 (已经在上面提到过)。这是强大而灵活的,但也很容易出错,所以一定要先阅读文档并查看一些示例程序。 (另一方面,学习这些东西非常有趣。)

答案 4 :(得分:3)

您可以使用命令basic linux命令获取退出值 回声$? 错误代码是标准的,详细说明如下 link

一般代码是

**

0-成功

1-一般错误

126-许可问题

127-非法指挥

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

255-超出范围**

答案 5 :(得分:1)

<块引用>

在windows命令行中从main读取返回值 使用 echo %errorlevel%

(代码) return.c

#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;
}

输出

OUTPUT of above program return.c