C语言中枚举声明的区别



C语言中以下两种枚举声明的区别是什么?

  1. typedef enum colour { Red, Blue };

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

在最简单的情况下,枚举可以声明为

enum color {Red,Blue};

对this的任何引用都必须以enum关键字开头。例如:

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

为了避免必须到处使用enum关键字,可以创建一个类型定义:

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

使用typedef,相同的变量现在可以声明为

color2 color_variable3;
color2 color_variable4;

C中的结构也遵循类似的规则。typedef还使您的代码在没有C结构(enum)关键字的情况下看起来更整洁。它也可以给出逻辑意义。

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

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

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

这与您定义一个名为struct的控件时所做的事情是一样的。

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

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

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

完全可以。

这样做只是为了替换一堆#define语句。您不希望在需要枚举颜色的地方传递枚举形状值。

但是你可以用它来代替整数,所以

int foo(int x){
    return x;}
int y = foo(Red);

将返回0

相关内容

  • 没有找到相关文章

最新更新