typedef 和#define定義別名的區別

typedef與#define 的區別
一、typedef的用法
    typedef常用來定義一個標識符及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配內存空間,實例像:
typedef    int       INT;
typedef    int       ARRAY[10];
typedef   (int*)   pINT;
    typedef可以增強程序的可讀性,以及標識符的靈活性,但它也有“非直觀性”等缺點。
二、#define的用法
    #define爲一宏定義語句,通常用它來定義常量(包括無參量與帶參量),以及用來實現那些“表面似和善、背後一長串”的宏,它本身並不在編譯過程中進行,而是在這之前(預處理過程)就已經完成了,但也因此難以發現潛在的錯誤及其它代碼維護問題,它的實例像:
#define   INT             int
#define   TRUE         1
#define   Add(a,b)     ((a)+(b));
#define   Loop_10    for (int i=0; i<10; i++)
三、typedef與#define的區別
    從以上的概念便也能基本清楚,typedef只是爲了增加可讀性而爲標識符另起的新名稱(僅僅只是個別名),而#define原本在C中是爲了定義常量,到了C++,const、enum、inline的出現使它也漸漸成爲了起別名的工具。有時很容易搞不清楚與typedef兩者到底該用哪個好,如#define INT int這樣的語句,用typedef一樣可以完成,用哪個好呢?我主張用typedef,因爲在早期的許多C編譯器中這條語句是非法的,只是現今的編譯器又做了擴充。爲了儘可能地兼容,一般都遵循#define定義“可讀”的常量以及一些宏語句的任務,而typedef則常用來定義關鍵字、冗長的類型的別名。
    宏定義只是簡單的字符串代換(原地擴展),而typedef則不是原地擴展,它的新名字具有一定的封裝性,以致於新命名的標識符具有更易定義變量的功能。請看上面第一大點代碼的第三行:
typedef    (int*)      pINT;
以及下面這行:
#define    pINT2    int*
    效果相同?實則不同!實踐中見差別:pINT a,b;的效果同int *a; int *b;表示定義了兩個整型指針變量。而pINT2 a,b;的效果同int *a, b;表示定義了一個整型指針變量a和整型變量b。
    注意:兩者還有一個行尾;號的區別哦!

   還有,就是它們書寫的位置相反,


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