C语言中为了便于移植,定义int32_t,但是没懂这是怎么方便移植的

在stdint.h头文件中,有如下声明
typedef int int32_t;
我看网上说这样就保证在不同的系统中,int32_t都是32位的类型了。
这个,我没明白...int32_t不是int型么..那假如在一个int大小是4字节的系统中,定义了int32_t 变量a,现在把源文件应用到另一个int大小是2字节的系统上,那int32_t的类型是int,大小不就变为2字节了么,也没起到还是4字节的作用啊...那变量a在新系统里还是4字节的,但它不再是int32_t类型了吧?
求大神给指点下

因为头文件中还包含了对这段代码进行预编译,会先判断int 为多少位,如果 sizeof(int) == 2,系统会让int32_t为4位的 如:

typedef long int32_t;

你可以找找这段代码或相似代码

而我找到的和你的不同

追问

是在stdint.h头文件里么?我没找到您说的会先判断的代码..

您的意思是说,如果检测到系统的int大小是2字节的话,就会typedef long int32_t;保证在不同系统上int32_t都是4字节是吧?


另外,刚才您说的头文件中的判断代码,您能告诉我是在哪个头文件中么,谢谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-08
在int为4字节的系统
typedef int int32_t 不用变 使用int32_t则为4字节

在int为2字节的系统
typedef long int32_t 改变int为long,使用int32_t还是4字节。

总的来说,移植到2字系统只改变typedef long int32_t中的int,而不需要全部改变int32_t。本回答被网友采纳
相似回答