2010-02-27 90 views
5

我刚开始ç最近,我被要求回答在其中出现了下面这段代码一些编码练习:易ç枚举问题

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

可能有人请提供一个简单明了的解释那?

非常感谢。

+0

需要功课标签吗? – 2010-02-27 17:37:55

+1

每次有人问这样的问题并且开始回答时,他知道在他发布答案之前,至少会有另外5个人已经发布了他们自己的答案,希望他可以轻松得到100分。 :P – 2010-02-27 17:43:20

+1

因此,有无数用户回答这个问题。 (无数人在实现重复后删除了自己,所以你只能在这里看到6):p – kennytm 2010-02-27 19:45:31

回答

11

它确实在做两件事;你可以打破它是这样的:

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; 
} 
+0

显然,提交的代码不会这样做,因为_bool不存在于原始代码中。我在这里是因为我试图找到一些关于“unnamed枚举”的文档,这对我来说是无稽之谈解释这一点需要成为答案的一部分 – 2018-01-18 22:31:33

+0

枚举不需要标签或typedef; enum {A,B,C}是有效的代码,你想问什么? – 2018-01-19 05:56:46

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; 
} 
1

它提供可读文本真假。但你可以猜到。

它是如何工作的?枚举(关键字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,那么零是假的,其他的一切都是正确的解释将是第二性质。

1

枚举是一个整数类型,它具有有限数量的符号值。这允许你做这样的事情:

Bool finish = false; 

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

从我记得:

此声明的枚举,然后相关联的名字,布尔,这个枚举(通过的typedef)。 你可以得到更多关于C枚举的信息here

4

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

有关枚举类型(特别是其C section)的更多信息,请参见wiki article

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

顺便说一句,定义枚举此:

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

就足够了;然而,因为如何下设计申报bool类型与此代码的变量,你将需要布尔之前把总是枚举关键字:

enum Bool myFlag=true; 

使用typedef的伎俩,相反,你定义以这种方式创建匿名枚举,然后为其提供一个名为Bool的别名;这样你就可以简单地做到:

Bool myFlag=true;