2010-04-20 45 views

回答

8

短規則:對於條件編譯(像用於調試和發佈不同的代碼片段)使用#define。對於所有其他情況,請使用const構造。

+1

+1錯誤做法:拇指好的規則 - 不肯定爲什麼別人給你一個這樣的票? – 2010-04-20 21:54:21

1

使用#define會產生一個預處理器符號:它在預處理髮生後根本不存在,相當於在文件中輸入了「100」。

特色預處理符號:

  • 您可以在預處理程序指令使用它們像#ifdef
  • 它有詞法範圍
  • 您可以無法把他們的地址(因此不能使用它們作爲參數其中預期type*

使用const type d eclares一個C++變量。

  • 可以在預處理指令不用這個東西
  • 它遵循通常的C++作用域規則
  • 您可以採用它的地址

它被廣泛認爲是更好的使用const爲「in program」常量和#define僅用於條件編譯(表示從(非常!)舊時代開始的變化,當您不能始終依靠c編譯器來處理const智能地使用#define是優選的)。如果沒有其他內容,這可以更好地控制符號的範圍。

0

在C的原始版本中,#define是唯一可用於聲明常量值的方法。這是在編譯時而不是在運行時完成的:編譯器對每條指令的值進行硬編碼。 const是C++(後來以有限的方式添加到C中)的一個特性,並且在C++中建議您使用const而不是#define。 const變量實際上存在於內存中,並且可以在運行時在構造時初始化。

#define然而,仍然經常在C++中使用,主要用於與編譯器通信。

一些例子:

類的頭包裝,以防止多個類聲明:

#ifdef VAL_H 
#define VAL_H 

// Define class header 

#endif // VAL_H 

條件編譯:

// Comment this line to disable debug output 
#define DEBUG 

// Some code 
#ifdef DEBUG 
// Only gets compiled if DEBUG is defined. 
cerr << "Debug output here" << endl; 
#endif