typedef和define有什麼區別

2021-10-14 18:08:51 字數 1814 閱讀 2200

typedefdefine都是替乙個物件取乙個別名,以此增強程式的可讀性,區別如下:

(1)原理不同

#definec語言中定義的語法,是預處理指令,在預處理時進行簡單而機械的字串替換,不作正確性檢查,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。

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的用...