【发布时间】:2012-04-08 19:50:31
【问题描述】:
可能重复:
What does a type followed by _t (underscore-t) represent?
有谁知道time_t、uint8_t等中的't'代表什么,是“类型”吗? 第二,为什么要声明这种新类型,比如size_t,不就是一个int吗?
【问题讨论】:
标签: c++ c linux-kernel
可能重复:
What does a type followed by _t (underscore-t) represent?
有谁知道time_t、uint8_t等中的't'代表什么,是“类型”吗? 第二,为什么要声明这种新类型,比如size_t,不就是一个int吗?
【问题讨论】:
标签: c++ c linux-kernel
是的,t 代表类型。
定义新类型的原因是它们可以在未来发生变化。由于 64 位机器已成为常态,因此实现可以将 size_t 的位宽更改为 64 位,而不仅仅是 32 位。这是一种面向未来的程序。一些小型嵌入式处理器只能很好地处理 16 位数字。他们的size_t 可能只有 16 位宽。
一个特别重要的可能是ptrdiff_t,它表示两个指针之间的差异。如果将来某个时间指针大小发生变化(比如 64 位或 128 位),您的程序应该不会在意。
typedef 的另一个原因是风格。虽然那些 size_t 可能只是由
typedef int size_t;
使用名称 size_t 清楚地表明该变量意味着某物的大小(容器、内存区域等)。
【讨论】:
我认为,它代表类型——一种可能是其他类型的 typedef 的类型。所以当我们看到int时,我们可以假设它不是任何类型的typedef,但是当我们看到uint32_t时,它很可能是某种类型的typedef。这不是规则,而是我的观察,尽管有一个例外:wchar_t 不是任何其他类型的 typedef,但它有 _t。
【讨论】:
是的,它可能代表type 或typedef,或类似的东西。
typedefs 之间的想法是,您要准确指定该变量不是通用的int,而是对象的大小/自 UNIX 纪元以来的秒数/其他;此外,该标准对这些类型的特征做出了具体保证。
例如,size_t 保证包含您可以在 C 中创建的最大对象的大小 - 并且可以执行此操作的类型可以根据平台而改变(在 Win32 上 unsigned long 可以,在 Win64 上你需要unsigned long long,而在一些内存非常小的微控制器上unsigned short 可能就足够了。
至于各种[u]intNN_t,它们是固定大小的整数类型:而对于“普通”int/short/long/...标准并没有规定特定的大小,通常你'无论你在哪里编译你的程序,都需要一种类型,保证具有特定的大小(例如,如果你正在读取二进制文件);那些typedefs 是这种必要性的解决方案。 (顺便说一句,当您只需要最小保证范围时,还有typedefs 表示“至少某种大小的最快整数”。)
【讨论】: