C:将字节数组声明为 uint8_t 有问题吗?

gmo*_*lau 5 c arrays char stdint uint8t

我正在开发一个使用字节数组的小型网络应用程序。传统上,这些将用类似的东西来声明char buf[] = ...

这似乎是大多数教程中(仍然?)完成的方式,但它存在一个问题,即它可能会掩盖实际发生的情况,例如,当您尝试打印这样的数组并忘记并非每个字符都是可见字符时。

有些人建议您应该chars完全停止使用,而使用现代的uint8_t. 我发现这非常有吸引力,主要是基于显式优于隐式的原则。

那么,将这些类型的数组声明为 是否有问题uint8_t buf[] = ...

das*_*ght 5

从 C99 中引入stdint.hheader 开始,就没有充分的理由继续使用chartype 来表示小数字。

除了更好地记录您的意图之外,还uint8_t为您提供了一个更重要的优势:它保证字节将被视为无符号。当您使用时,char您无法假设它是有符号的还是无符号的,因为此行为是实现定义的。

就缓冲区的无意打印而言,使用uint8_t并不能保证任何保护,因为在许多平台上它只是一个typedeffor unsigned char