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