popcorn games Asked: 2024-09-26 02:03:46 +0800 CST2024-09-26 02:03:46 +0800 CST 2024-09-26 02:03:46 +0800 CST 为什么名为 sl (stream locomotive)的程序总是以退出状态“1”结束? 772 为什么名为 sl (stream locomotive)的程序总是以退出状态“1”结束? sl 动画 sl 正在运行...... $ echo $? 1 为什么退出状态不是零? 能给我解释一下吗?我正在运行它tmux。 exit-status 1 个回答 Voted Best Answer Gilles 'SO- stop being evil' 2024-09-26T02:46:50+08:002024-09-26T02:46:50+08:00 这是一个玩具程序,因此正常的设计实践不一定适用。但它是开源的,历史记录是公开的,因此您可以查看源代码。一旦您找到相关的文件和行,考虑到该项目是用 Git 维护的,您可以使用它git blame来查找该行的最后修改时间。该项目在 GitHub 上,因此您可以使用那里的“Blame”按钮。 原始项目的当前版本(5.03+)始终以状态 0 退出。 如果使用 C99 编译器编译以前的版本(直到2017 年 4 月main),则退出时状态为 0。如果使用非 C99 兼容编译器编译它们,则在大多数体系结构中,它们通常会返回从 完成的最后一个函数调用返回的值的低 8 位。也可能不是 - 在 C99 之前的 C 语言版本中,从 末尾掉下来main是未定义的行为。理论上,未定义的行为会导致恶魔飞出你的鼻子,尽管在 Unix 环境中,这受到适当设备的可用性及其访问权限的限制。实际上,在大多数体系结构中,返回函数的返回值int放在寄存器中,因此程序的退出代码将根据最后写入该寄存器的任何值计算,该值往往是最后一个非 void 函数调用返回的值(但也可能不是,具体取决于具体函数是什么以及编译器优化)。 有一个颇为突出的分支,其作者决定始终返回 1 “因为当您输入 sl 时,从技术上讲您失败了”。
这是一个玩具程序,因此正常的设计实践不一定适用。但它是开源的,历史记录是公开的,因此您可以查看源代码。一旦您找到相关的文件和行,考虑到该项目是用 Git 维护的,您可以使用它
git blame
来查找该行的最后修改时间。该项目在 GitHub 上,因此您可以使用那里的“Blame”按钮。原始项目的当前版本(5.03+)始终以状态 0 退出。
如果使用 C99 编译器编译以前的版本(直到2017 年 4 月
main
),则退出时状态为 0。如果使用非 C99 兼容编译器编译它们,则在大多数体系结构中,它们通常会返回从 完成的最后一个函数调用返回的值的低 8 位。也可能不是 - 在 C99 之前的 C 语言版本中,从 末尾掉下来main
是未定义的行为。理论上,未定义的行为会导致恶魔飞出你的鼻子,尽管在 Unix 环境中,这受到适当设备的可用性及其访问权限的限制。实际上,在大多数体系结构中,返回函数的返回值int
放在寄存器中,因此程序的退出代码将根据最后写入该寄存器的任何值计算,该值往往是最后一个非 void 函数调用返回的值(但也可能不是,具体取决于具体函数是什么以及编译器优化)。有一个颇为突出的分支,其作者决定始终返回 1 “因为当您输入 sl 时,从技术上讲您失败了”。