最近看Scintillia的源代碼,總看到typedef的身影,朋友也說autodesk的面試官曾說過不懂typedef很差勁。于是查了網(wǎng)上的資料,看了幾種比較
容易出錯的常用用法,做了一些整理。
一.起別名的兩種用法
1. typedef (int *) pInt;

2. typedef pInt (int *)

比如pInt a,b;
第一種表示: int*a;int*b;
第二種表示: int*a,b;
所以第一種更像一個類型,第二種更像宏。
二.舊式代碼中聲明對象
typedef struct tagPoint



{

Int x;

Int y;

}POINT;

POINT a,b;

三.代碼簡化
為復(fù)雜的聲明定義一個新的簡單的別名
方法:在原來的聲明里逐步用別名替換一部分復(fù)雜聲明,如此循環(huán),把帶變量名的部分留到最后替換,得到的就是原聲明的最簡化版
typedef int (*PF) (const char *, const char *);
這個聲明引入了 PF 類型作為函數(shù)指針的同義字,該函數(shù)有兩個 const char * 類型的參數(shù)以及一個 int 類型的返回值。
如果要使用下列形式的函數(shù)聲明,那么上述這個 typedef 是不可或缺的:
PF Register(PF pf);
Register() 的參數(shù)是一個 PF 類型的回調(diào)函數(shù),返回某個函數(shù)的地址,其署名與先前注冊的名字相同。如果不用 typedef,那么代碼是這樣的:
int (*Register (int (*pf)(const char *, const char *)))(const char *, const char *);