书上说size_t是unsigned int类型. 然后又说和机器无关.推荐使用size_t.
我有点困惑,unsigned int是和机器有关的,我们大部分X86CPU int都是32位.
size_t和机器无关,然后它有是#define unsigned int size_t
这里不是矛盾吗?有人知道size_t到底为什么会和机器无关?
问题补充:
我非常不适应使用size_t.因为编译器会经常从UINT到SIZE_T给出警告.我觉得既然大家都是32位机器.使用size_t或者SIZE_T,还不如使用UINT方便.
---------------------------
MSDN的描述
size_t unsigned integer 。Result of sizeof operator.
而对于sizeof,MSDN的描述是:
The result of the sizeof operator is of type size_t, an integral type defined in the include file STDDEF.H. This operator allows you to avoid specifying machine-dependent data sizes in your programs.
你再看STDDEF.H里的定义:
#ifndef _SIZE_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif
所以,设计 size_t 就是为了适应多个 平台的 ,size_t是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。
------------------------------------
编译器会经常从UINT到SIZE_T给出警告
------------------------------------
这个是对的,因为有时就是unsigned int;有时就是unsigned long; 你用UINT可能在当前平台下没有问题,但是换了平台就有问题。