用巨集表示常數
假如我們要寫乙個有關圓的種種計算的程式,那麼∏(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 嚴格意義上的語句,所以其行末不用加分號結束。...