官术网_书友最值得收藏!

建議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則是為一個類型引入一個新的別名。

主站蜘蛛池模板: 淮滨县| 涿州市| 伊宁县| 岐山县| 九台市| 大理市| 桓台县| 综艺| 上犹县| 许昌市| 永德县| 松江区| 秀山| 镇雄县| 景宁| 栖霞市| 瓮安县| 合作市| 那曲县| 吉木萨尔县| 荥阳市| 乐安县| 忻城县| 余姚市| 台安县| 乌海市| 碌曲县| 松桃| 西平县| 阜平县| 崇左市| 岱山县| 东至县| 酉阳| 柳江县| 安吉县| 城固县| 阳城县| 剑川县| 凌海市| 会理县|