我刚刚开始使用C,并且我被要求回答一些编码练习,其中出现以下代码:
typedef enum {
false = 0,
true = 1
} Bool;
有人可以提供一个简短而明确的解释吗?
非常感谢。
答案 0 :(得分:10)
它真的做了两件事;你可以把它分解成这样的东西:
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;
}
答案 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
的更多信息