返回C中布尔表达式的值
由于不值得一提的原因,我想知道布尔表达式是否有标准的定义值。 例如
int foo () { return (bar > 5); }
上下文是我担心我们的团队将TRUE定义为不同于1的东西,我担心有人会这样做:
if (foo() == TRUE) { /* do stuff */ }
我知道最好的选择就是做
if (foo())
但你永远不知道。
布尔表达式是否有定义的标准值,还是由编译器决定? 如果有的话,标准值是否包含在C99中? 怎么样C89?
一个运算符,如==
, !=
, &&
和||
导致布尔值的结果将表达式中的1表示为true,如果表达式为false则为0。 这种表达的类型是int
。
因此,如果TRUE
宏未定义为1
,则上述比较将失败。
在布尔上下文中计算表达式时,0的计算结果为false,非零的计算结果为true。 所以为了安全起见, TRUE
应定义为:
#define TRUE (!0)
正如评论中提到的,如果您的编译器符合C99,则可以#include
并使用true
和false
。
根据C99 :
6.5.3.3(一元算术运算符)
逻辑否定运算符的结果
!
如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int
。 表达式!E
等价于(0==E)
。
6.5.8(关系运算符)
如果指定的关系为真,则每个运算符
<
(小于),>
(大于),<=
(小于或等于)和>=
(大于或等于)将产生1,如果是,则为0假。 结果是int
类型。
6.5.9(平等运营商)
==
(等于)和!=
(不等于)运算符类似于关系运算符,除了它们的优先级较低。 如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。 结果是int
类型。
6.5.13(逻辑AND运算符)
如果两个操作数的比较不等于0,
&&
运算符将产生1; 否则,它产生0.结果类型为int
。
6.5.14(逻辑OR运算符)
||
如果操作数的任何一个比较不等于0,则运算符应该为1; 否则,它产生0.结果类型为int
。
C
编程语言没有定义布尔值。 传统上, C
编程语言使用integer
类型来表示布尔数据类型。
C中的布尔值:
0 = false` Any other value = true`
通常人们会使用1
表示真实。
C99引入了其他C
派生中不可用的_Bool
数据类型。请在此处查看维基百科链接。 此外,出于兼容性原因,添加了新的标头stdbool.h
。 这个头允许程序员以相同的方式使用boolean
类型,就像在C++
语言中一样。
要在C
使用bool
,我们可以使用如下的enum
。
enum bool { false, true }; bool value; value = bool(0); // False value = bool(1); // True if(value == false) printf("Value is false"); else printf("Value is true");
另外,相关的堆栈溢出问题是bool本地C类型吗?