c const與 define的用法總結

2021-09-27 01:54:28 字數 873 閱讀 3937

1、const

a.可以用來定義常量、修飾函式引數、修飾函式返回值等三個作用。(編譯階段)

b.被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

2、#define

#define是乙個巨集定義,可以定義乙個全域性變數,在整個檔案中都可以使用,它只是乙個字元替換操作,不做型別檢查,也不占用記憶體和執行時間。(預編譯階段)

3、二者的區別

a. const有型別檢查,define無型別檢查(最重要的)

define只是在預處理階段做個簡單的替換,而const在編譯執行階段是有嚴格的型別檢查的。

#define a 1

const

int a =

1;

b. const常量儲存於程式的資料段(存放程式中已初始化的全域性變數的一塊記憶體區域),而#define常量是在**段(用來存放程式執行**的一塊記憶體區域)。

c. const相對來說比較節約儲存空間

const在宣告的時候不會真正分配空間,編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,只有在第一次被引用的時候才會分配空間,而且只在記憶體中有乙個備份,而define展開一次就占用一些空間。

/*像int,char這些基礎型別,直接放到指令裡,即在指令記憶體裡。其它的應當在資料段裡,即 */

const

int i =4;

intfun()

d. 當然這兩個關鍵字各有不能替代的地方,但是在c++中,乙個原則就是盡量用const而不用define。

C const和 define的異同

const分配記憶體的時機是在編譯器編譯時期 include int main const和 define的相同之處 int main const和 define的區別 c 的const常量類似於巨集定義 const int c 5 define c 5 c 中的const常量與巨集定義不同 con...

關於C const限定符與define

const限定符修飾的常量無法修改,且在定義的時候必須同時初始化,否則error xcode平台 相比define,const指定的常量有型別,而define只是簡單的字元替換。const修飾的常量只能由const指標來指向,不能用乙個普通的指標指向乙個const修飾的常量 const int a ...

C const與函式過載

const 修飾函式有三種 constt foo bar constt const 1.修飾函式返回值 函式返回值不能作為區分函式過載的因素 2.修飾函式引數 如 void foo int void foo const int 如果以上這兩個函式是在乙個作用域內,函式過載失敗,編譯報錯。既,cons...