有哪些将'char'作为'unsigned'的编译器?

7
有没有一种C编译器,除非用户在文件或项目设置中明确指定,否则将char的默认类型视为无符号?
3个回答

14

GCC会这样做,但仅在编译无符号字符为惯例的平台时,例如ARM linux[*]。当GCC编译x86时,默认情况下char是带符号的。

[*] 至少过去是这样。我所知道的是linux在ARM上可能已经切换到了不同的默认ABI。

2013年更新: Android NDK的ARM编译器(gcc、clang)默认使用unsigned char。x86和MIPS编译器默认使用signed char


4

标准要求标准所需的所有字符(A-Z,a-z,0-9,基本标点符号等)的整数值为正,因此使用这些字符值超出 signed char 范围的编码的任何系统 必须 使普通的 char 无符号。我认为这意味着所有的 EBCDIC 系统都必须有一个无符号的普通 char,但我可能是错的。


4
如果CHAR_BIT> 8,则char类型的值范围大于-128..127或0..255。因此,在具有CHAR_BIT == 9的EBCDIC系统上,普通的char可以是有符号的。 - pmg

2

通常会有一个设置为默认的选项,但据我所知没有任何编译器会这样做。


2
有关于这个问题。在MSVC中,您需要使用/J (默认字符类型为unsigned)。而在GCC中,您需要使用-funsigned-char - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接