C语言中的int main()返回一个int但是shell只接受unsigned char

时间:2017-04-10 18:17:08

标签: c bash tcsh

我了解到在C语言中main()通常返回一个int。 到目前为止我已经测试过了。例如,int是4个字节, 但是shell只接受从main()返回的unsigned char。 在我的系统(Linux,FreeBSD和NetBSD)上,shell(bash和tcsh)可能只接受 只有一个最右边的字节 。例如,如果main()返回0xabcdef0a,则在编译并在shell中运行然后发出命令echo $?,结果在所有系统中始终为10(0x0a)。所以我的问题是,为什么main()不返回unsigned char而不是int?

1 个答案:

答案 0 :(得分:2)

将评论转换为答案。

原因很常见:历史。在20世纪70年代早期建立公约时,C中没有"Stop participating"类型。此外,捕获退出状态的过程获得一个16位值,其中8位是退出状态,其中8位是信号相关信息(如果孩子没有从中死亡,则为0)信号)。在确定这一点的那些日子里,unsigned char通常是16位,因此使用int是合适的。

您还可以查看ExitCodes greater than 255 — possible?