在c還是c++**中,typedef都使用的很多。typedef與#define有些相似,其實是不同的。
基本定義:typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字,這裡的資料型別包括基本資料型別(int,char),也包括自定義的資料型別(struct)。教科書上的解釋為:資料結構的表示(儲存結構)用型別定義(typedef)描述。資料元素型別約定為elemtype,由使用者在使用該資料型別時自行定義。
(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 ;
struct tagpoint1 p1;
如果使用typedef**如下:
typedef struct tagpoint point;
point p1;//可以這樣;
struct tagpoint p2;//也可以這樣;
或:
typedef struct point;
point p1;
point p1;這樣就比原來的方式少寫了乙個struct,比較省事,尤其在大量使用的時候。
(4)平台無關性
用typedef來定義與平台無關的型別。比如可以定義乙個real的浮點型別,在目標機器上可以獲得最高的精度。
typedef long double real;
在不支援long double的機器上,可以修改為如下:
typedef double real;
如果連double都不支援,修改為如下:
typedef float real;
也就是說,當跨平台時,只要改下typedef本身就行,不用對其他原始碼做任何修改。
本文參考: 。
C語言typedef詳解
c語言允許使用者使用 typedef 關鍵字來定義自己習慣的資料型別名稱,來替代系統預設的基本型別名稱 陣列型別名稱 指標型別名稱與使用者自定義的結構型名稱 共用型名稱 列舉型名稱等。一旦使用者在程式中定義了自己的資料型別名稱,就可以在該程式中用自己的資料型別名稱來定義變數的型別 陣列的型別 指標變...
C語言typedef詳解
在c還是c 中,typedef都使用的很多。typedef與 define有些相似,其實是不同的。基本定義 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字,這裡的資料型別包括基本資料型別 int,char 也包括自定義的資料型別 struct 1 與 define的區別 type...
C語言之typedef詳解
typedef可以看作type define的縮寫,顧名思義就是型別定義,也就是說它只是給已有的型別重新定義了乙個方便使用的別名,並沒有產生新的資料型別。typedef的使用與巨集定義define有些許的相似,但兩者又有以下不同 1.與 define不同,typedef給出的符號名稱僅限於對型別,而...