【发布时间】:2015-09-25 15:19:50
【问题描述】:
我有时发现在整数表达式中使用布尔值可以使代码更短更简单。 比如我更喜欢
int n_items = has_a + has_b + has_box * 5;
结束
int n_items = (has_a ? 1 : 0) + (has_b ? 1 : 0) + (has_box ? 5 : 0);
这应该是安全的,因为 false==0 和 true==1。有没有应该知道的风险或陷阱?
对于布尔值,我指的是 C99 布尔值或布尔表达式,如 a>b。当然,我必须注意实际上不是布尔值的值,例如 isdigit() 的返回值。
【问题讨论】:
-
这是编写非常混乱的代码的好方法。
-
没有布尔值这样的东西。 C只有整数,所以这个问题没有意义。 “布尔值”已经是整数。 C99 中有
_Bool,但它仍然保持1或0的无符号整数 值。 -
@meagar:C 中有一个数据类型
_Bool/bool。然而,它实际上是一个无符号整数类型,其值为0和1. -
布尔表达式不会产生
bool结果,而是产生int(兼容性)。 -
@Emi1303 C 具有
_Bool布尔类型。