typedef和define都是替乙個物件取乙個別名,以此增強程式的可讀性,區別如下:
原理不同
#define是c語言中定義的語法,是預處理指令,在預處理時進行簡單而機械的字串替換,不作正確性檢查,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。
typedef是關鍵字,在編譯時處理,有型別檢查功能。它在自己的作用域內給乙個已經存在的型別乙個別名,但不能在乙個函式定義裡面使用typedef。用typedef定義陣列、指標、結構等型別會帶來很大的方便,不僅使程式書寫簡單,也使意義明確,增強可讀性。
功能不同
typedef用來定義型別的別名,起到型別易於記憶的功能。另乙個功能是定義機器無關的型別。如定義乙個real的浮點型別,在目標機器上它可以獲得最高的精度:typedef long double real, 在不支援long double的機器上,看起來是這樣的,typedef double real,在不支援double的機器上,是這樣的,typedef float real
#define不只是可以為型別取別名,還可以定義常量、變數、編譯開關等。
作用域不同
#define沒有作用域的限制,只要是之前預定義過的巨集,在以後的程式中都可以使用,而typedef有自己的作用域。
對指標的操作不同
#define intptr1 int*
typedef
int* intptr2;
intptr1 p1, p2;
intptr2 p3, p4;
//含義分別為,宣告乙個指標變數p1和乙個整型變數p2,宣告兩個指標p3、p4
#define intptr1 int*
typedef
int* intptr2;
int a =1;
int b =2;
int c =3;
const intptr1 p1 =
&a;const intptr2 p2 =
&b;intptr2 const p3 =
&c;
上述**中,
const intptr1 p1是乙個常量指標,即不可以通過p1去修改p1指向的內容,但是p1可以指向其他內容。
const intptr2 p2是乙個指標常量,不可使p2再指向其他內容。因為intptr2表示乙個指標型別,因此用const限定,表示封鎖了這個指標型別。
《c++primer》
Typedef和define的區別
typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...
typedef和 define的區別
一 typedef的用法 二 define的用法 define為一巨集定義語句,通常用它來定義常量 包括無參量與帶參量 以及用來實現那些 表面似和善 背後一長串 的巨集,它本身並不在編 譯過程中進行,而是在這之前 預處理過程 就已經完成了,但也因此難以發現潛在的錯誤及其它 維護問題,define的用...
typedef和define的區別
define char string string filename 這段 是可以工作的那麼為什麼還要多個typedef呢?請看下面 利用上面的 如果這樣寫 string file1,file2 經過替換,變成 char file1,file2 雖然在編譯上不錯但是含義卻錯了,裡面的 file1是指...