typedef 與 define 區別

這兩個我以前也沒有很大的關注過這之間還有什麼大的區別,不過在書上看見了還是想記錄一下,畢竟這是自己不知道.....

關於這兩者的用法如下:

typedef int* int_ptr 

#define int_ptr int*

看上去好像很相似,如果書上不講的話我還真以爲是一樣的,最多也就說宏是不能檢查錯誤的,而typedef是可以的。

或者說宏更加的強大點,但是好像不是這樣的區別。

他們有兩個關鍵的區別

1.typedef是一種徹底的"封裝"類型----聲明它以後就不能再往裏面增加別的東西。(我的理解是typedef是一個完整的,獨立的,不能與其他的類型說明符同時使用)

typedef int peach;
unsigned peach a;  //非法的

#define peach int
unsigned peach a; //合法的

因爲宏可以說就是一種很簡單的字符替換的功能


2.在連續定義幾個變量的時候,typedef可以保證所有的變量都是同一個類型,但是#define則不一定保持

#define ch_ptr char*

int main()
{
     ch_ptr a,b;
     printf("b = %d\n",sizeof(b));
}

如果你去試試這個code的話,則會發現它的大小是1

主要編譯器經過預處理以後就會變成char *a,b

其實這個時候b是char類型的。


所以這就是兩者的區別

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