typedef是一个一直被忽略的关键字,它的作用就是给已知数据类型命别名,经常看到,但自己的代码中用的很少。今天看《嵌入式操作系统uC/OS-II》的时候看到了一段关于typedef应用总结,讲得很有道理,记录下来。以下内容有参考《嵌入式操作系统uC/OS-II》p43~p45
1、简化复杂数据类型名称。
typedef的典型应用就可以用一个较为简短的别名去表示一个复杂数据类型。例如简化函数指针类型。
void(*)(int ,int );//函数指针
typedef void (*PFON)(int,int);//简化数据类型
PFON function;//定义一个void(*)(int,int)数据类型的变量
当程序中需要定义较多的这种类型的指针变量时,typedef的优势就发挥出来了,如果觉得还只是可有可无,可以再看一个复杂点的。
void(*b[10])(void (*)(int,int));
typedef void (*pFunParam)(int,int);
typedef void (*pFun)(pFunPram);
pFun b[10];
2、用typedef来定义与平台无关的数据类型
typedef在单片机的代码中最常见,我以为是C编程方式的原因,现在才明白,它们有一部分原因是因为程序跨平台的需要。例如同一个数据类型,在A平台叫long doube,在B平台叫doube类型,程序现在要从A平台移植到B平台,于是可以通过typedef实现最少的修改。
typedef double REAL//在A平台下运行,以后用到double的地方都用REAL代替
移植到B平台只需要修改typedef为
typedef long double REAL //在B平台下运行,以后用到long double的地方都用REAL代替
这样只要修改一个宏就是解决的问题工作量就小很多了。
3、增强代码的可读性
记得学校刚毕业的第一份工作中要抓TCP数据包,那时候用到了一些系统API。当时遇到了很多不知道的数据类型,当时就傻了,这下完了,这么多没见过的数据类型,要怎么下手。后来跟进去看到都是些typedef,只是为了增强代码的可读性。
typedef int AGE
typedef int SIZE
typedef int WORD
...
4、避免错误
定义指针 变量时要使用符号“*”,但这个符号容易产生误解,如
int* pa,pb
本想定义两个指针,结果没注意漏掉了一个符号“*”。为了避免上述问题,可以使用typedef
typedef int* PINT
PINT pa,pb