当 main() 函数没有返回零时会发生什么?

4
请考虑以下代码:
#include <stdio.h>

int main()
{
    int x;
    printf ("\nEnter x: ");
    scanf ("%d", &x);

    return x;
}

Output:
$Enter x: -2

$echo $?
254

我的问题是:

当操作系统执行进程P(上述代码正在执行)并得到main()函数的返回值为非零时,操作系统会采取何种处理方式?

3个回答

4

返回值实际上表示程序完成的状态。非零值表示程序异常终止。此状态可能会被其他程序使用,因此返回实际状态始终是一个好习惯。


5
有点过于简化了。main 函数的返回值有三个预定义值:0EXIT_SUCCESSEXIT_FAILURE,其中前两个表示程序的成功。所有其他值的解释都是“实现定义的”。例如,在 Linux 上,所有 256 的倍数也表示成功,因为它只查看返回值的低位。 - Jens Gustedt
感谢@JensGustedt更多的澄清。 - Sakthi Kumar

4

这里需要明确你所理解的“操作系统”是什么。

从shell的角度来看(通常它只是另一个用户空间程序,而不是内核本身的一部分),进程的退出值用于评估表达式的值,在进行shell编程时非常重要,因为在进程终止后,这是人们最自然的检查方式。

从内核的角度来看,进程的退出值在很大程度上被忽略了。无论进程返回了什么退出码,内核都必须清理其后果。


1
通常,当程序“按预期”执行时,我们返回0。如果它做了不应该做的事情,我们根据错误类型返回非零值(有关此内容,请参阅errno手册)。现在,这个返回值由运行程序的“shell”接收。可以使用BASH中的“$?”访问此返回值。因此,这仅是为了用户方便而存在的程序(即它是否正确运行,如果没有,则出现了什么错误)。然后,可以在shell脚本等中使用此返回值来做出决策,以确定是否重新运行或管理员想要执行的其他操作。内核只清理用户空间程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接