枚舉
你或許已經注意到了,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 };