【问题标题】:Is u_char a standard?u_char 是标准吗?
【发布时间】:2009-12-17 01:32:21
【问题描述】:

只是好奇 u_char 是否是标准。我一直使用它,假设它是与 uintX_t 类型等一起定义的。但是我看到我们的一些代码库从 u_char 转换为“unsigned char”,原因是“所以用户不必自己定义 u_char”..

【问题讨论】:

  • u_char 不是官方 ANSI C 标准的一部分

标签: c


【解决方案1】:

字符串u_char没有出现在这个C标准草案中:

http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

据我所知,POSIX 也不需要。

我认为它在 BSD (sys/types.h) 和 Windows (winsock.h) 中。我不会将其中任何一个视为“标准”——它们都不是正式标准,当然也不是标准 C 的一部分,但它们都有明确的定义和记录。

【讨论】:

  • 此外,使用这些丑陋的非标准类型的问题是您必须非常小心地定义它们。有些系统已经定义了它们(这是错误的),如果您自己定义它们会导致错误,但其他系统不会,这意味着您不能使用该类型,除非您自己定义它。最安全的方法就是不要这样用垃圾,不要偷懒,当你想说的时候写出unsigned char
  • @R.. 或将<stdint.h> 用于uint8_t, ... 类型。
  • @JonathonReinhart:使用uint8_t 实际上有一个内置断言CHAR_BIT == 8,因为如果CHAR_BIT > 8 则禁止该类型存在。如果你想要一个 8 位类型,那很好,但如果你的意思是“在这个实现中占用一个存储单元的无符号整数类型,不管它是什么”,那么你应该说:unsigned char
【解决方案2】:

不,u_char 是非标准的。如果您需要使用与u_char 等效的标准类型,您可以使用uint8_t,它是C99 标准库的一部分(检查您的特定平台/编译器是否符合C99)。 stdint.h 定义了这种类型(以及许多其他特定的整数类型)。 This Wikipedia article contains more information about stdint.h.

【讨论】:

    【解决方案3】:

    它不存在于任何较旧的头文件中(某些特定区域除外,如 Kerberos 和网络头文件),也不是我所知道的任何编译器中的内置类型。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2016-01-23
      • 2013-05-04
      • 1970-01-01
      相关资源
      最近更新 更多