我知道两者都是不同的类型(signed char
和 char
),但是我公司的编码指南指定使用 int8_t
而不是 char
.
所以,我想知道,为什么我必须使用 int8_t
而不是 char
类型。有没有使用 int8_t
的最佳实践?
最佳答案
int8_t
的使用在某些情况下非常好 - 特别是当类型用于需要有符号 8 位值的计算时。涉及严格大小数据的计算[例如由外部要求定义为在结果中精确为 8 位](我在上面的评论中使用了像素颜色级别,但这实际上是 uint8_t
,因为负像素颜色通常不存在 - 除了也许在 YUV 类型的色彩空间中)。
int8_t
类型不应用作字符串中 char
的替代品。这可能导致编译器错误(或警告,但我们也不想处理来自编译器的警告)。例如:
int8_t *x = "Hello, World!\n";
printf(x);
可能在编译器 A 上编译得很好,但在编译器 B 上混合有符号和无符号 char 值时会给出错误或警告。或者如果 int8_t
甚至没有使用 char
类型。这就像期待
int *ptr = "Foo";
在现代编译器中编译...
换句话说,如果您使用 8 位数据进行计算,则应该使用 int8_t
而不是 char
。将所有 char
全部替换为 int8_t
是不正确的,因为它们远不能保证相同。
如果需要对字符串/文本/等使用char
,并且由于某种原因char
过于模糊(可以有符号或无符号等) , 然后使用 typedef char mychar;
或类似的东西。 (有可能找到比 mychar
更好的名字!)
编辑:我应该指出,无论你是否同意这一点,我认为简单地走到公司负责这一“原则”的任何人面前,指着关于 SO 和说“我认为你错了”。尝试了解动机是什么。它可能比看起来更多。
关于c++ - int8_t 与 char ;哪个是最好的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744226/