6

除非用户在文件或项目设置中明确提及,否则是否有任何 C 编译器将默认类型的 char 视为无符号?

/卡努_

4

3 回答 3

13

海湾合作委员会会。但仅在为约定为 unsigned char 的平台编译时,包括 ARM linux[*]。当 GCC 为 x86 编译时,默认为要签名的 char。

[*] 或者至少在过去是这样。据我所知,从那以后,linux 已经在 ARM 上切换到了不同的默认 ABI。

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

于 2010-09-16T15:28:52.247 回答
4

该标准要求标准要求的所有字符(AZ、az、0-9、基本标点符号等)的整数值为正数,因此任何使用这些字符值超出范围的编码的系统都signed char 必须具有明明char是无符号的。我相信这意味着所有 EBCDIC 系统都必须有一个char未签名的明文,但我可能弄错了。

于 2010-09-16T17:55:17.250 回答
2

通常有一个选项可以将其设置为默认值,但据我所知,没有编译器可以做到这一点。

于 2010-09-16T15:16:19.707 回答