c++使用大小明确部类疑问

c++使用大小明确类型疑问
书上说很对类型大小会随着平台、编译器不同而不同。
跨平台编程,必须要明确类型大小。

如源码:
typedef _Longlong int64_t;
typedef _ULonglong uint64_t;
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;


问题:
1、比如int,在32位和64位系统。一个是4字节一个是8字节。int32_t那么在不同平台能代表的无符号整形就完全不一样了,那么明确大小有何意义?
它为何不用#ifdef #else #endif判断下编译环境或操作系统,再来typedef?

2、我在32位的操作系统使用vs来对代码进行编程,发现sizeof(int)是8个字节,发现头文件有一句typdef int long;
我不明白,编译器这么玩有意思?明明默认是32位程序,却按照64位标准,的理由是?
------解决思路----------------------
如1楼所述,完善的定义会放在条件宏里面
如果是32位机器,起作用的就是
typedef int int32_t;
如果是64位机器,起作用的可能就是
typedef short int32_t;
typedef int int64_t;


------解决思路----------------------
1.的确是这样的,需要测定平台环境。你没有注意到typedef所在的条件编译块吧?都会有的,否则是没有可移植性的或者只是定义一套自己的类型名称。MS就喜欢这么干!

2.C标准没有硬性规定这些基本类型必须是多大,但是有个要求是“至少”有多大或比谁大。这就和偏移器靠上了,换言之,编译器对此有解释权了!

VS之所以这么做,我觉得现在体系结构逐渐向64位靠拢,MS觉得有必要提高数据宽度了,个人观点。