我刚开始ç最近,我被要求回答在其中出现了下面这段代码一些编码练习:易ç枚举问题
typedef enum {
false = 0,
true = 1
} Bool;
可能有人请提供一个简单明了的解释那?
非常感谢。
我刚开始ç最近,我被要求回答在其中出现了下面这段代码一些编码练习:易ç枚举问题
typedef enum {
false = 0,
true = 1
} Bool;
可能有人请提供一个简单明了的解释那?
非常感谢。
它确实在做两件事;你可以打破它是这样的:
enum _bool {
false = 0,
true = 1
};
和:
typedef enum _bool Bool;
这段代码创建一个新的枚举类型,然后使用typedef
给它一个方便的名称。它会让你在你的代码的其他地方使用一个叫做Bool
的新“类型”,并给它赋值false
和true
。这里有一个简单的用例:
Bool logical_not(Bool in)
{
if (in == true)
return false;
else
return true;
}
显然,提交的代码不会这样做,因为_bool不存在于原始代码中。我在这里是因为我试图找到一些关于“unnamed枚举”的文档,这对我来说是无稽之谈解释这一点需要成为答案的一部分 – 2018-01-18 22:31:33
枚举不需要标签或typedef; enum {A,B,C}是有效的代码,你想问什么? – 2018-01-19 05:56:46
由于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;
}
它提供可读文本真假。但你可以猜到。
它是如何工作的?枚举(关键字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,那么零是假的,其他的一切都是正确的解释将是第二性质。
枚举是一个整数类型,它具有有限数量的符号值。这允许你做这样的事情:
Bool finish = false;
while (finish != true)
{
...
}
从我记得:
此声明的枚举,然后相关联的名字,布尔,这个枚举(通过的typedef)。 你可以得到更多关于C枚举的信息here
这只是一个枚举的定义,一个只能假设离散数值的类型,即括在这些括号内的类型。这些值中的每一个都有一个名称,您可以稍后使用它来引用它。如果只指定值的名称而不指定实际值,则编译器将按升序对其进行设置,从第一个元素的零开始。
有关枚举类型(特别是其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;
需要功课标签吗? – 2010-02-27 17:37:55
每次有人问这样的问题并且开始回答时,他知道在他发布答案之前,至少会有另外5个人已经发布了他们自己的答案,希望他可以轻松得到100分。 :P – 2010-02-27 17:43:20
因此,有无数用户回答这个问题。 (无数人在实现重复后删除了自己,所以你只能在这里看到6):p – kennytm 2010-02-27 19:45:31