typedef 在表現(xiàn)上有時候類似于 #define,但它和宏替換之間存在一個關(guān)鍵性的區(qū)別。正確思考這個問題的方法就是把 typedef 看成一種徹底的“封裝”類型,聲明之后不能再往里面增加別的東西。
1.??可以使用其他類型說明符對宏類型名進(jìn)行擴(kuò)展,但對 typedef 所定義的類型名卻不能這樣做。如下所示:
#define?INTERGE?int unsigned?INTERGE?n;??//沒問題 typedef?int?INTERGE; unsigned?INTERGE?n;??//錯誤,不能在?INTERGE?前面添加?unsigned
2.?在連續(xù)定義幾個變量的時候,typedef 能夠保證定義的所有變量均為同一類型,而 #define 則無法保證。例如:
#define?PTR_INT?int?* PTR_INT?p1,?p2;
經(jīng)過宏替換以后,第二行變?yōu)椋?/p>
int?*p1,?p2;
這使得 p1、p2 成為不同的類型:p1 是指向 int 類型的指針,p2 是 int 類型。
相反,在下面的代碼中:
typedef?int?*?PTR_INT PTR_INT?p1,?p2;
p1、p2?類型相同,它們都是指向?int?類型的指針。