u_char是标准吗?

Jas*_*son 20 c

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

Ste*_*sop 13

该字符串u_char未出现在C标准的草案中:

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

据我所知,POSIX也不要求它.

我认为它在BSD(sys/types.h)和Windows(winsock.h)中.我不认为任何一个是"标准" - 它们不是正式标准,它们当然不是标准C的一部分,但它们是明确定义和记录的.

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

Eme*_*gul 5

不,u_char是非标准的.如果您需要使用相当于的标准类型u_char,您可以使用uint8_t它是C99标准库的一部分(检查您的特定平台/编译器是否符合C99). stdint.h定义此类型(以及许多其他特定的整数类型). 这篇维基百科文章包含有关的更多信息stdint.h.


wal*_*lyk 4

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