Enums C中枚举声明之间的差异?
在C中,以下两个枚举声明之间有什么区别Enums C中枚举声明之间的差异?,enums,typedef,Enums,Typedef,在C中,以下两个枚举声明之间有什么区别 typedef枚举颜色 {红色,蓝色 }; typedef枚举颜色 {红色,蓝色 }颜色//在您的回复中,请将此颜色称为color2以避免混淆 我认为第一个根本不正确,您不需要typedef。一个命名的enum就足够了;例如: enum colour { Red, Blue }; void myfunc(enum colour argument) { if (argument == Red) { // ... }
typedef枚举颜色
{红色,蓝色
};代码>
typedef枚举颜色
{红色,蓝色
}颜色代码>//在您的回复中,请将此颜色称为color2以避免混淆
我认为第一个根本不正确,您不需要
typedef
。一个命名的enum
就足够了;例如:
enum colour {
Red, Blue
};
void myfunc(enum colour argument) {
if (argument == Red) {
// ...
} else {
// ...
}
}
这与定义命名的struct
时所做的相同
第二个将定义命名的
enum
,并将自定义类型名color
映射到命名的enum
。您还可以将枚举设置为匿名,只定义自定义类型名。在最简单的情况下,枚举可以声明为
enum color {Red,Blue};
color2 color_variable3;
color2 color_variable4;
对此的任何引用都必须以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,现在可以将相同的变量声明为
enum color {Red,Blue};
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
实际上,最简单的例子甚至不需要命名
enum{
Red, //Implicitly 0
Blue //Implicitly 1
};
这是完全可以接受的
这样做只是为了替换一堆#define语句。您不希望在需要枚举颜色的位置传递枚举形状值
但是你可以用它来代替整数,所以
int foo(int x){
return x;}
int y = foo(Red);
将返回0其枚举颜色{红色,蓝色};或者在问题中键入2当使用typedef时,需要指定枚举的别名。所以类型1是无效的。对不起,我不明白你的意思…你能再解释一下吗。这将帮助您更好地理解jmc。这个链接很好地解释了这一点:谢谢!你的链接很好地解释了这一点。。