C語言 #define 和 typedef 對數據類型起別名的區別


C語言 #define 和 typedef 對數據類型起別名的區別

C語言實現一個數據類型的別名時,可以採用 #define 或者 typedef 兩種方式,如下圖所示:

C語言 #define 和 typedef 對數據類型起別名的區別

其中,D_INT x 等價於 int x;T_INT y 等價於 int y。

但要注意的是,這兩者是有本質區別的,用不好就會掉進坑裡。兩者的區別在於:

  • #define 由預處理器來處理,只是簡單的字符串替換,替代完畢再編譯,且原來的字符串不再存在,不再起作用;
  • 而typedef 是在編譯階段由編譯器處理的,它並不是簡單的字符串替換,而給原有的數據類型起一個新的名字,相當於原名的別名。且原名仍存在,仍起作用。

比如下面的例子:

C語言 #define 和 typedef 對數據類型起別名的區別

在64位系統中,整型變量為4個字節,指針變量為8個字節。

對於 D_INT d1, d2; 只有d1是指向整型的指針變量,而d2是整型變量,因為 D_INT 只是做字符串的替換,相當於 int *d1, d2

而對於 T_INT t1, t2; t1和t2都是指向整型的指針變量,因為 T_INT 是一個類型說明符,相當於 int *t1, *t2

相關閱讀


分享到:


相關文章: