最近在開發中使用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文章
1039瀏覽量
56967 -
typedef
+關注
關注
0文章
26瀏覽量
9877 -
float
+關注
關注
0文章
9瀏覽量
8006
發布評論請先 登錄
Typedef在C語言中的應用
typedef結構體使用
#define預編譯的指令
是德科技PathWave和納米軟件ATECLOUD有哪些差異?
不同類型的電能質量在線監測裝置數據驗證頻率有何差異
屏蔽雙絞線有哪些種類?存在哪些差異
有鉛VS無鉛:PCBA加工工藝的6大核心差異,工程師必看
自動化測試平臺中TestCenter和ATECLOUD有哪些差異?
有鐵芯VS無鐵芯:直線電機模組核心差異全解析
ArkUI-X平臺差異化
配置文件的差異介紹
鹵素檢測:PCB有鹵與無鹵的差異
不同規格的多點位移計技術參數有何差異?如何選型?
不同行業的數字工廠有哪些特點和差異?
typedef與#define有什么差異嗎
評論