【发布时间】:2009-12-17 01:32:21
【问题描述】:
只是好奇 u_char 是否是标准。我一直使用它,假设它是与 uintX_t 类型等一起定义的。但是我看到我们的一些代码库从 u_char 转换为“unsigned char”,原因是“所以用户不必自己定义 u_char”..
【问题讨论】:
-
u_char 不是官方 ANSI C 标准的一部分
标签: c
只是好奇 u_char 是否是标准。我一直使用它,假设它是与 uintX_t 类型等一起定义的。但是我看到我们的一些代码库从 u_char 转换为“unsigned char”,原因是“所以用户不必自己定义 u_char”..
【问题讨论】:
标签: c
字符串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。
<stdint.h> 用于uint8_t, ... 类型。
uint8_t 实际上有一个内置断言CHAR_BIT == 8,因为如果CHAR_BIT > 8 则禁止该类型存在。如果你想要一个 8 位类型,那很好,但如果你的意思是“在这个实现中占用一个存储单元的无符号整数类型,不管它是什么”,那么你应该说:unsigned char。
不,u_char 是非标准的。如果您需要使用与u_char 等效的标准类型,您可以使用uint8_t,它是C99 标准库的一部分(检查您的特定平台/编译器是否符合C99)。 stdint.h 定义了这种类型(以及许多其他特定的整数类型)。 This Wikipedia article contains more information about stdint.h.
【讨论】:
它不存在于任何较旧的头文件中(某些特定区域除外,如 Kerberos 和网络头文件),也不是我所知道的任何编译器中的内置类型。
【讨论】: