C/C++ typedef用法


引言

typedef 聲明,簡稱 typedef,為現有類型創建一個新的名字。比如人們常常使用 typedef 來編寫更美觀和可讀的代碼。所謂美觀,意指 typedef 能隱藏笨拙的語法構造以及平台相關的數據類型,從而增強可移植性和以及未來的可維護性。 在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個是簡化一些比較復雜的類型聲明。

typedef的使用方法如下:

typedef existing_type new_type_name ;

注意:typedef 並不創建新的類型。它僅僅為現有類型添加一個同義字。

typedef的最簡單使用

typedef int size; typedef unsigned int WORD;

第一個聲明定義了一個char的同義詞,名字為C,你可以在任何需要int的上下文使用size。 第二個聲明定義了一個unsigned int的同義詞,名字為WORD,你可以在任何需要int的上下文使用WORD。

typedef和數組,指針

我們可以不用象下面這樣重復定義有 81 個字符元素的數組:

char line[81]; char text[81];

定義一個 typedef,每當要用到相同類型和大小的數組時,可以這樣:

typedef char Line[81]; Line text, secondline;

同樣,可以象下面這樣隱藏指針語法:

typedef char * pstr;  pstr str = "abc"; int mystrcmp(pstr, pstr);

typedef和函數

函數指針一般用於回調,例如信號處理,libcurl等會應用到回調。回調是比較常用的技術,而回調就要涉及函數指針。 當我們的程序中有以下函數:

void printHello(int i);

然后我們要定義一個函數指針,指向printHello,並且調用這個方法,代碼如下:

void (*pFunc)(int); pFunc = &printHello; (*pFunc)(110);

其中void (*pFunc)(int)是聲明一個函數指針,指向返回值是void,調用參數是(int)的函數,變量名是pFunc,pFunc就是函數指針了,以前是函數指針的簡單用法。 大家可以看到,聲明一個函數指針是比較復雜的,尤其是當你要在多處地方聲明同一個類型的函數指針變量,代碼更加復雜,所以有下面簡化的做法:

typedef void (*PrintHelloHandle)(int);

使用代碼如下:

PrintHelloHandle pFunc; pFunc = &printHello; (*pFunc)(110);

以后其他地方的程序需要聲明類似的函數指針,只需要下面代碼:

PrintHelloHandle pFuncOther;

這樣,我們的代碼就變得更加簡潔易懂。

typedef心得

大家在看typedef和數組,指針以及typedef和函數,可能會覺得typedef比較復雜,但是其實typedef 行為有點像 #define 宏,用其實際類型替代同義字。 請看看下面例子

typedef char * pstr;  pstr mystr;

代碼pstr mystr,展開之后就是char * mystr,把mystr,替換為語句typedef char * pstr的pstr,展開之后還是char * mystr。 typedef並不創建新的類型,typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文本替換而已。 這些規則可以應用到typedef和數組:

typedef char Line[81]; Line text;

把text替換為typedef char Line[81]的Line,展開之后就是

char text[81]; 

也可以應用到最復雜的typedef和指針

typedef void (*PrintHelloHandle)(int); PrintHelloHandle pFunc;

將pFunc替換typedef void (*PrintHelloHandle)(int),展開之后就是

void (*pFunc)(int);

其實就是聲明一個pFunc函數指針而已,根本沒有PrintHelloHandle這種類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM