微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果flag = 0,那么执行true或false块的最佳语句是哪一条? if!flag或ifflag == 0

如何解决如果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)被认为是错误方法吗?

解决方法

两个版本之间几乎没有技术差异:

  • !整数提升其操作数并返回int10
  • ==根据常规算术转换(包括整数提升)对两个操作数进行平衡,然后返回int10

在大多数情况下,您将获得相同的机器代码。因此,这主要是编码风格的问题,因此是主观的。

根据经验,传递给if的任何内容都应被视为布尔类型。 C语言没有集成布尔类型,因此上述运算符返回int而不是bool,这将更有意义以及C ++的工作方式。 C出于向后兼容的原因而使用int

但是,我们可以编写C代码,就像语言具有适当的布尔集成一样-假装确实如此。 MISRA-C等各种编码标准都建议采用这种立场。但是在这种情况下,也不会影响代码。您可以用值flag / bool交换标准C true的{​​{1}},但是使用false或{{1} }。

仅出于可读性考虑,我将您的示例重写为:

!flag

生成的机器代码应该相同。主要的可读性问题是缺少有意义的变量名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。