define和typedef區別

一、起作用的時間不同

typedef在編譯階段起作用,因此有類型檢查的功能。

define在預處理階段起作用(編譯之前),只進行簡單的字符串替換而不進行類型檢查。


二、功能不同

typedef

(1)用來定義類型的別名

(2)定義機器無關的類型

(例如定義一個叫 REAL 的浮點類型,在目標機器上它可以獲得最高的精度:typedef long double REAL;
那麼在不支持 long double 的機器上,該 typedef 看起來會是下面這樣:typedef double REAL;
甚至在連 double 都不支持的機器上,該 typedef 看起來會是這樣:typedef float REAL;)


define

(1)爲類型取別名

(2)定義常量、變量、編譯開關


三、作用域不同

#define沒有作用域的限制,只要是之前預定義過的宏,在以後的程序中都可以使用。
而typedef有自己的作用域。


四、對指針的操作

<span style="font-size:14px;">typedef int * pint;  
#define PINT int *  </span>
<span style="font-size:14px;">
const pint p;//p不可更改,p指向的內容可以更改,相當於 int * const p;  
const PINT p;//p可以更改,p指向的內容不能更改,相當於 const int *p;或 int const *p;  
pint s1, s2; //相當於<span style="font-family: 'Times New Roman'; line-height: 19.5px; background-color: rgb(250, 247, 239);">int *a; int *b;</span>  也就是兩者都是指針
PINT s3, s4; //相當於<span style="font-family: 'Times New Roman'; line-height: 19.5px; background-color: rgb(250, 247, 239);">int *a, b; 只有前者是指針</span></span>


更詳細的內容請看《typedef和define的詳細區別》



IT從業人員需要及時關注技術動態,但是互聯網的內容卻過於離散,好東西往往隱藏得很深。現在可以在微信公衆號裏面
搜索關注“小魚兒的IT技術分享”,訂閱我爲大家每天彙總的IT技術信息。歡迎大家關注!

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