BuildYourOwnLisp Why we need enum

枚舉

你或許已經注意到了,lval 的 type 和 err 字段的類型都是 int,這意味着它們皆由整數值來表示。

之所以選用 int,是因爲我們將爲每個整數值賦予意義,並在需要的時候進行解讀。舉例來說,我們可以制定這樣的規則:

  • 如果 type 爲 0,那麼此結構體表示一個數字
  • 如果 type 爲 1,那麼此結構體表示一個錯誤

這是個簡單而高效的方法。

但如果我們的代碼中充斥了類似於 0 和 1 之類的“魔法數字”(Magic Number),程序的可讀性就會大大降低。如果我們給這些數字起一個有意義的名字,就會給代碼閱讀者一些有用的提示,提高可讀性。

C 語言爲此提供了語言特性上的支持——枚舉(enum)。

/* Create Enumeration of Possible lval Types */
enum { LVAL_NUM, LVAL_ERR };

enum 語句聲明瞭一系列整型常量,並自動爲它們賦值(譯者注:從 0 開始,依次遞增)。上面的代碼展示瞭如何爲 type 字段聲明枚舉值。

另外,我們還需要爲 error 字段也聲明一些枚舉值。目前,我們需要聲明三種類型的錯誤,包括:除數爲零、操作符未知、操作數過大。代碼如下:

/* Create Enumeration of Possible Error Types */
enum { LERR_DIV_ZERO, LERR_BAD_OP, LERR_BAD_NUM };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章