C中枚举声明的区别?

时间:2013-01-10 10:13:12

标签: enums typedef

在C中跟随2个枚举声明有什么区别?

  1. typedef enum colour { Red, Blue };

  2. typedef enum colour { Red,Blue }colour; //在您的回复中请将此颜色称为colour2以避免混淆

3 个答案:

答案 0 :(得分: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中的结构也遵循类似的规则。 typedef还使您的代码看起来更整洁,没有C struct(enum)关键字。它也可以给出逻辑意义。

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

答案 1 :(得分:0)

我不认为第一个是正确的,你不需要typedef。名为enum就足够了;例如:

enum colour {
    Red, Blue
};

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

这与定义名为struct时的行为相同。

第二个将定义一个名为enum并将自定义类型名称colour映射到名为enum的名称。您也可以使enum匿名,只定义自定义类型名称。

答案 2 :(得分:0)

实际上,最简单的例子甚至不需要命名为

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

完全可以接受。

这样做只是为了替换一堆#define语句。您不希望传递enum颜色所需的枚举颜色值。

但是你可以在技术上用它代替整数,所以

int foo(int x){
    return x;}

int y = foo(Red);

将返回0