C语言中以下两种枚举声明的区别是什么?
-
typedef enum colour { Red, Blue };
-
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