我不是 C 或 C++ 的老手。我不知道 time_t 是如何定义和设计的。
几个帖子如:

  • What is ultimately a time_t typedef to?
  • What is size_t in C?
  • Difference between size_t and std::size_t

  • 但是这些帖子只说明了什么是 time_tsize_t 。它没有明确说明 time_t 或 size_t 是如何以及在哪里定义和声明的。

    我正在使用 WIN8 VS2012 Express C++ 。我搜索了库,发现 size_t 是在 crtdefs.h 而不是 cstddef 中定义的。
  • 为什么需要 size_ttime_t 之类的类型?我们可以让 sizeof 只返回 unsigned int
  • 为什么 C++ 库没有定义 size_t
  • 我可以说 size_t 是 而不是 一个 C/C++ 内置类型吗?
  • 我从来不需要在我的程序中包含相应的头文件来使用 size_ttime_t (也许它们是在 std 命名空间中定义的)。

  • 又在库中搜索,发现size_t定义为typedef _W64 unsigned int size_t_W64定义为__w64。在这里,我无法搜索更多关于 __w64 是在哪里定义或声明的。
  • 什么是 __w64 类型? C++11/C99 标准中没有说明。

  • 同样,当我搜索 time_t 时,我找到了 __int6 。但不知道 __int64 来自哪里。

    最佳答案

    __w64 是 Microsoft 特定的扩展,它“在使用/Wp64 编译时启用警告” - 如果您尝试为 64 位编译它,它用于识别“危险”的代码 - 例如分配一个 64 位值一个 32 位的。例如。:

    size_t s;
    ...
    unsigned int i;
    
    ...
    i = s;    // 32 bit can't take all 64 bit values - possible problem.
    
    size_ttime_t 的定义是 typedef ... size_t;typedef ... time_t; - 它们在编译器中不是“固定的”。标准只是说它们必须在那里(并且适合编译器目标的系统)。我想你会发现 cstddef 在某个地方包含 crtdefs.h

    __int64 是一种 Microsoft 编译器类型。这是由编译器本身定义的。然后可以使用它来定义其他“大小类型”,例如 time_tsize_t(根据需要使用合适的 unsigned)。其他编译器可能没有这种类型,但会有一些方法来定义 8、16、32 和 64 位整数。 __int64 的实际起源可能早于 long long 的起源,很长一段时间(双关语)微软不支持它。我相信是现在。

    关于c++ - size_t 和 __w64、time_t 和 __int64 是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17248647/

    10-11 18:44