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