我一直在嵌入式编程中使用 typedef 来避免常见错误:
int8_t
- 8 位有符号整数
int16_t
- 16 位有符号整数
int32_t
- 32 位有符号整数
uint8_t
- 8 位无符号整数
uint16_t
- 16 位无符号整数
uint32_t
- 32 位无符号整数
最近的 embedded muse(第 177 期,还没有在网站上)让我认识到拥有一些特定于性能的 typedef 是很有用的。 This standard建议使用 typedef 来指示您想要具有最小大小的最快类型。
例如,可以使用 int_fast16_t
声明一个变量,但它实际上会在 32 位处理器上实现为 int32_t
,或 int64_t
在 64 位处理器上,因为这些将是这些平台上至少 16 位的最快类型。在 8 位处理器上,它将是 int16_t
位以满足最小大小要求。
从没见过这种用法,才想知道
- 您是否在任何项目中看到过这种情况,无论是嵌入式项目还是其他项目?
- 在 typedef 中避免这种优化的任何可能原因?
最佳答案
For instance, one might declare a variable using int_fast16_t, but it would actually be implemented as an int32_t on a 32 bit processor, or int64_t on a 64 bit processor as those would be the fastest types of at least 16 bits on those platforms
这就是 int 的用途,不是吗?您是否可能很快会遇到 8 位 CPU,而这还不够?
您能记住多少种独特的数据类型?
它是否提供了如此多的额外好处,以至于值得在我创建一个简单的整数变量时有效地将要考虑的类型数量加倍?
我什至很难想象它可能被持续使用的可能性。
有人要编写一个返回 int16fast_t
的函数,然后其他人会出现并将该变量存储到 int16_t
中。
这意味着在模糊的情况下,快速 变体实际上是有益的,它可能会改变您的代码的行为。它甚至可能导致编译器错误或警告。
关于c - 智能类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697618/