是否有任何 C 编译器将默认的 char 类型视为无符号,除非用户在文件或项目设置中明确提及?
海湾合作委员会确实如此。但仅当针对以 unsigned char 为约定的平台进行编译时,包括 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
,但我可能是错的。
通常有一个选项可以将其设置为默认值,但据我所知,没有编译器这样做。