gpt4 book ai didi

c++ - size_t 和 __w64、time_t 和 __int64 是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:15 25 4
gpt4 key购买 nike

我不是 C 或 C++ 的老手。我不知道time_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com