【发布时间】:2017-09-05 21:53:33
【问题描述】:
我了解到在 C 语言中 main() 通常返回一个 int。 到目前为止,我已经对其进行了测试。例如,int 是 4 个字节, 但是 shell 只接受从 main() 返回的无符号字符。 在我的系统(Linux、FreeBSD 和 NetBSD)上,shell(bash 和 tcsh)很可能只接受只接受最右边的一个字节。例如,如果 main() 返回 0xabcdef0a,在 shell 中编译并运行后,发出命令 echo $?,结果在所有系统中始终为 10 (0x0a)。所以我的问题是,为什么 main() 不返回 unsigned char 而不是 int?
【问题讨论】:
-
历史 — 当约定建立时,C 中没有任何
unsigned char。此外,捕获退出状态的进程会获得一个 16 位的值,其中 8 位是退出状态,其中 8 位是与信号相关的信息(如果子进程没有死于信号,则为 0) .而在这个建立的年代,int通常是 16 位,所以int是合适的。 -
@JonathanLeffler 感谢您的澄清。这让我很清楚。 :-)
-
为了使这个工作可以解决什么问题?
-
@Nguaial, ...“工作”?一切都已经按照 POSIX 的定义准确运行了。
-
来自 POSIX 规范,强调添加:“当使用特殊参数 '?' 报告退出状态时,shell 应报告可用的全部八位退出状态” .因此,一个 shell 不应该有超过 8 位的内容,用
$?表示。