一、起作用的時間不同
typedef在編譯階段起作用,因此有類型檢查的功能。
define在預處理階段起作用(編譯之前),只進行簡單的字符串替換而不進行類型檢查。
二、功能不同
typedef
(1)用來定義類型的別名
(2)定義機器無關的類型
(例如定義一個叫
REAL 的浮點類型,在目標機器上它可以獲得最高的精度:typedef long double REAL;
那麼在不支持 long double 的機器上,該 typedef 看起來會是下面這樣:typedef double REAL;
甚至在連 double 都不支持的機器上,該 typedef 看起來會是這樣:typedef float REAL;)
define
(1)爲類型取別名
(2)定義常量、變量、編譯開關
三、作用域不同
四、對指針的操作
<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的詳細區別》