2013-01-10 39 views
2

在C中跟隨2枚枚舉聲明有什麼區別?C中的枚舉聲明之間的區別?

  1. typedef enum colour { Red, Blue };

  2. typedef enum colour { Red,Blue }colour; //你的反應中,請參閱本顏色顏色2,以避免混淆

+0

其要麼枚舉顏色{紅,藍};或在您的問題中輸入2 當您使用typedef時,您需要指定枚舉的別名。所以1型不是有效的。 –

+0

對不起,但我不明白你的意思...你可以多解釋一下。 – GuiccoPiano

+0

http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c 這將幫助您更好地瞭解typedef –

回答

3

在最簡單的情況下,枚舉可以聲明爲

enum color {Red,Blue}; 

的任何引用此必須用enum關鍵字之前。例如:

enum color color_variable1; // declare color_variable of type 'enum color' 
enum color color_variable2; 

爲了避免具有到處使用enum關鍵字,一個typedef可以創建:

enum color {Red,Blue}; 
typedef enum color color2; // declare 'color2' as a typedef for 'enum color' 

用typedef,同樣variableA的現在可以聲明爲

color2 color_variable3; 
color2 color_variable4; 

僅供參考,C中的結構也遵循類似的規則。如果沒有C struct(枚舉)關鍵字,typedef也會使代碼更加整潔。它也可以給出邏輯意義。

typedef int RADIUS; // for a circle 
typedef int LENGTH; // for a square maybe though both are int 
+0

謝謝!你的鏈接很好地解釋了它.. http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c – GuiccoPiano

0

我不認爲第一個是正確的一切,你不需要typedef。一個名爲enum就足夠了;例如:

enum colour { 
    Red, Blue 
}; 

void myfunc(enum colour argument) { 
    if (argument == Red) { 
     // ... 
    } else { 
     // ... 
    } 
} 

這與您在定義名爲struct時所做的操作完全相同。

第二個將定義一個名爲enum並將自定義類型名稱colour映射到名爲enum。您也可以使enum匿名,並只定義自定義類型名稱。

+0

謝謝jmc。這個鏈接真的解釋得很好: http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c – GuiccoPiano

0

其實最簡單的例子甚至不需要被命名爲

enum{ 
    Red, //Implicitly 0 
    Blue //Implicitly 1 
}; 

是完全可以接受的。

這樣做只是爲了替換一堆#define語句。你不想傳遞枚舉顏色所期望的枚舉形狀值。

但是技術上可以使用它在一個整數的地方,所以

int foo(int x){ 
    return x;} 

int y = foo(Red); 

將返回0