1. 程式人生 > >typedef和#define的用法和區別

typedef和#define的用法和區別

一、typedef的用法

1、在C/C++語言中,typedef常用來定義一個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像:

typedef    int       INT;

typedef    char*  Pchar;

typedef   (int*)   pINT;

typedef    unsigned char uchar;     // 將頻繁使用且較長的型別定義一個別名

2、typedef的另外一類用法是某個型別的直接引用限制到一個地方。如:

typedef    int    int32;

typedef    short  int16;

當程式移植到一個sizeof(int)== 2的機器上時,只需要在程式碼中重新如下定義:

typedef   long    int32;

typedef   int       int16;

一定要明確的一點是:typedef只是用來定義其他型別的同義詞(或者別名),而不是一個獨立的型別。

typedef可以增強程式的可讀性,以及識別符號的靈活性,但它也有“非直觀性”等缺點。

二、#define的用法

#define為一巨集定義語句,通常用它來定義常量(包括無參量與帶參量),以及用來實現那些“表面似和善、背後一長串”的巨集,它本身並不在編

譯過程中進行,而是在這之前(預處理過程)就已經完成了,但也因此難以發現潛在的錯誤及其它程式碼維護問題,#define的用法如下:

#define   INT             int  //用INT代替int

#define   TRUE          1     //用TRUE 1

#define   Add(a,b)     ((a)+(b));

#define   Loop_10    for (int i=0; i<10; i++)

三、兩者的區別

1、比較如下程式碼

Code 1:

typedef    char* Pchar;

Pchar  p1, p2;

則p1和p2都是char*型別的指標變數。

Code 2:

#define  Pchar  char*

Pchar  p3, p4;

由於#define只是進行字串替換,因此第二句相當於 char* p3, p4;即p3是char* 型變數,而p4則是char 型變數。

2、用#define做如下巨集定義是一定注意加():

#define   fun(a,b)   ((a)*(b))

如果把巨集定義寫成:

#define    fun(a,b)    a*b

那麼,如下程式碼段得到的值跟期望值會有出入:

int x=3,y=4,z=5,k=6;

int temp = fun(x+y,z+k);

則temp =  3+4*5+6 = 29不等於期望值(3+4)*(5+6)=77