【发布时间】:2016-07-24 12:59:38
【问题描述】:
如果你想使用Qt,你必须拥抱quint8、quint16等等。
如果你想使用GLib,你必须欢迎guint8、guint16等等。
在Linux 上有u32、s16 等等。
uC/OS 定义SINT32、UINT16 等等。
如果你必须使用这些东西的某种组合,你最好为麻烦做好准备。因为在您的机器上,u32 将是 typedefd 而不是 long 和 quint32 将是 typedefd 而不是 int 并且编译器会抱怨。
如果有<stdint.h>,为什么每个人都这样做?这是图书馆的某种传统吗?
【问题讨论】:
-
@Mehrdad 在微控制器编程中你可以拥有各种各样的东西。例如,在 AVR Mega 上(因此在著名的 Arduino 上)int 是 16 位的。这可能是一个令人讨厌的惊喜。在我看来,“无符号短”需要更多的打字工作。对于
byte八位字节使用 'unsigned char' 总是让我感到难过。无符号字符,真的吗? -
@Mehrdad 关键是你不能确定。这正是
stdint.h被发明的原因。 -
@glglgl:这是看待问题的另一种方式:你不是问错了问题吗?如果您的目标是多个系统,为什么一开始就任意将位数硬编码到代码中?即,为什么不直接说
sizeof(int) * CHAR_BIT(例如)并使用它?如果您的int太小而无法代表您的范围(例如数组索引),那么您几乎肯定不应该使用int,而是使用size_t之类的东西。为什么int32更有意义?唯一有意义的固定宽度是用于系统之间的通信(例如文件/网络格式)...... -
@Mehrdad 不。有时我有需要存储的值(例如来自 ADC 或其他)。我知道它们是 16 位宽的。所以最好使用
uint16_t(或者它的fast或least变体)。我的观点是:这些类型使用方便,有其存在的理由。 -
@Mehrdad:我建议——假设你努力生成高质量的代码——你应该定义自己的函数类型定义,这意味着 与我的 API 交互的方式/我的其余部分代码,并根据“技术”类型定义(如
size_t和/或uint64_t)在技术基础上定义这些。