gpt4 book ai didi

c - 在 FreeBSD/bin/and/usr/bin 中返回 vs 退出

转载 作者:太空狗 更新时间:2023-10-29 15:06:59 25 4
gpt4 key购买 nike

我注意到 /bin/usr/bin 中的 FreeBSD 代码有一些使用 exit 而不是 return 的修复,这是什么意思?

我的想法是,return 语句可能会导致 vfork(2) 破坏栈帧,这是唯一的原因吗?如果这是真的,那为什么只有 /bin/usr/bin 中的部分命令得到修复,而不是全部?

最佳答案

根据 5.1.2.2.3p1

If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument

这排除了您的破坏栈帧理论; return 0; 在功能上等同于 exit(0); 以符合 C 实现(至少对于非递归 main 入口点)。

我认为这种变化仅仅是风格上的,或者可能是出于无知。另一种可能是作者有将 main 转换为递归函数的愿望(或者 main 已经被转换为递归函数;idk,我只是做了一个快速的 grep而且它似乎不会立即递归)。最后,作为最后一个严峻的选择,也许 FreeBSD 使用的 C 实现是不符合规范的(我当然希望不是!)...

编辑:我是通过阅读 this answer 才想到的。这可能是编译器错误的变通方法,但遗憾的是,我检查了源代码以了解 atexit 的使用情况,但找不到任何进一步追究这一推理的理由。

关于c - 在 FreeBSD/bin/and/usr/bin 中返回 vs 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com