巨集定義( define)和常量(const)的區別

2021-07-30 18:07:58 字數 668 閱讀 3415

之前一直沒有仔細研究過 #define 和 const 的區別,最近由於種種原因被問及此點,完全一頭霧水,於是便蒐集相關資料做了如下的總結。

#define和const區別

1.型別和安全檢查不同

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

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

其中,邊際效應是指如下錯誤:

#define data 2+3

i=data/2;(其中由於data使用巨集定義,即使用2+3替代,則實際效果為 i=2+3/2;最後結果與期望的(2+3)/2 不同,此即為邊際效應錯誤)

2.編譯器處理不同

巨集定義是乙個「編譯時」概念,在預處理階段展開,不能對巨集定義進行除錯,

生命週期結束於編譯時期

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

3.儲存方式不同

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

const常量需要進行記憶體分配,儲存於程式的資料段中(靜態區);

4.定以後能否取消

巨集定義可以通過#undef來是之前的巨集定義失效;

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

以上即我認為較重要的幾點,有參考其他同學的總結。

define巨集定義和const常量定義之間的區別

define部分 巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是 段。巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。巨集的語法為 define 巨集名稱 巨集值 注意,巨集定義不是c或c 嚴格意義上的語句,所以其行末不用加分號結束。作為一種建議和一種廣大程式設計師共同的習慣,巨集...

define巨集定義和const常量定義之間的區別

用巨集表示常數 假如我們要寫乙個有關圓的種種計算的程式,那麼 3.14159 值會被瀕繁用到。我們顯然沒有理由去改 的值,所以應該將它當成乙個常量對待,那麼,我們是否就不得不一遍一遍地寫3.14159這一長串的數呢?必須有個偷懶的方法,並且要提倡這個偷懶,因為多次寫3.14159,難免哪次就寫錯了。...

define巨集定義和const常量定義之間的區別

define 定義預編譯時處理的巨集 只進行簡單的字元替換,無型別檢測 const 定義程式中的常量,編譯時處理 常量修飾符,把變數定義為常量 typedef 定義型別別名 例 typedef int a 則 a a 定義a為int inline 定義內聯函式。const定義,大部分編譯器將在編譯的...