在 c 中,在 bool 中,true == 1 和 false == 0?

Posted

技术标签:

【中文标题】在 c 中,在 bool 中,true == 1 和 false == 0?【英文标题】:In c, in bool, true == 1 and false == 0? 【发布时间】:2017-02-21 20:54:16 【问题描述】:

为了澄清我找到了类似的答案,但对于 C++,我对编码有点陌生,所以我不确定它是否也适用于 C。

【问题讨论】:

可以说是Using boolean values in C的副本 表达式true == 1false == 0 都是真的。 (而true == 2 不是真的)。如果这不是你的意思,你能澄清一下这个问题吗? @M.M 哦,是的,对不起,现在我看到了我刚刚写的内容。我的意思是当你想在 while 或 if 中使用某些东西时,你是使用(比如说)while(blabla == 0) 还是其他东西。 while(X) 等价于while( (X) != 0 ) Using true and false in C的可能重复 【参考方案1】:

您忽略了您关注的是哪个版本的 C。假设是这个:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

通过阅读规范可以看出,truefalse的标准定义是1和0,是的。

如果您的问题是关于 C 的不同版本,或关于 truefalse非标准定义,请提出更具体的问题。

【讨论】:

C 的另一个奇怪的怪癖...true 是一个 int,而不是一个 bool 谢谢,这确实有帮助,正如有人指出我没有很好地说明问题,但你还是设法回答了,再次感谢! ,对不起,我真的不知道在哪里检查哪个版本:/我现在真的很绿:/ N1256 是 1999 年 ISO C 标准的草案。最新标准为C11;最新的草稿是N1570。 _Bool<stdbool.h> 被 C99 添加到语言中(当然在 C11 中保留)。 @KeithThompson:确实。在原始海报中没有任何指导的情况下,我只是选择了搜索出现的第一个标准。感谢您的链接。 @EricLippert bool 是类型 _Bool 的 typedef,它是一个不同于任何其他整数类型的整数类型。 true 是一个扩展为 int 1 的宏。如果你找不到,我可以给每一个章节和诗句。【参考方案2】:

更准确地说,任何不是0 的东西都是真的。

所以1 是真的,但23 ... 等等也是如此。

【讨论】:

这个问题似乎是指特定实体:booltruefalse,而不是“使 if 成为真正的分支”的一般值集。 @AnT 如果他没有说他是编程新手,我会参与其中。但很容易看出这就是他的意思。 取决于你所说的“是真的”是什么意思。标识符true<stdbool.h>中定义的宏,其值具体为1(其类型为int)。另一方面,任何非零值在用作条件时都被视为真。这就是为什么像if (b == true) 这样的东西是危险的;直接写if (b)吧。 这就是为什么 IMO bool 仅用于设置值,而不是测试。对于测试,它是 C 语言中固有的,没有任何正式定义。我会更进一步:bool 类型完全没用,除非可能与那些 true-1 的语言区分开来,但同样适用:0 是假的,其他都是真的。 更准确地说,比较等于 0 的任何东西都是错误的。空指针可能不是 0,但与 0 相等,因此为 false,如 if(null_pointer)

以上是关于在 c 中,在 bool 中,true == 1 和 false == 0?的主要内容,如果未能解决你的问题,请参考以下文章

bool在c语言中是啥意思?

布尔类型和三目运算符

c++ 中 BOOL与bool TRUE与true FALSE与false 区别 (转载)

如何在c中将bool的输出从1和0转换为true或false [重复]

跟我一起学C++之从C到C++(bool类型)

c语言bool啥意思