我正在开发一个使用字节数组的小型网络应用程序。传统上,这些将用类似的东西声明char buf[] = ...
。
这似乎是在大多数教程中(仍然?)完成的方式,但它的问题是它可能会掩盖实际发生的事情,例如,当您尝试打印这样的数组并忘记并非每个 char 都是可见字符时.
有人建议您应该chars
完全停止使用,而改用现代uint8_t
. 我觉得这很有吸引力,主要是基于显式优于隐式的原则。
那么,将这些类型的数组声明为 有什么问题uint8_t buf[] = ...
吗?
从 C99 中引入stdint.h
header 开始,没有充分的理由继续使用char
type 来表示小数。
除了更好地记录您的意图之外,uint8_t
它还为您提供了一个更重要的优势:它保证该字节将被视为无符号。当您使用时,char
您不能假设它是有符号的还是无符号的,因为这种行为是实现定义的。
就缓冲区的无意打印而言, usinguint8_t
并不能保证任何保护,因为在许多平台上它只是一个typedef
for unsigned char
。