2

C 中的以下 2 个枚举声明有什么区别?

  1. typedef enum colour { Red, Blue };

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

4

3 回答 3

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,现在可以将相同的变量 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
于 2013-01-10T10:30:56.917 回答
0

我认为第一个根本不正确,您不需要typedef. 一个名字enum就够了;例子:

enum colour {
    Red, Blue
};

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

这与您在定义命名时所做的相同struct

第二个将定义一个 namedenum并将自定义类型名称映射colour到该 named enum。您也可以enum匿名并只定义自定义类型名称。

于 2013-01-10T10:23:36.730 回答
0

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

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

完全可以接受。

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

但是你可以在技术上使用它来代替整数,所以

int foo(int x){
    return x;}

int y = foo(Red);

将返回 0

于 2013-10-28T22:42:15.337 回答