- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不是 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/
我是一名优秀的程序员,十分优秀!