5

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

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

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

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

4

1 回答 1

3

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

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

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

于 2017-12-13T16:27:38.040 回答