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

2021-03-31 12:26:51 字數 1951 閱讀 9231

用巨集表示常數

假如我們要寫乙個有關圓的種種計算的程式,那麼∏(3.14159)值會被瀕繁用到。我們顯然沒有理由去改∏的值,所以應該將它當成乙個常量對待,那麼,我們是否就不得不一遍一遍地寫3.14159這一長串的數呢?

必須有個偷懶的方法,並且要提倡這個偷懶,因為多次寫3.14159,難免哪次就寫錯了。

這就用到了巨集。巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是**段。(巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)今天我們只談其中代替常數值的功能。

巨集的語法為:

#define 巨集名稱 巨集值

比如要代替前面說到的∏值,應為:

#define pai 3.14159

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

巨集名稱的取名規則和變數名一樣,所以我們這裡用pai來表示∏,因為c、c++不能直接使用∏字元。有了上面的語句,我們在程式中凡是要用到3.14159的地方都可以使用pai這個巨集來取代。

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

假設原來有一段**:

double zc = 2 * 3.14159 * r; //求圓周長,其中r是代表半徑的變數

double mj = 3.14159 * r * r; //求圓面積

在定義了巨集pai以後,我們就可以這樣使用:

#define pai 3.14159

double = 2 * pai * r; //求圓周長,其中r是代表半徑的變數

double = pai * r * r; //求圓面積

用巨集來取代常數,好處是:

1)讓**更簡潔明瞭

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

2)方便**維護

就如前面說的3.14159。哪天你發現這個∏值精度不夠,想改為3.1415926,那麼你只修改一處巨集,而不是修改**中的所有巨集。

原來的巨集:

#define pai 3.14159

修改後的巨集:

#define pai 3.1415926

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

常量定義

常量定義的格式為:

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

相比變數定義的格式,常量定義必須以 const 開始,另外,常量必須在定義的同時,完成賦值。

const float pai = 3.1415926;

const 的作用就是指明這個量(pai)是常量,而非變數。

常量必須一開始就指定乙個值,然後,在以後的**中,我們不允許改變pai的值,比如:

const float pai = 3.14159;

double zc = 2 * pai * r;

pai = 3.1415926;        //錯誤!,pai不能再修改。

double mj = pai * r * r; 

如果乙個常量是整型,可以省略指出資料型別,如:

const k = 100;

相當於

const int k = 100;

反過來說,如果不指定資料型別,則編譯器將它當成整型。比如:

const k = 1.234;

雖然你想讓k等於乙個實型數,然而,最終k的值其實是1。因為編譯器把它當成整型常量。

我們建議在定義變數時,明確指出型別,不管它是整型或其它型別。

const int i = 100;

const double di = 100.0;

define巨集定義和const

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

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

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

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

define巨集定義和const定義之間的區別 define部分 巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是 段。巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。巨集的語法為 define 巨集名稱 巨集值 注意,巨集定義不是c或c 嚴格意義上的語句,所以其行末不用加分號結束。...