這兩個我以前也沒有很大的關注過這之間還有什麼大的區別,不過在書上看見了還是想記錄一下,畢竟這是自己不知道.....
關於這兩者的用法如下:
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類型的。
所以這就是兩者的區別