C 中的以下 2 个枚举声明有什么区别?
typedef enum colour { Red, Blue };
typedef enum colour { Red,Blue }colour;
//在您的回复中,请将此颜色称为 colour2 以避免混淆
在最简单的情况下,可以将枚举声明为
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,现在可以将相同的变量 a 声明为
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
我认为第一个根本不正确,您不需要typedef
. 一个名字enum
就够了;例子:
enum colour {
Red, Blue
};
void myfunc(enum colour argument) {
if (argument == Red) {
// ...
} else {
// ...
}
}
这与您在定义命名时所做的相同struct
。
第二个将定义一个 namedenum
并将自定义类型名称映射colour
到该 named enum
。您也可以enum
匿名并只定义自定义类型名称。
其实最简单的例子甚至不需要命名
enum{
Red, //Implicitly 0
Blue //Implicitly 1
};
完全可以接受。
这样做只是为了替换一堆#define 语句。您不想在需要枚举颜色的地方传递枚举形状值。
但是你可以在技术上使用它来代替整数,所以
int foo(int x){
return x;}
int y = foo(Red);
将返回 0