1. 程式人生 > >typedef與#define、#define與const

typedef與#define、#define與const

1. typedef與#define

通常來說,typedef要比#define要好,特別是在有指標的場合

#define只是簡單的字串替換而typedef則是為一個型別起新名字,例如:

typedef   char  *pStr1;
#define pStr2  char*;

pStr1  s1,s2;    //s1,s2 = char *
pStr2  s3,s4;    //s3 = char*; s4 = char

當const和typedef一起出現時,typedef不會是簡單的字串替換

const PSTR == char* const;

           != const char*;

2.#define與const

  1. 都用來定義常數,但是#define定義的常數不帶型別;const定義的常數是變數,帶型別
    #define PI 3.1315926;
    const double PI = 3.1416926;
  2. 作用時刻不同:define是在編譯的預處理階段起作用; const是在編譯、執行時起作用
  3. 作用方式不同:define只是簡單的字串替換,沒有型別檢查; const有對應的資料型別,所以要進行判斷,可以避免一些低階錯誤
  4. 空間佔用不同:define佔用程式碼段空間;const佔用資料段空間;
  5. 記憶體空間: define不分配記憶體,給出的是立即數,有多少次使用就進行多少次替換,在記憶體中會有多個拷貝,消耗記憶體大;           const是在靜態儲存區中分配空間,在程式執行過程中記憶體中只有一個拷貝
  6. 除錯:define不可除錯;const可以除錯;
  7. 再定義:define可以用#undef取消某個符號的定義,再重新定義;const不能重定義
  8. 其他功能:define可以防止標頭檔案重引用,程式碼格式如下:
    #ifndef _XXX_H    //如果沒有定義XXX標頭檔案
    #define _XXX_H    //就定義該XXX標頭檔案
    
    //標頭檔案程式碼內容
    
    #endif    //結束