这两个枚举声明之间有什么区别 - C?

时间:2011-02-18 08:10:59

标签: c enums declaration

我已经开始学习C并且已经达到了枚举的程度。 enum基本上是DEFINE / const int的首选替代品,对吗?

这两个声明之间有什么区别?

#include <stdio.h>

// method 1
enum days {
    Monday,
    Tuesday
};

int main()
{
    // method 1
    enum days today;
    enum days tomorrow;

    today    = Monday;
    tomorrow = Tuesday;

    if (today < tomorrow)
        printf("yes\n");

    // method 2
    enum {Monday, Tuesday} days;

    days = Tuesday;
    printf("%d\n", days);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

如果要声明的变量只能在相关的有限范围内获取值,则应优先使#define / const int优先使用枚举互斥的值。所以一周的日子是一个好的示例,但这将是示例:

enum AboutMe
{
    myAge = 27,
    myNumberOfLegs = 2,
    myHouseNumber = 54
};

回到你的代码示例;第一个方法声明一个名为enum days类型。您可以使用此类型声明任意数量的变量。

第二种方法声明类型为enum { ... }单变量。您不能声明该类型的任何其他变量。

答案 1 :(得分:1)

作为一个类型我会写第一个

typedef enum { Monday, Tuesday } days_t;

并将声明作为

days_t day = Tuesday;

我觉得第二种方法没用。

答案 2 :(得分:0)

不同之处在于,在第一种情况下,days是枚举的名称。 因此,您可以通过

访问定义
enum days today;

enum days =清除哪个枚举,名为days

的枚举

今天=变量名称

在第二种情况下,days是未命名枚举的变量。

enum {Monday, Tuesday} days;

enum {Monday,Tuesday} =未命名的枚举,因此需要使用curl括号{}

进行定义

days =变量名称