C語言的typedef指令

2021-09-23 14:09:07 字數 1850 閱讀 1132

typedef工具是乙個高階資料特性,利用typedef可以為某一型別自定義名稱。它與#define有3個不同點:

(1)與#define不同,typedef建立的符號名只受限於型別,不能用於值。

(2)typedef由編譯器解釋,不是預處理器。

(3)在其受限範圍內,typedef比#define更靈活。

工作原理

使用typedef時要記住,typedef並沒有建立任何新型別,它只是為某個已存在的型別增加乙個方便使用的標籤。

示例:假設要用byte表示1位元組的陣列。

typedef unsigned char byte;

1隨後就可以用byte來定義變數:

byte x,y[10],*z;

1上面一行**就相當於

unsigned char x,y[10],*z;

1可見,typedef相當於給乙個已有的型別起了乙個新的名字,然後可以像使用舊型別名一樣使用新的型別名來宣告變數。這是否多此一舉呢?其實不是。

首先,合理使用typedef可以增加程式的可讀性,前面的示例中用byte代替unsigned char表明你打算用byte型別的變數表示數字,而不是字元碼。

其次,typedef可以提高程式的可移植性。我們知道sizeof運算子的返回值是size_t型別,time()函式返回的型別:time_t型別。這是乙個無符號數,但它不是乙個新型別。這就用到了c語言的typedef機制,允許程式設計師為現有型別建立別名。c頭檔案系統使用typedef把size_t作為unsigned int或unsigned long的別名。這樣,使用size_t型別時,編譯器會根據不同的系統替換標準型別。對於time_t類似,只要包含time.h標頭檔案,程式就能訪問合適的定義。

與#define的比較

typdef的一些特性與define的功能重合。例如

#define byte unsigned char

1這是預處理器用byte替換unsigned char。

但也有#define沒有的功能,例如:

typedef char * string;

1編譯器把string解釋為乙個型別的表示符,該型別指向char。因此

string name, sign;

1相當於

char * name , * sign;

1但是,如果這樣假設:

#define string char *

1然後,下面的宣告:

string name, sign;

1將被翻譯成:

char * name, sign;

1這導致name才是指標。

發揮typedef的好處

除了剛才上面提到的可讀性和可移植性的好處外,在一些場合還可以發揮typedef的更多好處。

使用typedef的第乙個原因:為經常出現的型別建立乙個方便、易識別的型別名。

例如,typedef用來命名乙個結構型別,可以省略結構的標籤:

typedef struct rect;

1那麼可以這樣使用rect型別名:

rect r1=;

rect r2;12

以上**被翻譯成

struct r1=;

struct r2;12

使用typedef的第二個原因是:typedef常用於給複雜的型別命名。例如,下面的宣告:

typedef char (* frptc()) [5];

1把frptc宣告為乙個函式型別,該函式返回乙個指標,該指標內含5個char型別元素的陣列。

使用typedef時要記住,typedef並沒有建立任何新型別,它只是為某個已存在的型別增加乙個方便使用的標籤。

通過結構、聯合和typedef,c提供了有效處理資料的工具和處理可移植資料的工具。

C語言的typedef指令

typedef工具是乙個高階資料特性,利用typedef可以為某一型別自定義名稱。它與 define有3個不同點 1 與 define不同,typedef建立的符號名只受限於型別,不能用於值。2 typedef由編譯器解釋,不是預處理器。3 在其受限範圍內,typedef比 define更靈活。使用...

C語言的typedef用法

案例1 include include include typedef int zhangsan 為int在多取乙個名字 zhangsan等價於int struct student st int main return 0 案例2 include include include typedef in...

C語言中的typedef

typedef是用於定義新的型別名,在程式設計中可以用typedef來定義新的型別名來代替已有的型別名 格式 typedef 已有型別名 新的型別名 通俗點說,就是為已有的型別取別名,例如 老鼠?又叫耗子?老鼠也是它,耗子也是他 但不能取新的型別名,也就是說不能憑空造出來乙個型別,必須是在已有的型別...