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