Enums 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) { // ... }

在C中,以下两个枚举声明之间有什么区别

  • 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。这个链接很好地解释了这一点:谢谢!你的链接很好地解释了这一点。。