In c, in bool, true == 1 and false == 0?
为了澄清,我发现了类似的答案,但对于C++,我有一个新的编码,所以我不确定它是否适用于C。
- 可以说是在C中使用布尔值的副本
- 表达式true == 1和false == 0都是正确的。(而true == 2不是真的)。如果这不是你的意思,你能澄清这个问题吗?
- @M.M哦,是的,很抱歉,现在我看到我刚刚写的东西了。我的意思是,当你想在"while"或"if"中使用某物时,你是使用(比如说)while(blabla==0)还是其他什么东西。
- while(X)相当于while( (X) != 0 )。
- 在C中使用"真"和"假"的可能重复
更准确地说,任何不是0的东西都是正确的。
所以1是正确的,但2和3也是正确的。等。
- 这个问题似乎涉及到特定的实体:booltrue和false,而不是"使if成为真正的分支"的一般值集。
- @蚂蚁,如果他不说他是编程新手,我会去的。但很容易看出这就是他的意思。
- 取决于你所说的"是真的"。标识符true是中定义的宏,其值具体为1(其类型为int)。另一方面,任何非零值在用作条件时都被视为真。这就是为什么像if (b == true)这样的东西是危险的;只需写if (b)。
- 这就是为什么iMo的bool只用于设置值,而不是测试。对于测试,它是C语言中固有的,没有任何形式的定义。我再进一步说:bool类型是完全无用的,除了可能区别于true是-1的语言,但同样适用:0是假的,其他的都是真的。
- 更准确地说,任何与0比较的值都是错误的。空指针不能为0,但与0相等,因此与if(null_pointer)中的情况一样为假。
你忘了说你关心的是哪个版本的C。假设是这样的:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
正如您通过阅读规范所看到的,true和false的标准定义是1和0,是的。
如果你的问题是关于C的不同版本,或者关于true和false的非标准定义,那么问一个更具体的问题。
- 又一个奇怪的怪癖…true是一个int,而不是bool
- 谢谢,这确实有帮助,正如有人指出的,我没有很好地指定问题,但你还是设法回答了,再次谢谢!,对不起,我真的不知道该在哪里检查哪个版本:/我现在真的是绿色的:/
- N1256是1999年ISO C标准的草案。最新标准为C11;最新草案为N1570。c99将_Bool和添加到语言中(当然保留在c11中)。
- @基思汤普森:的确。没有任何指导,从原来的海报,我只是选择了第一个标准,搜索出现。谢谢你的链接。
- @ericlipper bool是_Bool类型的typedef,该类型是与任何其他整数类型不同的整数类型。true是一个扩展到int1的宏。如果你找不到的话,我可以给每一个章节。
- @M.M:啊,我看到你现在所做的区别了,它是表达式的规范类型和与类型兼容的一组值之间的区别。我收回我的反对意见。顺便说一句,c也有类似的区别:尽管int类型本身不可隐式转换为任何枚举类型,但文字0可分配给任何枚举类型的变量。
- @m.m扩展到整数常数1的"true"(c11 7.18)或其他什么东西要求true是int类型,还是可以是unsigned类型,甚至是其他整数类型?
- @Chux关于"整数常量"的定义,请参见N1570 6.4.4.1,再加上用于确定类型的表。在C中,"整数常量"是C++所称的"整数文字"(我认为后者是一个更直观的术语)。我认为很明显,"整型常数1"是指1,尽管我知道你在哪里寻找一个回旋的空间。
- @M.M我从来没有考虑过true的类型。spec在不同的地方使用"integer constant 1"(未格式化1)和"integer constant EDOCX1"(格式化1)。对于true,它是未格式化的1。我认为在规范的某个地方,格式是信息性的,而不是规范性的,所以这意味着很少。