typedef的作用

第一个作用是 画繁为简

这个很好理解,毕竟时间就是生命,能少打几个字就少打几个字。从功能方面讲typedef和linux中的alias命令有点类似。就不说了。

第二个作用是增强程序的可移植性

说实话,上学的时候就不明白这点,昨天学习单片机的时候又遇到这个坑了,看看,你上学时候不明白的地方日后一定会成为你的绊脚石。

为什么会存在移植性的问题?因为不同平台相同的数据类型占用的字节数不一样,也就意味着相同的数据类型会有不同的数据表示范围。

比如在16位平台上一个int 占用的是2个字节,而在32位平台上一个int占用的是4个字节,数据表示的范围都是完全不一样的。

如果在16位平台上我们用int定义了所有的变量,那么到了32平台上这些用int定义的变量我们都得考量一下是否合适,这个工作量就很大了,这就不叫移植了,快叫重构了。

OK,现在问题的关键是怎么保证同一个数据类型在不同平台上占用的字节数是一样的,而且表示的数据范围也是一样的。

typedef派上用场了。

在16位平台上我们重新定义一个类型

typedef int int_16;

在16位平台上今后就不用int定义变量了,全部用int_16定义变量

把这个16位平台平台移植到32位平台上再加上这句行不行呢?

typedef int int_16;

肯定不行啊,要改一改的,16位平台上的int_16占用的字节数是2个字节,表示的数据范围是32768 ~ 32767

那么在32位平台上,什么数据类型是占用2个字节,表示的数据范围也是32768 ~ 32767呢 ?是short int 啊

所以要把typedef int int_16; 改成typedef short int int_16;

这样在32位系统中所有的被移植过来的int_16变量不需要修改就能满足要求了。

如果这个16位程序要移植到64位系统中,应该怎么修改呢?

把typedef int int_16;改成typedef short int int_16;就可以了,因为64位系统中short int 占用的字节树和数据表示范围是和16位系统中的int是一样的。

总之一句话,如果程序有移植性的考虑,那么一定要用typedef定义自己的新数据类型,这个新数据类型占用几个字节,完全看你自己的考虑,然后把代码移植到新平台

只需要把typedef 新类型替换成和当前平台占用字节数相同且数据表示范围相同的数据类型就可以了。