在 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 == 1
和false == 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
通过阅读规范可以看出,true
和false
的标准定义是1和0,是的。
如果您的问题是关于 C 的不同版本,或关于 true
和 false
的非标准定义,请提出更具体的问题。
【讨论】:
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
是真的,但2
、3
... 等等也是如此。
【讨论】:
这个问题似乎是指特定实体:bool
true
和 false
,而不是“使 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?的主要内容,如果未能解决你的问题,请参考以下文章
c++ 中 BOOL与bool TRUE与true FALSE与false 区别 (转载)