我不是 C 或 C++ 的老手。我不知道 time_t
是如何定义和设计的。
几个帖子如:
但是这些帖子只说明了什么是
time_t
或 size_t
。它没有明确说明 time_t 或 size_t 是如何以及在哪里定义和声明的。我正在使用 WIN8 VS2012 Express C++ 。我搜索了库,发现
size_t
是在 crtdefs.h
而不是 cstddef
中定义的。size_t
、 time_t
之类的类型?我们可以让 sizeof
只返回 unsigned int
。 size_t
? size_t
或 time_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_t
和 time_t
的定义是 typedef ... size_t;
和 typedef ... time_t;
- 它们在编译器中不是“固定的”。标准只是说它们必须在那里(并且适合编译器目标的系统)。我想你会发现 cstddef
在某个地方包含 crtdefs.h
。__int64
是一种 Microsoft 编译器类型。这是由编译器本身定义的。然后可以使用它来定义其他“大小类型”,例如 time_t
或 size_t
(根据需要使用合适的 unsigned
)。其他编译器可能没有这种类型,但会有一些方法来定义 8、16、32 和 64 位整数。 __int64
的实际起源可能早于 long long
的起源,很长一段时间(双关语)微软不支持它。我相信是现在。关于c++ - size_t 和 __w64、time_t 和 __int64 是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17248647/