在C中使用uint8_t优于unsigned char的优势是什么?
我知道在几乎每个系统uint8_t只是一个类型定义的unsigned char, 那么为什么要用它呢?
在C中使用uint8_t优于unsigned char的优势是什么?
我知道在几乎每个系统uint8_t只是一个类型定义的unsigned char, 那么为什么要用它呢?
当前回答
这一点非常重要,例如当你在编写网络分析器时。 数据包头是由协议规范定义的,而不是由特定平台的C编译器的工作方式定义的。
其他回答
有小。从可移植性的角度来看,char不能小于8位,也不能小于char,所以如果给定的C实现有一个无符号8位整数类型,它将是char。或者,它可能根本没有类型定义,在这种情况下,任何类型定义技巧都是没有意义的。
它可以用来更好地记录您的代码,在某种意义上,很明显您需要8位字节,而不需要其他任何字节。但在实践中,几乎在任何地方这都是一个合理的期望(在DSP平台上,这是不正确的,但您的代码在那里运行的机会很小,并且您也可以在这样的平台上在程序顶部使用静态断言出错)。
在几乎每个系统上,我都遇到了uint8_t == unsigned char,但这不是由C标准保证的。如果你试图编写可移植的代码,它的确切大小是什么内存,使用uint8_t。否则使用unsigned char。
这一点非常重要,例如当你在编写网络分析器时。 数据包头是由协议规范定义的,而不是由特定平台的C编译器的工作方式定义的。
它记录了你的意图——你将存储小数字,而不是一个字符。
此外,它看起来更好,如果你使用其他类型,如uint16_t或int32_t。
就像你说的,“几乎每个系统”。
Char可能是一个不太可能改变的,但一旦你开始使用uint16_t和朋友,使用uint8_t混合更好,甚至可能成为编码标准的一部分。