一尘不染

为什么我不能从主函数返回更大的值?

linux

我试图从我的主函数返回一个更大的值,例如1000,但是当我键入echo $?它时显示0。

如果我返回一个较小的值(如100),它将显示正确的值。

我的代码:

int main(void)
{
     return 1000;
}

我们可以返回的值是否有限制?


阅读 198

收藏
2020-06-03

共1个答案

一尘不染

这里有两个相关的概念:C退出状态和bash返回代码。它们都覆盖0-255的范围,但是bash出于自己的目的使用大于126的数字,因此从程序中返回这些值会造成混乱。

为了安全起见,请将退出状态代码限制为0-127,因为这是最便于移植的方法,至少http://docs.python.org/library/sys.html#sys.exit暗示了这一点。

C退出状态被放入bash
$?变量执行后,但是bash使用127表示“找不到命令”,因此您可能要避免这种情况。Bash参考页

Bash还使用128-255表示信号-它们表示进程已被信号杀死: exit code = 128 + signal number。因此,您可能可以避免使用接近255的数字,因为信号数字不太可能会升至如此之高。

除了这些通用准则外,还进行了许多尝试来定义不同数字的含义:http
:
//tldp.org/LDP/abs/html/exitcodes.html。

因此,您想从程序中返回一个任意整数,最好将其打印到stdout,然后VALUE=$(program)从bash脚本中捕获它。

2020-06-03