- 編寫高質量代碼:改善C程序代碼的125個建議
- 馬偉 著
- 394字
- 2019-01-01 01:33:13
建議6-3:typedef不同于#define
前面已經特別強調過,typedef是用來定義一種類型的新別名的,它不同于宏(#define),不是簡單的字符串替換。它的新名字具有一定的封裝性,所以新命名的標識符具有更易定義變量的功能,它是語言編譯過程的一部分,但它并不實際分配內存空間。
而#define只是簡單的字符串替換(原地擴展),它本身并不在編譯過程中進行,而是在這之前(預處理過程)就已經完成了。因此,它不會做正確性檢查,不管含義是否正確它照樣會帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。
接下來看下面的示例代碼:
typedef char * PCHAR1; #define PCHAR2 char *…… /* c1、c2 都為char *,typedef為char *引入了一個新的別名*/ PCHAR1 c1, c2; /*相當于char * c3, c4;c3是char *,而c4是char */ PCHAR2 c3, c4;
在定義上述的變量時,c1、c2與c3按照預期都被定義成char*類型。值得注意的是,c4卻被定義成char類型,而不是我們所預期的char*。其根本原因就在于#define只是簡單的字符串替換,而typedef則是為一個類型引入一個新的別名。