typedef關鍵字用來給現有資料類型建立别名。
typedef int size_t;
是以下面的兩個定義其實完全相同。
size_t size;
int size;
咦,下面這樣定義一個size_t的宏是不是也能達到一樣的效果呢?
#define size_t int
在這裡,确實define一個資料類型宏能達到同樣的目的。
但是typedef和define相比:
define隻會在預編譯階段進行簡單的替換操作;
typedef則會在編譯階段進行資料類型檢查。
是以相比于define,更推薦使用typedef來為現有資料類型建立新的類型别名。
typedef關鍵字的作用有:
1. 建立易于記憶的類型别名
typedef int size;
2. 對作業系統提供的資料類型進行封裝,提供系統無關的資料類型别名。
這樣可以寫出不依賴于作業系統的應用程式,讓應用程式在不同系統之間的移植變得更簡單了。
3. 使用typedef可以讓callback函數的原型定義變得更簡單。
如下定義了一個函數指針的原型是有兩個參數,傳回值是int類型。
typedef int (*pfunc)(int size, void* pvalue);
關于typedef和const兩個關鍵字結合使用的案例分析。
typedef char* pstr;
char str[10] = "112345";
const pstr p1 = str;
p1++;
如果代碼這樣寫,那麼在編譯階段就會報錯。
這是因為按照const的修飾規則,它修飾的是pstr這種資料類型的變量p1;
而p1是一根指針,用const修飾了就意味着這個指針不能随便亂動了,
是以編譯器才會報錯。
通過這個案例,也恰恰說明了typedef和使用define的差別:
typedef不是在預編譯階段做簡單的替換動作;
typedef定義了一個新的資料類型,對編譯器而言pstr就是一種資料類型。
推薦閱讀: