typedef 與#define 的區別


typede f和宏文本替換之間存在一個關鍵性的區別。正確思考這個問題的方法就是把typedef 看成是一種徹底“封裝”類型——在聲明它之後不能再往裏面增加別的東西。它和宏的區別體現在兩個方面。


區別一:


首先,可以用其它類型說明符對宏類型名進行擴展,但對 typedef 所定義的類型名卻不能這樣做。如下所示:


區別二:


其次, 在連續幾個變量的聲明中,用 typedef 定義的類型能夠保證聲明中所有的變量均爲同一種類型,而用#define定義的類型則無法保證。如下所示:

經過宏擴展,第二行變爲:

這使得 chalk 和 cheese 成爲不同的類型,就好像是辣椒醬和細香蔥的區別;chalk 是一個指向 int 的指針, 而cheese 則是一個 int。相反,下面的代碼中:

Bentley 和 Rolls_Royce的類型依然相同。雖然前面的類型名變了,但它們的類型相同,都是指向 char 的指針。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章