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

2021-08-10 06:57:27 字數 1227 閱讀 4792

define:定義預編譯時處理的巨集;

只進行簡單的字元替換,無型別檢測

const:定義程式中的常量,編譯時處理;

常量修飾符,把變數定義為常量

typedef:定義型別別名;

例: typedef int a;

則:a a; //定義a為int

inline:定義內聯函式。

const定義,大部分編譯器將在編譯的時候進行替換,比如:

const int i=2;

int *p = const_cast(&i);

*p = 3;

cout巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是**段。(巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)

巨集的語法為:

#define 巨集名稱 巨集值

注意,巨集定義不是c或c++嚴格意義上的語句,所以其行末不用加分號結束。

作為一種建議和一種廣大程式設計師共同的習慣,巨集名稱經常使用全部大寫的字母。

利用巨集的優點:

1)讓**更簡潔明瞭

當然,這有賴於你為巨集取乙個適當的名字。一般來說,巨集的名字更要注重有明確直觀的意義,有時寧可讓它長點。

2)方便**維護

對巨集的處理,在編譯過程中稱為「預處理」。也就是說在正式編譯前,編譯器必須先將**出現的巨集,用其相應的巨集值替換,這個過程有點你我在文字處理軟體中的查詢替換。所以在**中使用巨集表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的型別。這容易帶來一些問題,所以c++使用另一更穩妥的方法來代替巨集的這一功能。

const部分

常量定義的格式為:

const 資料型別 常量名 = 常量值;

而const定義的常量具有資料型別,定義資料型別的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查。常量必須一開始就指定乙個值,然後,在以後的**中,我們不允許改變此常量的值。

兩者之間的區別:

記憶體空間的分配上。define進行巨集定義的時候,不會分配記憶體空間,編譯時會在main函式裡進行替換,只是單純的替換,不會進行任何檢查,比如型別,語句結構等,即巨集定義常量只是純粹的置放關係,如#define null 0;編譯器在遇到null時總是用0代替null它沒有資料型別(還有疑問請找c語言書籍看預處理部分或者看msdn.而const定義的常量具有資料型別,定義資料型別的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程式之間的不安全性.

from:

define巨集定義和const

define是在預編譯階段就定義的常量,不占用記憶體空間 const可以在程式的任何時候定義,是乙個全域性的常量,放在記憶體的static部分。define巨集定義沒有指定的型別,而const在定義時就指定了常量的型別。const int p p可變,p指向的物件不可變 int const p p可...

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

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

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

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