如何解决如果flag = 0,那么执行true或false块的最佳语句是哪一条? if!flag或ifflag == 0
在此处给出的代码中:
void search(int a)
{
int i = 0,flag = 1;
for(; i < MAX; i++)
{
if(a == stack[i])
{
flag = 0;
break;
}
}
if(!flag)
printf("%d found at location %d.\n",a,i);
else
printf("%d not found in the stack.\n",a);
return;
}
哪个语句if(!flag) or if(flag == 0)
会更有效和更通用?
使用if(!flag)
被认为是错误的方法吗?
解决方法
两个版本之间几乎没有技术差异:
-
!
整数提升其操作数并返回int
,1
或0
。 -
==
根据常规算术转换(包括整数提升)对两个操作数进行平衡,然后返回int
,1
或0
。
在大多数情况下,您将获得相同的机器代码。因此,这主要是编码风格的问题,因此是主观的。
根据经验,传递给if
的任何内容都应被视为布尔类型。 C语言没有集成布尔类型,因此上述运算符返回int
而不是bool
,这将更有意义以及C ++的工作方式。 C出于向后兼容的原因而使用int
。
但是,我们可以编写C代码,就像语言具有适当的布尔集成一样-假装确实如此。 MISRA-C等各种编码标准都建议采用这种立场。但是在这种情况下,也不会影响代码。您可以用值flag
/ bool
交换标准C true
的{{1}},但是使用false
或{{1} }。
仅出于可读性考虑,我将您的示例重写为:
!flag
生成的机器代码应该相同。主要的可读性问题是缺少有意义的变量名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。