对于程序来说,如果想要运行在不同的机器、不同的环境下,可移植性很重要。int、short、 long、long long等在不同的机器和不同的环境下的长度是不一致的,如果在程序中直接使用这些built-in类型,程序的可移植性就不行。typedef就可以解决这个问题,利用typedef定义如s8、s16、s32、u8、u16、u32等可以很清晰的反应该数据类型的长度,这样在移植到其他平台时,只需要更改typedef的定义就可以解决问题了。
typedef u32unsigned long;
在用typedef时,有一个很大的误区在于容易直接用unsigned long替换u32(这里仅仅用一个例子说明),这个是很错误的做法。如下:
typedef char*pstring;
const pstringcstr=NULL;//cstr是一个const指针指向char
const pstring*ps;//ps是一个指针指向一个指向char的const指针
如果直接替换就变成:
const char*cstr=NULL;//cstr是一个指向const char的指针
const char**ps;//
替换后的理解方式是错误的,typedef char* pstring;语句说明pstring是一个指针类型,因此const pstring的const修饰的是指针而非指针指向的对象;当用char*替换pstring后,基础类型是char而非*,const修饰的是char,因此会将cstr理解为指向const char的指针。