Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C布尔作为整数时是否存在任何风险或缺陷_C_Boolean - Fatal编程技术网

使用C布尔作为整数时是否存在任何风险或缺陷

使用C布尔作为整数时是否存在任何风险或缺陷,c,boolean,C,Boolean,我有时发现在整数表达式中使用bool可以使代码更短、更简单。 例如,我更喜欢 int n_items = has_a + has_b + has_box * 5; 结束 这应该是安全的,因为false==0,true==1。有没有什么风险或问题是你应该知道的 对于布尔,我指的是C99布尔或布尔表达式,如a>b。当然,我必须注意那些不是布尔值的值,比如isdigit的返回值。bool的风险之一是它的语义与int不同,许多程序已经使用bool作为int的别名,并且没有使用stdbool的C99(b

我有时发现在整数表达式中使用bool可以使代码更短、更简单。 例如,我更喜欢

int n_items = has_a + has_b + has_box * 5;
结束

这应该是安全的,因为false==0,true==1。有没有什么风险或问题是你应该知道的

对于布尔,我指的是C99布尔或布尔表达式,如a>b。当然,我必须注意那些不是布尔值的值,比如isdigit的返回值。

bool的风险之一是它的语义与int不同,许多程序已经使用bool作为int的别名,并且没有使用stdbool的C99(bool typedef)。例如。,为C89开发的程序或与以下内容兼容的程序:

typedef int bool

例如,该表达式可能具有不同的含义:

int a = (bool) 0.5;  // if bool is _Bool, evaluates to 1
                     // if bool is int, evaluates to 0
这会产生一些非常讨厌的bug


另一方面,一个比a更短的形式?1:0是惯用的!!has_a.

这是编写非常混乱的代码的好方法。没有布尔值这样的东西。C只有整数,所以这个问题没有意义。布尔数已经是整数了。C99中有,但它仍然保留1或0的无符号整数值。@meagar:C中有一个数据类型_Bool/Bool。但是,它实际上是一个值为0和1的无符号整数值类型。布尔表达式不产生Bool结果,但具有int兼容性。@Emi1303 C具有_Bool布尔类型。
int a = (bool) 0.5;  // if bool is _Bool, evaluates to 1
                     // if bool is int, evaluates to 0