C/C++ typedef用法

來源:互聯網
上載者:User
引言

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這種類型。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.