最近在開(kāi)發(fā)中使用typedef的時(shí)候掉了一次坑,這里記錄一下同時(shí)分享給大家~
1、typedef與#define
大部分朋友在編寫(xiě)代碼的時(shí)候都會(huì)把無(wú)符號(hào)類(lèi)型、結(jié)構(gòu)體等等進(jìn)行"簡(jiǎn)化",要么用宏定義進(jìn)行文本替換,要么就通過(guò)typedef來(lái)定義一個(gè)類(lèi)型別名。
參考代碼:
似乎在一般人眼里兩種方式并沒(méi)有什么區(qū)別,有些人習(xí)慣用宏,有些人習(xí)慣用typedef,甚至一套代碼中還出現(xiàn)兩種定義,不過(guò)使用typedef來(lái)兼容不同平臺(tái)的類(lèi)型更加的專(zhuān)業(yè)。
兩者的區(qū)別其實(shí)還是很明顯的,只是大部分人在編碼的過(guò)程中沒(méi)有遇到兩者差異的情況,
那么這里就舉個(gè)例子:
參考代碼:
如果typedef與#define沒(méi)啥差異的話,那么測(cè)試代碼中的Var1與Var2使用方法應(yīng)該是一樣的,但當(dāng)我們使用var2進(jìn)行賦值則編譯不通過(guò)。
編譯結(jié)果出來(lái)你應(yīng)該就明白了,typedef把整個(gè)int*作為了一個(gè)整體,與基本類(lèi)型int,float等一樣,此時(shí)const修飾的是Var2變量,與int * const等價(jià),其指針?biāo)赶虻牡刂窡o(wú)法改變,但內(nèi)容*Var的內(nèi)容可以進(jìn)行修改。
同樣還有一個(gè)類(lèi)似且非常值得注意的地方:
參考代碼:
問(wèn)題就處在pVar4的定義上,此時(shí)pVar4僅僅只是一個(gè)int類(lèi)型而非int*類(lèi)型,這也是宏定義所帶來(lái)的弊端。
這樣大家應(yīng)該對(duì)typedef定義的整體類(lèi)型與#define定義的宏有了一個(gè)較好的理解了吧。
2、數(shù)組類(lèi)型是typdef專(zhuān)屬?
順便問(wèn)了一下同事:你覺(jué)得typedef還有與#define不同的地方嗎?他想了想,回答道 : typedef可以直接定義數(shù)組類(lèi)型,而#define不能。他的回答也對(duì),但是也不完全對(duì):
參考代碼:
因?yàn)楹甓x無(wú)法像普通定義變量那樣:"類(lèi)型變量"的形式,所以認(rèn)為同事的說(shuō)法也算對(duì),不過(guò)對(duì)于如上面代碼的宏定義來(lái)定義變量,其實(shí)也差別不大吧。
審核編輯:劉清
-
編碼
+關(guān)注
關(guān)注
6文章
933瀏覽量
54731 -
typedef
+關(guān)注
關(guān)注
0文章
26瀏覽量
9527 -
float
+關(guān)注
關(guān)注
0文章
9瀏覽量
7766
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論