在C中跟随2个枚举声明有什么区别?
typedef enum colour
{ Red, Blue
};
typedef enum colour
{ Red,Blue
}colour;
//在您的回复中请将此颜色称为colour2以避免混淆
答案 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