typedef和#define

整理自:http://www.cnblogs.com/heyonggang/p/3199216.html

定義

1.typedef是用來聲明類型別名的,使用它一般是爲了增加代碼的可讀性,它可以爲一串很長的類型名起一個別名,使用這個別名可以達到與原類型名相同的效果。

typedef int INT;
//以下兩行效果相同
int a;
INT a;

2.#define是一個宏定義命令,用來定義一個常量(包括無參常量和有參常量),它本身並不在編譯過程中執行,而是在預處理階段就已經完成了,因此不作任何正確性檢查,只進行與含義無關的字符串替換。在使用宏定義時要注意括號的使用。

#define ADD(a,b) a+b;      //錯誤
//#define ADD(a,b) (a+b);  //正確 

int sum=ADD(1,2)*3;        //1+2*3

區別

1.typedef是C++的關鍵字,用來爲一個已有的數據類型起別名;#define是C++的宏定義命令,用來定義一個宏定義常量。

2.typedef爲一種數據類型起別名,帶有一定含義;#define只做簡單的字符串替換,不表達任何含義。

#define INTPTR1 int*
typedef int* INTPTR2;

INTPTR1 p1,p2;
INTPTR2 p3,p4;

上段代碼中,INTPTR1 p1,p2; 和INTPTR2 p3,p4;兩句作用完全不同:

(1)INTPTR1 p1,p2;進行字符串替換後變成int* p1,p2;表示聲明一個指針變量p1和一個整型變量p2。

(2)INTPTR2 p3,p4;進行字符串替換後變成int* p1,*p2;其中INTPTR2是具有含義的,說明是一個指向整型數據的指針,p3和p4都爲指針變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章