有没有一种C编译器,除非用户在文件或项目设置中明确指定,否则将char的默认类型视为无符号?
GCC会这样做,但仅在编译无符号字符为惯例的平台时,例如ARM linux[*]。当GCC编译x86时,默认情况下char是带符号的。
[*] 至少过去是这样。我所知道的是linux在ARM上可能已经切换到了不同的默认ABI。
2013年更新: Android NDK的ARM编译器(gcc、clang)默认使用unsigned char
。x86和MIPS编译器默认使用signed char
。
标准要求标准所需的所有字符(A-Z,a-z,0-9,基本标点符号等)的整数值为正,因此使用这些字符值超出 signed char
范围的编码的任何系统 必须 使普通的 char
无符号。我认为这意味着所有的 EBCDIC 系统都必须有一个无符号的普通 char
,但我可能是错的。
通常会有一个设置为默认的选项,但据我所知没有任何编译器会这样做。
CHAR_BIT
> 8,则char
类型的值范围大于-128..127或0..255。因此,在具有CHAR_BIT == 9的EBCDIC系统上,普通的char
可以是有符号的。 - pmg