我不是C或C的老将.我不知道howtime_t的定义和设计.
几个帖子如:
> What is ultimately a time_t typedef to?
> What is size_t in C?
> Difference between size_t and std::size_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.
>为什么C库没有定义size_t?
>我可以说size_t不是C/C++内置类型吗?
>我永远不需要在我的程序中包含相应的头文件来使用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的起源之前,很长一段时间(双关语)不受Microsoft支持.我相信它现在.