巨集定義 define 與常量 const 區別

2021-09-29 01:21:06 字數 1124 閱讀 8011

巨集定義 #define 是字元替換,沒有資料型別的區別,同時這種替換沒有型別安全檢查,可能產生邊際效應等錯誤;

/**

** 邊際效應 ***

*/#define n 2+3

// 我們預想的 n 值是 5,我們這樣使用

ndouble a = n/2;

// 我們預想的 a 的值是 2.5,可實際上 a 的值是 3.5

const 常量是常量的宣告,有型別區別,需要在編譯階段進行型別檢查。

巨集定義 #define 是乙個「編譯時」概念,在預處理階段展開,不能對巨集定義進行除錯,其生命週期結束於編譯時期。

const 常量是乙個「執行時」概念,在程式執行使用,類似於乙個唯讀行資料。

巨集定義 #define 是直接替換,不會分配記憶體,儲存於程式的**段中。

const 常量需要進行記憶體分配,儲存於程式的資料段中。

/**

** 空間占用 ***

*/#define pi 3.14

//預處理後 占用**段空間

const

float pi=

3.14

;// 本質上還是乙個 float,占用資料段空間

void

func1()

void

func2()

巨集定義 #define 可以通過 #undef 使之前的巨集定義取消

const 常量定義後便在定義域內永久有效

void

func3()

巨集定義 #define 不可作為引數傳遞給函式

const 常量可以在函式的列表**現

就定義常量說的話, const 定義的常數是變數,帶型別, #define 定義的只是個常數,不帶型別。

就起作用的階段而言,#define 是在編譯的預處理階段起作用,而 const 是在 編譯、執行的時候起作用。

從**除錯的方便程度而言, const 常量可以進行除錯的,#define 是不能進行除錯的,因為在預編譯階段就已經替換掉了。

const常量與define巨集定義的區別

define radius 100 const float radius 100 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行...

const常量與define巨集定義的區別

define radius 100 const float radius 100 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行...

const常量與define巨集定義的區別

define radius 100 const float radius 100 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行...