Easy C enum问题

时间:2010-02-27 17:19:02

标签: c enums

我刚刚开始使用C,并且我被要求回答一些编码练习,其中出现以下代码:

typedef enum {
  false = 0,
  true = 1
} Bool;

有人可以提供一个简短而明确的解释吗?

非常感谢。

6 个答案:

答案 0 :(得分:10)

它真的做了两件事;你可以把它分解成这样的东西:

enum _bool {
   false = 0,
   true = 1
};

并且:

typedef enum _bool Bool;

此代码创建一个新的枚举类型,然后使用typedef为其提供方便的名称。它允许您在代码中的其他位置使用名为Bool的新“类型”,并为其指定值falsetrue。这是一个简单的用例:

Bool logical_not(Bool in)
{
    if (in == true)
        return false;
    else
        return true;
}

答案 1 :(得分:4)

它只是枚举的定义,这种类型只能假设一些离散数量的值,即括在这些括号中的值。这些值中的每一个都有一个名称,您可以在以后使用它来引用它。如果您只指定值的名称而不是实际值,编译器将按递增顺序为您设置它们,从第一个元素的零开始。

有关详细信息,请参阅wiki article有关枚举类型(特别是其C section)。

该特定枚举定义了一个布尔类型,即只能采用两个值的类型:true和false,其中false =!true。布尔值在编程中经常使用,例如作为标志来指示是否满足条件,实际上许多语言将它们包括为本机类型(例如,C ++和C99,这样做)。

顺便说一下,定义枚举这个:

enum Bool
{
    false = 0,
    true = 1
};

就足够了;但是,由于C的设计是如何使用此代码声明Bool类型的变量,因此您需要在Bool之前始终放置 enum 关键字:

enum Bool myFlag=true;

使用typedef技巧,您可以定义以这种方式创建的匿名枚举,然后为它提供名为Bool的别名;这样你就可以做到:

Bool myFlag=true;

答案 2 :(得分:1)

由于C没有布尔数据类型,因此您的代码通过使用typedef来模拟一个。

您可以按如下方式使用新的用户定义数据类型:

Bool find_key_in_array() {
        Bool found = false; // assume not found.

        // do searching and set found suitably.    

        return found;
}

int main()  {

        Bool result = find_key_in_array();

        return 0;
}

答案 3 :(得分:1)

它为true和false提供可读的文字。但你可以猜到。

它是如何工作的?枚举(关键字enum)连接一系列具有整数值的标记,typedef ... Bool;使Bool成为枚举的类型名称。

总的来说,我会劝阻这个成语,因为你以后可能会想要使用

int flag=false;
// something happens that might change the setting of flag that *doesn't* use the enum
if (flag == true) {
   //...
}

如果flag设置为2,则无法达到预期效果。

如果长时间使用c,则零为假,其他一切都是真的,解释将是第二天性。

答案 4 :(得分:1)

枚举是一种具有有限数量符号值的整数类型。这允许您执行以下操作:

Bool finish = false;

while (finish != true)
{
    ...
}

答案 5 :(得分:0)

从我记忆中来看:

这声明了一个枚举,然后将名称 Bool 与此枚举相关联(通过 typedef )。 您可以获得有关C枚举here

的更多信息