typedef
和define
都是替乙個物件取乙個別名,以此增強程式的可讀性,區別如下:
(1)原理不同
#define
是c
語言中定義的語法,是預處理指令,在預處理時進行簡單而機械的字串替換,不作正確性檢查,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。
typedef
是關鍵字,在編譯時處理,有型別檢查功能。它在自己的作用域內給乙個已經存在的型別乙個別名,但不能在乙個函式定義裡面使用typedef
。用typedef
定義陣列、指標、結構等型別會帶來很大的方便,不僅使程式書寫簡單,也使意義明確,增強可讀性。
(2)功能不同
typedef
用來定義型別的別名,起到型別易於記憶的功能。另乙個功能是定義機器無關的型別。如定義乙個real的浮點型別,在目標機器上它可以獲得最高的精度:typedef long double real
, 在不支援long double
的機器上,看起來是這樣的,typedef double real
,在不支援double
的機器上,是這樣的,typedef float real
#define
不只是可以為型別取別名,還可以定義常量、變數、編譯開關等。
(3)作用域不同
#define
沒有作用域的限制,只要是之前預定義過的巨集,在以後的程式中都可以使用,而typedef
有自己的作用域。
#define
沒有作用域的限制,只要是之前預定義過的巨集,在以後的程式中都可以使用。
而typedef
有自己的作用域。
void fun()
void gun()
(4)對指標的操作不同
#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
限定,表示封鎖了這個指標型別。
intptr2 const p3
是乙個指標常量
typedef和 define有什麼區別?
typedef和 define最大的區別就是typedef用於給變數起別名,而 define只是簡單的字串替換。大家可能會疑惑了,字串替換不也是別名嗎?呃呃呃。這個真不好反駁,具體還是看程式吧!include using namespace std typedef int p1int define ...
Typedef和define的區別
typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...
typedef和 define的區別
一 typedef的用法 二 define的用法 define為一巨集定義語句,通常用它來定義常量 包括無參量與帶參量 以及用來實現那些 表面似和善 背後一長串 的巨集,它本身並不在編 譯過程中進行,而是在這之前 預處理過程 就已經完成了,但也因此難以發現潛在的錯誤及其它 維護問題,define的用...