Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的int main()返回一个int,但shell只接受无符号字符_C_Bash_Tcsh - Fatal编程技术网

C语言中的int main()返回一个int,但shell只接受无符号字符

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

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

将注释转换为答案

原因很常见:历史。20世纪70年代早期,当该约定建立时,C中没有
无符号字符
类型。此外,捕获退出状态的进程获得一个16位值,其中8位是退出状态,8位是信号相关信息(如果孩子没有死于信号,则为0)。而在建立这个模型的时候,
int
通常是16位,因此使用
int
是合适的

您还可以查看如何将评论转换为答案

原因很常见:历史。20世纪70年代早期,当该约定建立时,C中没有
无符号字符
类型。此外,捕获退出状态的进程获得一个16位值,其中8位是退出状态,8位是信号相关信息(如果孩子没有死于信号,则为0)。而在建立这个模型的时候,
int
通常是16位,因此使用
int
是合适的


您还可以查看历史记录-当约定建立时,C中没有任何
无符号字符。此外,捕获退出状态的进程获得一个16位值,其中8位是退出状态,8位是信号相关信息(如果孩子没有死于信号,则为0)。在建立这个模型的时候,
int
通常是16位,所以
int
是合适的。@JonathanLeffler感谢您的澄清。这让我明白了。:-)为了让这一切顺利进行,需要做些什么?@Nguaial,…“工作”?一切都已经按照POSIX的定义正常工作了。在POSIX规范中,emphasis补充道:“当使用特殊参数“?”报告退出状态时,shell应报告可用的全部八位退出状态”。因此,shell在
$?
.History中表示的内容不应超过8位-当约定建立时,C中没有任何
无符号字符。此外,捕获退出状态的进程获得一个16位值,其中8位是退出状态,8位是信号相关信息(如果孩子没有死于信号,则为0)。在建立这个模型的时候,
int
通常是16位,所以
int
是合适的。@JonathanLeffler感谢您的澄清。这让我明白了。:-)为了让这一切顺利进行,需要做些什么?@Nguaial,…“工作”?一切都已经按照POSIX的定义正常工作了。在POSIX规范中,emphasis补充道:“当使用特殊参数“?”报告退出状态时,shell应报告可用的全部八位退出状态”。因此,shell的内容不应超过8位,以
$?
表示。批处理文件中用于对程序的退出值执行操作的旧MS-DOS
errorlevel
的最大值为255(8位)。批处理文件中用于对程序的退出值执行操作的旧MS-DOS
errorlevel
,最大值为255(8位)。