Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何获取主函数返回的内容?_C_Linux_Gcc - Fatal编程技术网

C 如何获取主函数返回的内容?

C 如何获取主函数返回的内容?,c,linux,gcc,C,Linux,Gcc,在C程序中,如果我们想从终端提供一些输入,那么我们可以通过以下方式提供: int main(int argc, char *argv[]) 同样,如果我们想得到main()函数的返回值,那么我们如何才能得到它呢 在每个main()中,我们编写return1或return0;我如何知道我的main()在终端返回了什么 编辑:1 我知道通过echo$?我们可以得到main()的返回值,但它只允许我成功地返回小于125的值(在Linux中)。$variableso无法成功接收大于该值的返回值 为什么

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

int main(int argc, char *argv[])
同样,如果我们想得到
main()
函数的返回值,那么我们如何才能得到它呢

在每个
main()
中,我们编写
return1
return0
;我如何知道我的
main()
在终端返回了什么

编辑:1

我知道通过
echo$?
我们可以得到
main()
的返回值,但它只允许我成功地返回小于125的值(在Linux中)。
$variable
so无法成功接收大于该值的返回值

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

Edit2


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

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

echo $?

查看返回值。

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

$ ./a.out
$ echo $?     # note - after this command $? contains the exit code of echo!


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

在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 ...

请记住从最大值到最小值进行检查,因为如果errorlevel 42真正的意思是“如果errorlevel为42或更高”

将注释和片段汇总在一个位置

C程序总是有一个退出代码,程序可以通过从
main
函数返回值或调用
exit
函数自行决定是否正常终止。如果程序异常终止,例如由于分段错误,则操作系统决定退出代码

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

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

main
的返回类型是
int
,而不是
short
char
,因为将其变小并没有什么特别的好处,尤其是在历史上的这一点上,在它被决定的几十年之后。现在改变它只会导致不必要的复杂情况

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


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

您可以使用命令basiclinux命令获得退出值 回声$? 错误代码是标准的,详细信息将在本节中解释

通用代码为

**

0-成功

1-一般错误

126-许可问题

127非法命令

128个无效参数和致命错误

255超出范围**

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

(代码)return.c
#包括
#包括
int main(int argc,char*argv[])
{
int i;
printf(“输入一个数字”);
scanf(“%d”、&i);
如果(i==2)
出口(1);
如果(i==3)
出口(2);
返回0;
}
输出

我不知道有哪种UNIX版本的存储空间超过了最低的8位。@MikeDeSimone:我刚刚查看了bash手册页,它实际上比我记忆中的要小。如果尝试使用>125,则可能会与shell使用的值冲突。我对其他的贝壳没有把握,说得对。Unix在操作系统级别最多允许255位,但它并不要求shell保留所有这些…只解释低8位(这就是返回值必须在0-255范围内的原因)。127来自负整数的表示,负整数被解释为无符号。@sidyll:我想你指的是7位,不是8位。-1的低位8位是255,低位7位是127。@eharvest:我不明白你的工作原理-1是很多个1,将其截断为8位,并将其视为有符号的,你仍然有-1,将其视为无符号的,你有255个。在我的辩护中,我只是在我开始写答案后才注意到标签——并决定完成并发布+1个好答案。我一直在寻找一个特定于Windows的方法,这可能不需要单独的问题。+1,因为将来能够在一个地方找到它仍然很好(尽管我
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 ...
#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;
}