已知数据类型的含义

时间:2012-03-24 15:39:52

标签: c++ c linux-kernel

  

可能重复:
  What does a type followed by _t (underscore-t) represent?

有谁知道time_t中的't',uint8_t等代表什么,是“类型”吗? 第二,为什么声明这种新类型,例如size_t,它不能只是一个int?

3 个答案:

答案 0 :(得分:10)

是的,t代表Type。

定义新类型的原因是它们将来可能会发生变化。由于64位计算机已经成为常态,因此实现可以将size_t的位宽更改为64位而不是仅仅32位。这是一种面向未来的程序。一些小型嵌入式处理器只能很好地处理16位数。他们的size_t可能只有16位宽。

一个特别重要的可能是ptrdiff_t,它表示两个指针之间的差异。如果指针大小在未来的某个时间发生变化(例如64或128位),那么您的程序就不应该关心。

typedef的另一个原因是风格。而那些size_t可能只是由

定义
typedef int size_t;

使用名称size_t清楚地表明变量意味着某事物的大小(容器,内存区域等)。

答案 1 :(得分:1)

我认为,它代表type - 一种类型,可能是某种其他类型的typedef。因此,当我们看到int时,我们可以假设它不是任何类型的typedef,但是当我们看到uint32_t时,它很可能是某种类型的typedef。这不是一个规则,但我的观察,虽然有一个例外:wchar_t不是任何其他类型的typedef,但它有_t

答案 2 :(得分:1)

是的,它可能代表typetypedef,或类似的东西。

这些typedef之间的想法是你确切地指定该变量不是通用的int,但它是一个对象的大小/自UNIX纪元以来的秒数/随你;此外,该标准对这些类型的特征做出了具体的保证。

例如,size_t保证包含您可以在C中创建的最大对象的大小 - 并且可以执行此操作的类型可以根据平台而更改(在Win32上unsigned long即可,在Win64上你需要unsigned long long,而在一些内存非常小的微控制器上unsigned short可能就足够了。

对于各种[u]intNN_t,它们是固定大小的整数类型:而对于“普通”int / short / long / ...标准不要求特定的大小,通常你需要一种类型,无论你在哪里编译程序,都要保证具有特定的大小(例如,如果你正在阅读二进制文件);那些typedef是这种必要性的解决方案。 (顺便说一句,当你只需要一个最小保证范围时,还有typedef s表示“至少某个大小的最快整数”。)