最近在開發中使用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文章
967瀏覽量
55487 -
typedef
+關注
關注
0文章
26瀏覽量
9676 -
float
+關注
關注
0文章
9瀏覽量
7865
發布評論請先 登錄
不同行業的數字工廠有哪些特點和差異?

C++ QT開發,IC讀寫器程序

DAC108S085設定為第一級輸出時,不同通道有差異,為什么?
SV中define宏定義的用法
LC濾波器和RC濾波器有哪些差異
不同行業的配電室有什么差異?

評論