typedef和define的區別

2021-10-05 04:31:21 字數 1196 閱讀 7773

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是指...