C语言 添加逻辑运算结果是否定义行为



可以(定义的行为)将逻辑运算的结果相加(因为它们应该只是01)吗?

如果我想计算大于零的数字,我可以做这样的事情吗?(或者有更好的方法吗?

int a[3] = {1,-5,3};
int result  = 0;
for( int i = 0 ; i<3; i++)
{
result += a[i]>0;
}

引用C11,第§6.5.8章,(强调我的)

每个运算符<(小于)、>(大于)、<=(小于或等于)和>=(大于等于)如果指定的关系为真,则应产生1,如果为真,则0假。107)结果的类型为int

然后,您正在执行复合分配,其中需要

仅对于+=-=运算符,左侧操作数应为原子、限定或 指向完整对象类型的非限定指针,并且右侧应具有整数类型;或 左操作数应具有原子、限定或非限定算术类型,右操作数应具有原子、限定或非限定算术类型,右操作数应具有原子、限定或非限定算术类型。 应具有算术类型。

并且您的表达式满足约束。

所以是的,这是定义的行为。


也就是说,从语法的角度来看,您之所以安全,是因为默认运算符优先级符合您的期望。没有这样的问题,但明确(因此,肯定)永远不会受到伤害。

您可以将表达式重写为

result += ( a[i] > 0 );

相关内容

  • 没有找到相关文章

最新更新