2010-09-16 27 views

回答

11

GCC确实。但是,只有在编译包含ARM Linux [*]的无符号字符的平台时。当GCC针对x86编译时,默认情况下是对char进行签名。

[*]或者至少它已经在过去。就我所知,linux已经在ARM上切换到了另一个默认的ABI。

Update'2013: Android编译器(gcc,clang)Android NDK默认为unsigned char。 x86和MIPS编译器默认为signed char

2

通常有将其设置为默认选项,但没有我的知识的编译器做到这一点。

+2

有。在MSVC中使用['/ J'(默认字符类型是无符号的]](https://msdn.microsoft.com/en-us/library/0d294k5z.aspx)。在GCC中,使用['-funsigned-char'](http://stackoverflow.com/a/20518559/995714) – 2016-02-20 03:29:04

4

该标准要求标准所需的所有字符的整数值(AZ,az,0-9,基本标点符号等)为正值,所以任何使用编码的系统,其中这些字符的值不在范围为signed char必须为才有明文char为无符号。我相信这意味着所有的EBCDIC系统必须有一个没有签名的普通的char,但我可能会误解。

+4

如果CHAR_BIT大于8,则char的值范围大于-128..127或者0..255。因此,在具有CHAR_BIT == 9的EBCDIC系统上,可以对普通的'char'进行签名。 – pmg 2010-09-16 18:04:54

相关问题