如何正確使用列舉

2021-07-11 20:46:12 字數 1136 閱讀 6382

列舉型別,對程式設計師來說再熟悉不過了,但是,你確定你在正確得使用它嗎?

在用列舉之前,讓我們來區分一下狀態選項這兩個概念。

那麼,我們怎麼使用列舉來定義狀態和選項呢?

不好的寫法(你可能經常見到的寫法):

#define  status_fail        0

#define status_success 1

//用int變數直接接收

int status = status_success;

這樣寫的不恰當之處在於:

1.巨集定義沒有型別約束,只是單純的替換;

2.無法限制狀態的所有情況;比如:人為地把status賦值為3,程式可能就會出錯找不到對應的狀態,因為編譯器不會對status=3提示警告。

正確的寫法是:

typedef enum

_zxstatuszxstatus;

舉個例子:

typedef enum

_zxdirectionzxdirection;

注意:這裡的選項是用位運算的方式定義的,這樣的好處就是,選項變數可以如下表示:

zxdirection direction =zxdirectionbottom | zxdirectiontop;

所以,用位運算就可以同時支援多個值。

c++ 11之前,我們是不能指定列舉的型別的,但是這之後,我們可以為列舉指定實際的儲存型別。foundation框架已經為我們提供了更加「統

一、便捷」的列舉定義方法,我們重新定義上面的例子:

typedef ns_enum(nsuinteger,zxstatus) ;

typedef ns_options(nsuinteger,zxdirection) ;

所以,在objective-c中,最好所有的列舉都用「ns_enum」和「ns_options」定義,保證統一。

參考文章

如何正確使用記憶體

如何正確使用記憶體 對於初學者來說,記憶體是個神秘的空間。程式的絕大部分錯誤,也是在於記憶體的使用不當造成的,而且這些錯誤有些都是隱藏很深的。所以,如何掌握記憶體的使用,通曉系統對記憶體的管理手段,將是軟體成功的乙個非常關鍵的因素。首先我們要了解記憶體的分配方式。一般來說,記憶體的分配方式有三種 1...

如何正確使用AOP

aop也發展了不久了,雖然在工作上也一直在用,不過畢竟沒有深入了解過,停留在概念上的理解,和使用的階段上。這篇主要講講,aop如何正確的使用它。首先需要知道,目前畢竟流行的aop框架,上篇文章也介紹了aop實現的原理,對spring這個大家庭來說,它的aop遠遠沒有這麼簡單。目前使用畢竟多的 幾種方...

如何正確使用const,static,extern

一 const與巨集的區別 面試題 編譯時刻 巨集是預編譯 編譯之前處理 const是編譯階段。編譯檢查 巨集不做檢查,不會報編譯錯誤,只是替換,const會編譯檢查,會報編譯錯誤。巨集的好處 巨集能定義一些函式,方法。const不能。巨集的壞處 使用大量巨集,容易造成編譯時間久,每次都需要重新替換...