首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >int8_t和char;哪一个是最好的?

int8_t和char;哪一个是最好的?
EN

Stack Overflow用户
提问于 2013-07-19 18:45:12
回答 4查看 47.1K关注 0票数 16

我知道这两者是不同的类型(signed charchar),但是我的公司编码指南指定使用int8_t而不是char

所以,我想知道,为什么我必须使用int8_t而不是char类型。是否有使用int8_t的最佳实践

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-19 19:36:21

在某些情况下,int8_t的使用是非常好的-特别是当该类型用于需要带符号的8位值的计算时。涉及严格大小的数据e.g. defined by external requirements to be exactly 8 bit in the result的计算。

不应将int8_t类型用作for字符串中的char的替代。这可能会导致编译器错误(或警告,但我们也不希望必须处理来自编译器的警告)。例如:

代码语言:javascript
运行
复制
int8_t *x = "Hello, World!\n";

printf(x);

这就像是期待

代码语言:javascript
运行
复制
int *ptr = "Foo";

要在现代编译器中编译...

换句话说,如果您使用8位数据进行计算,则应该使用int8_t而不是char。用int8_t批量替换所有char是不正确的,因为它们远不能保证是相同的。

如果需要对字符串/文本/等使用char,并且由于某些原因char太模糊(它可以是签名的或未签名的,等等),那么应该使用typedef char mychar;或类似的东西。(也许可以找到一个比mychar更好的名字!)

编辑:我应该指出,无论你是否同意这一点,我认为简单地走到公司负责这一“原则”的人面前,指着SO上的一篇帖子说“我认为你错了”,这是相当愚蠢的。试着理解动机是什么。这可能比表面看上去的更多。

票数 17
EN

Stack Overflow用户

发布于 2013-07-19 19:05:15

他们只是做了不同的保证:

char保证存在,至少8位宽,并且能够表示介于-127和127 (如果有符号)或0到255 (如果没有符号)之间的所有整数。

int8_t不能保证存在(是的,在某些平台上它不存在),但如果它存在,则保证它是一个没有填充位的8位二进制补码有符号整数类型;因此,它能够表示-128到127之间的所有整数,其他就不能表示了。

你应该在什么时候使用哪一个?当类型所作的保证符合您的要求时。然而,值得注意的是,标准库的很大一部分都需要char *参数,因此完全避免使用char似乎是目光短浅的,除非经过深思熟虑地决定避免使用这些库函数。

票数 14
EN

Stack Overflow用户

发布于 2013-07-19 20:20:40

int8_tonly,适用于需要8位宽的有符号整数类型的代码,如果没有这种类型,则不应编译。这样的要求比关于int8_t及其兄弟的问题数量要少得多。对大小的大多数要求是类型至少具有特定数量的比特。如果你至少需要8位,signed char就能正常工作;int_least8_t也能工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17744226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档