由于不值得一提的原因,我想知道布尔表达式是否有标准定义值。例如。
int foo () {
return (bar > 5);
}
背景是我担心我们的团队将 TRUE 定义为与 1 不同的东西,并且我担心有人可能会这样做:
if (foo() == TRUE) { /* do stuff */ }
我知道最好的选择就是简单地做
if (foo())
但你永远不知道。
布尔表达式是否有定义的标准值或者由编译器决定?如果有的话,标准值是否包含在C99中? C89呢?
一个运算符,例如==
, !=
, &&
, and ||
如果表达式为真,则生成布尔值,结果为 1;如果表达式为假,则结果为 0。这个表达的类型是int
.
所以如果TRUE
宏未定义为1
,像上面这样的比较将会失败。
当在布尔上下文中计算表达式时,0 计算结果为 false,非零计算结果为 true。所以为了安全起见,TRUE
应定义为:
#define TRUE (!0)
正如评论中提到的,如果您的编译器兼容 C99,您可以#include <stdbool.h>
并使用true
and false
.
根据C99:
6.5.3.3(一元算术运算符)
逻辑非运算符的结果!
为 0,如果
其操作数的值比较不等于 0,如果其值不等于 1
操作数比较等于 0。结果具有类型int
。这
表达!E
相当于(0==E)
.
6.5.8(关系运算符)
各运营商<
(少于),>
(比...更棒),<=
(小于或等于),并且>=
(大于或等于)
如果指定的关系为真,则应产生 1;如果为假,则应产生 0。
结果有类型int
.
6.5.9(相等运算符)
The ==
(等于)和!=
(不等于)运算符是
类似于关系运算符,除了它们的较低值
优先。如果指定的话,每个运算符都会产生 1
关系为 true,如果为 false,则为 0。结果有类型int
.
6.5.13(逻辑与运算符)
The &&
如果两个操作数比较,运算符应产生 1
不等于0;否则,它产生 0。结果具有类型int
.
6.5.14(逻辑或运算符)
The ||
如果任一操作数比较,运算符应产生 1
不等于0;否则,它产生 0。结果具有类型int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)