簡體   English   中英

這兩個枚舉聲明-C有什么區別?

[英]What's the difference between these two enum declarations - C?

我已經開始學習C語言,並且已經達到枚舉的目的。 基本上,枚舉是DEFINE / const int的首選替代方法,對嗎?

這兩個聲明有什么區別?

#include <stdio.h>

// method 1
enum days {
    Monday,
    Tuesday
};

int main()
{
    // method 1
    enum days today;
    enum days tomorrow;

    today    = Monday;
    tomorrow = Tuesday;

    if (today < tomorrow)
        printf("yes\n");

    // method 2
    enum {Monday, Tuesday} days;

    days = Tuesday;
    printf("%d\n", days);

    return 0;
}

當您要聲明只能接受有限范圍內相關互斥值范圍內的值的變量時,應優先於#define / const int枚舉。 因此,星期幾是一個很好的例子,但這將是一個不好的例子:

enum AboutMe
{
    myAge = 27,
    myNumberOfLegs = 2,
    myHouseNumber = 54
};

回到您的代碼示例; 第一個方法聲明一個稱為enum days類型 您可以使用此類型聲明任意多個變量。

第二種方法聲明一個enum { ... }類型為enum { ... } 變量 您不能聲明該類型的任何其他變量。

作為一個typenut,我會寫成第一個

typedef enum { Monday, Tuesday } days_t;

並聲明為

days_t day = Tuesday;

我發現第二種方法沒有用。

區別在於,在第一種情況下,天是枚舉的名稱。 因此,您可以通過以下方式訪問定義

enum days today;

枚舉天數=弄清楚哪個枚舉,一個名為天

今天=變量名

在第二種情況下,天是未命名枚舉的變量。

enum {Monday, Tuesday} days;

枚舉{星期一,星期二} =未命名的枚舉,因此需要使用大括號{}進行定義

天=變量名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM