共用方式為


C 的列舉型別宣告

列舉型別是由一組具名的整數常數所組成。 在列舉型別宣告提供 (可省略) 列舉型別標記的名稱,而且定義的具名的整數識別項 (稱為"列舉型別設定,""列舉值的常數,""列舉值 」 或 「 成員 」)。 列舉型別與變數會儲存其中一個列舉型別集合,該型別所定義的值。

變數的enum索引運算式中,而是所有的算術和關係運算子的運算元,可以使用型別。 列舉型別提供另一種#define與優點,可為您產生的值,並遵循標準的範圍設定規則的前置處理器指示詞。

在 ANSI C 中,二個運算式所定義的列舉值常數的值永遠具有int鍵入; 因此,列舉型別變數相關聯的儲存區是儲存需求的單一int的值。 列舉型別常數或列舉型別的值可以用於 c 語言允許整數運算式的任何地方。

語法

  • 列舉規範
    enum identifier opt**{** enumerator-list }

    列舉識別項

選擇性的識別項 命名的列舉型別所定義的 列舉值清單。 這個識別項通常稱為 「 標籤 」 的清單中所指定的列舉型別。 表單的型別規範

enum identifier { enumerator-list }

宣告識別項 是由指定列舉型別的標記 列舉值清單為非末端。 列舉值清單定義 「 列舉值內容 」。 列舉值清單底下將詳細說明。

如果標記的宣告是看得見,後續的宣告,可使用的標記,但省略列舉值清單指定先前宣告的列舉型別。 標記必須參考已定義的列舉型別,且該列舉型別必須是目前範圍中。 因為其他的位置,定義列舉型別列舉值清單不會出現這個宣告中。 從列舉型別衍生的型別宣告和typedef列舉型別的宣告在列舉型別定義之前,可以使用列舉型別標記。

語法

  • 列舉值清單
    列舉值

    列舉值清單**,**enumerator

  • enumerator:
    列舉型別常數

    列舉型別常數**=** 常數運算式

  • 列舉型別常數
    identifier

每個列舉型別常數列舉型別清單命名列舉型別集合的值。 預設情況下,第一個列舉型別常數相關聯的值是 0。 下一個列舉型別常數 在清單中是相關聯的值 ( 常數運算式 + 1),除非您明確地將它與另一個值。 值為列舉型別常數相當於它的值。

您可以使用列舉型別常數 = 常數運算式來覆寫預設的序列值。 因此,如果列舉型別常數 = 常數運算式 會顯示在 列舉值清單列舉型別常數 時才使用所提供的值會 常數運算式常數運算式必須要有int類型,而且可以是負數。

下列規則適用於列舉型別集合的成員:

  • 列舉型別集可以包含重複的常數值。 例如,您還可以用的值是 0 與兩個不同的識別項,可能是名為null和zero,在同一組。

  • 列舉型別清單中的識別項必須是不同於具有相同的可視性,包括在其他列舉型別清單中的一般變數的名稱和識別項相同的範圍中其他識別項。

  • 列舉型別標記會遵循標準的範圍設定規則。 它們必須不同於其他的列舉型別、 結構和等位的標記,具有相同的可視性。

範例

這些範例所示列舉型別宣告:

enum DAY            /* Defines an enumeration type    */
{
    saturday,       /* Names day and declares a       */
    sunday = 0,     /* variable named workday with    */ 
    monday,         /* that type                      */
    tuesday,
    wednesday,      /* wednesday is associated with 3 */
    thursday,
    friday
} workday;

數值 0 聯saturday預設狀況下。 識別項sunday明確設為 0。 剩餘的識別項會提供預設值為 1 到 5。

在這個範例中,從這組值DAY指派給變數today。

enum DAY today = wednesday;

請注意列舉型別常數的名稱用來指派值。 由於DAY列舉型別先前宣告型別,列舉型別標記DAY是必要的。

若要明確地指派列舉的資料型別的變數的整數值,使用型別轉換:

workday = ( enum DAY ) ( day_value - 1 );

此一轉型會建議您在 c 中,但這並非必要條件。

enum BOOLEAN  /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true 
}; 

enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */

此宣告也可以指定為

enum BOOLEAN { false, true } end_flag, match_flag;\

或正如

enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;

使用這些變數的範例可能如下所示:

if ( match_flag == false )
    {
     .
     .   /* statement */ 
     .
    }
    end_flag = true;

也可以宣告未命名的列舉值的資料型別。 資料型別名稱會省略,但您可以宣告變數。 將變數response是定義型別的變數:

enum { yes, no } response;

請參閱

參考

C + + 列舉宣告