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