【问题标题】:Any compiler which takes 'char' as 'unsigned' ?任何将 'char' 视为 'unsigned' 的编译器?
【发布时间】:2011-04-13 06:50:37
【问题描述】:

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

/卡努_

【问题讨论】:

    标签: c compiler-construction char signed unsigned-char


    【解决方案1】:

    GCC 可以。但仅在为约定为 unsigned char 的平台编译时,包括 ARM linux[*]。当 GCC 为 x86 编译时,默认为 char 被签名。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果CHAR_BIT > 8,则char 的值范围大于-128..127 或0..255。因此,在 CHAR_BIT == 9 的 EBCDIC 系统上,可以对普通的 char 进行签名。
      【解决方案3】:

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

      【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多