在C還是C++代碼中,typedef都使用的很多。typedef與#define有些相似,其實是不同的。
基本定義:typedef為C語言的關鍵字,作用是為一種數據類型定義一個新名字,這裡的數據類型包括基本數據類型(int,char),也包括自定義的數據類型(struct)。
(1)與#define的區別
typedef有點像#define宏,其實際類型替代同義字。不同點是typedef在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文本替換。
(2)減少錯誤
定義一種類型的別名,而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。比如:
char* pa,pb;
typedef char* pchar; pchar pa,pb;這種方式很有用,特別是char* pa,pb;的定義,初學者往往認為是定義了兩個字符型指針,其實不是,而用typedef char* pchar 就不會出現這個問題,減少了錯誤的發生。
(3)直觀簡潔
用在舊的C代碼中,配合struct使用。以前的代碼中,聲明struct新對象時,必須要帶上struct,即形式為:struct 結構體名 對象名。如:
struct tagPOINT1 { int x; int y; }; struct tagPOINT1 p1;
如果使用typedef代碼如下:
typedef struct tagPOINT { int x; int y; }POINT; POINT p1;//可以這樣; struct tagPOINT p2;//也可以這樣;或:
typedef struct { int x; int y; }POINT; POINT p1;POINT p1;這樣就比原來的方式少寫了一個struct,比較省事,尤其在大量使用的時候。
(4)平台無關性
用typedef來定義與平台無關的類型。比如可以定義一個REAL的浮點類型,在目標機器上可以獲得最高的精度。
typedef long double REAL;在不支持long double的機器上,可以修改為如下:
typedef double REAL;如果連double都不支持,修改為如下:
typedef float REAL;也就是說,當跨平台時,只要改下typedef本身就行,不用對其他源碼做任何修改。