define與enum,你不知道的那些事

2021-07-01 22:16:40 字數 1531 閱讀 6294

什麼時候需要用到enum呢,就是變數的數值在幾個範圍之間.red,blue,black.這樣用enum比較好.當然也可以用define.但是define維護起來比較麻煩.

#define 適合比較少的變數的時候.

用enum關鍵字說明常量(即說明列舉常量)有以下幾點好處:

(1) 使程式更容易維護,因為列舉常量是由編譯程式自動生成的,而識別符號常量必須由程式設計師手工賦值。例如,你可以定義一組列舉常量,作為程式中        可能發生的錯誤的錯誤號,請看下例:

enum error_code    

;   

在上例中,out_of_memory等列舉常量依次被編譯程式自動賦值為0,1,2和3。

同樣,你也可以用#define指令說明類似的一組常量,請看下例:

#define out_of_memory                  0    

#define insufficient_disk_space    1

#define logic_error                        2

#define file_not_found                  3

上述兩例的結果是相同的。

(2) 使程式除錯起來更方便,因為某些識別符號除錯程式能列印列舉常量的值。這一點在除錯程式時是非常用的,因為如果你的程式在使用列舉常量的一       行語句中停住了,你就能馬上檢查出這個常量的值;反之,絕大多數除錯程式無法列印識別符號常量的值,因此你不得不在標頭檔案中手工檢查該常量      的值。

列舉與巨集定義的區別和聯絡:

列舉和define都可以swtich,列舉是型別安全的,define不是型別安全的。列舉只能定義整形值,define能定義幾乎任何值

enumnodetype ;

voidmain()

return0;

}巨集和列舉之間的差別主要在作用的時期和儲存的形式不同,巨集是在預處理

的階段進行替換工作的,

它替換**段的文字,程式執行

的過程中巨集已不

存在了。而列舉是在程式執行之後才起作用的,

列舉常量儲存在資料段的

靜態儲存區里。巨集占用**段的空間,而

列舉除了占用空間,還消耗cpu

資源。 

但也不能就此說巨集比列舉好,如果需要定義非常多的常量,用一條

enum 明顯

比一大堆define更清晰,列舉也可以用來定義一些

特殊型別,比

如bool,如: 

type enum bool;

總結:

define特點:

優點:巨集定義可為多種型別的值,如字串、整型、浮點型等。

缺點:沒有範圍限制(全域性範圍有效),容易發生衝突,產生不確定的結果;

多個相關的值一起定義時比較散亂。

enum特點:

缺點:只能為整型值

優點:遵循範圍規則,不易和其它定義發生衝突。

多個相關值一組,比較清晰。

一般情況下二者可選時盡量用enum。

你也許不知道的 define用法

from 最近看com相關的資料,看到ccmdtarget實現com介面的時候,去讀了一些巨集的定義,在afxdisp.h標頭檔案中 define begin inte ce part localclass,baseclass class x localclass public baseclass ...

你可能不知道得define

define g variable 26.5 記號g variable可能不會被編譯器看到,在進行預處理的時候,g variable已經被替換成26.5,於是g variable並未進入符號表,此時執行次變數出現錯誤的提示可能只會提到26.5,若此時g variable定義在乙個非你寫的標頭檔案裡,...

不知道不知道

函式分析 希爾伯特 哥德爾不完備定理 哥德爾不完全性定理一舉粉碎了數學家兩千年來的信念。他告訴我們,真與可證是兩個概念。可證的一定是真的,但真的不一定可證。某種意義上,悖論的陰影將永遠伴隨著我們。無怪乎大數學家外爾發出這樣的感嘆 上帝是存在的,因為數學無疑是相容的 魔鬼也是存在的,因為我們不能證明這...