【问题标题】:meaning of known data types [duplicate]已知数据类型的含义
【发布时间】: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


    【解决方案1】:

    是的,t 代表类型。

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

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

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

    typedef int size_t;
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        typedefs 之间的想法是,您要准确指定该变量不是通用的int,而是对象的大小/自 UNIX 纪元以来的秒数/其他;此外,该标准对这些类型的特征做出了具体保证。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-05
          • 2022-07-07
          • 2013-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多