在c++中可以使用#define或者const來定義常量,但是使用const相比起#define有更多的優點。——–
以下部分內容選自《程式猿面試寶典》
#define x 10
#define y x+x
-》y*y //原意:20*20 實際上是 10+10*10+10
當然,這樣的邊際效應可以通過良好的編寫巨集習慣避免。
既然const常量可以取代#define常量那麼為什麼有的庫(程式)使用的#define常量
常量的引進是在早期的c++版本中,當時標準c規範正在制訂。那時,常量被看做乙個好的思想而被包含在c中。但是,c中的const的意思是」乙個不能被改變的普通變數」。在c中,它總是占用記憶體,而且它的名字是全域性符。c編譯器不能把const看成乙個編譯期間的常量。在c中,如果寫:
const bufsize=100;
char buf[bufsize];
儘管看起來好像做了一件合理的事,但這將得到乙個錯誤的結果。因為bufsize占用記憶體的某個地方,所以c編譯器不知道它在編譯時的值。在c語言中可以選擇這樣書寫:
extern
const bufsize;//declaration only
這種方法也可用在c語言中。在c語言中使用限定符const不是很有用,即使是在常數表示式裡(必須在編譯期間被求出)想使用乙個已命名的值,使用const也不是很有用的。c迫使程式設計師在預處理器裡使用# define。 define巨集定義和const常變數區別
1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。2.define定義的常量,預處理時只是直接進行了替換。所以編譯時不能進行...
define巨集定義和const
define是在預編譯階段就定義的常量,不占用記憶體空間 const可以在程式的任何時候定義,是乙個全域性的常量,放在記憶體的static部分。define巨集定義沒有指定的型別,而const在定義時就指定了常量的型別。const int p p可變,p指向的物件不可變 int const p p可...
define巨集定義和const常量定義之間的區別
define部分 巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是 段。巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。巨集的語法為 define 巨集名稱 巨集值 注意,巨集定義不是c或c 嚴格意義上的語句,所以其行末不用加分號結束。作為一種建議和一種廣大程式設計師共同的習慣,巨集...