typedef和#define的用(yong)法與區(qu)別
時間:2019-05-23 來源(yuan):華清(qing)遠見
一、typedef的用法
在(zai)C/C++語言(yan)中,typedef常用(yong)來定義(yi)一(yi)個(ge)標識符及(ji)關鍵字的(de)別名(ming),它是語言(yan)編(bian)譯過程的(de)一(yi)部(bu)分,但它并(bing)不實際分配內(nei)存(cun)空間,實例像:typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
typedef可以增強程序(xu)的可讀性,以及標識符(fu)的靈活性。
二、#define的用法
#define為一宏定義語句(ju),通常(chang)用它來定義常(chang)量(包(bao)括(kuo)無參量與帶參量),以及(ji)用來實現那些(xie)“表(biao)面似和善、背后一長串”的宏,它本身(shen)并不在編(bian)譯過(guo)程(cheng)中(zhong)進(jin)行,而(er)是(shi)在這之(zhi)前(預處理(li)過(guo)程(cheng))就已經(jing)完成了,它的實例(li)像:#define INT int
#define TRUE 1
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++)
三、typedef與#define的區別
(1)#define是C語言中(zhong)定義的語法(fa),是預處理指(zhi)令,在預處理時(shi)進行簡單而(er)機械的字(zi)符串(chuan)替(ti)換,不(bu)作正確(que)性檢查,只有在編譯已被展開的源程序時(shi)才會發(fa)現可能的錯誤并報(bao)錯。
typedef是關鍵字,在(zai)(zai)編(bian)譯時處理,有(you)類(lei)型(xing)檢查功(gong)能。它在(zai)(zai)自(zi)己的(de)作用域內(nei)給一(yi)個已經存在(zai)(zai)的(de)類(lei)型(xing)一(yi)個別名,但不(bu)能在(zai)(zai)一(yi)個函(han)數(shu)定(ding)義(yi)里面使(shi)(shi)用typedef。用typedef定(ding)義(yi)數(shu)組(zu)、指針、結構體等類(lei)型(xing)會(hui)帶來(lai)很大(da)的(de)方便,不(bu)僅使(shi)(shi)程序(xu)書寫簡單,也(ye)使(shi)(shi)意(yi)義(yi)明(ming)確,增強(qiang)可(ke)讀性。
(2)typedef用來(lai)定(ding)義類型(xing)的(de)(de)(de)(de)別(bie)名(ming)(ming),起到類型(xing)易于記憶的(de)(de)(de)(de)功能。另一(yi)個(ge)功能是(shi)定(ding)義機器(qi)(qi)無關的(de)(de)(de)(de)類型(xing)。如定(ding)義一(yi)個(ge)REAL的(de)(de)(de)(de)浮點類型(xing),在目(mu)標機器(qi)(qi)上它可(ke)以獲得(de)最高的(de)(de)(de)(de)精度(du):typedef long double REAL, 在不(bu)支持long double的(de)(de)(de)(de)機器(qi)(qi)上,看(kan)起來(lai)是(shi)這樣的(de)(de)(de)(de),typedef double REAL,在不(bu)支持double的(de)(de)(de)(de)機器(qi)(qi)上,是(shi)這樣的(de)(de)(de)(de),typedef float REAL#define不(bu)只(zhi)是(shi)可(ke)以為類型(xing)取別(bie)名(ming)(ming),還可(ke)以定(ding)義常量(liang)、變量(liang)、編譯開關等。
(3)#define沒有作(zuo)用域的(de)(de)限制,只要是之前預定義過(guo)的(de)(de)宏,在(zai)以(yi)后(hou)的(de)(de)程序中(zhong)都(dou)可以(yi)使用,而typedef有自己的(de)(de)作(zuo)用域。
(4)
#define INTPTR1 int*
typedef int* INTPTR2;
INTPTR1 p1, p2;
INTPTR2 p3, p4;
含(han)義分別為,聲(sheng)明一個(ge)指(zhi)針變量p1和一個(ge)整型變量p2聲(sheng)明兩個(ge)指(zhi)針變量p3、p4。
#define INTPTR1 int*;
typedef int* INTPTR2;
int a = 1;
int b = 2;
int c = 3;
const INTPTR1 p1 = &a;
const INTPTR2 p2 = &b;
INTPTR2 const p3 = &c;
上述代碼中,const INTPTR1 p1是一個常量指(zhi)針,即不可以(yi)通過(guo)p1去修改p1指(zhi)向的(de)內容,但是p1可以(yi)指(zhi)向其他內容。
const INTPTR2 p2是一(yi)個(ge)指(zhi)針(zhen)常量,不可使p2再指(zhi)向(xiang)其他內容。因為INTPTR2表示(shi)一(yi)個(ge)指(zhi)針(zhen)類型(xing)(xing),因此用const限定(ding),表示(shi)封鎖了這(zhe)個(ge)指(zhi)針(zhen)類型(xing)(xing)。
INTPTR2 const p3是(shi)一個指針(zhen)常量(liang)。

