c – size_t和__w64,time_t和__int64如何工作?

我不是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支持.我相信它现在.

点赞