【问题标题】:Simplifying if-else-if ladder such that the function calls are made only once简化 if-else-if 阶梯,使得函数调用只进行一次
【发布时间】:2017-08-23 17:37:59
【问题描述】:

你会如何简化下面的 if-else-if 阶梯,使得函数调用只进行一次?

if (Condition A){
    A();
}
else {
    if (Condition B) {
        A();
    }
} 

【问题讨论】:

  • if (A || B) ?
  • @AdiC 当然是完全可选的!
  • 好吧,有些人建议稍等片刻,接受第一个答案,以鼓励其他答案..
  • 事实上,我非常鼓励提问者不要在至少 24 小时内将任何答案标记为正确——这应该是一个规则。很多时候,早期的答案可能会以某种有限的方式起作用,然后会出现更好、更完整的答案。
  • @AdiC 考虑What to do with user asking for upvote and accept? OP 这里已经存在 2 年了。已标记评论。

标签: c if-statement optimization


【解决方案1】:

改成:

if ((Condition A) || (Condition B)) {
    A();
}

如果Condition AtrueCondition Btrue,您希望函数A() 运行,您可以使用|| (OR) 运算符。如果任一条件为true,则返回true

【讨论】:

  • 如果AB 有副作用,这甚至会起作用。
  • 因为快捷方式的作用:)
  • @Eugene Sh.恐怕不行。编辑前的版本无法编译,编辑后的版本使您的评论无效
  • 我假设它是一个伪代码。也不知道为什么编辑使它无效。
  • @PeterJ_01 我看不出我的迂腐水平。
【解决方案2】:

不幸的是,一般来说,你不能简化这个 if 的“树”。如果他的第二个(或下一个)条件有副作用。所以考虑一下为什么有人这样做总是好的。

例子:

if(readbytefromUART() == 'b' || readbytefromUART() == 'c') .......
/* if condition ... == 'b' is met , there is no second call to the function

或更常见的代码错误

if(readbytefromUART() == 'b' && readbytefromUART() == 'c') .......
/* if condition ... == 'b' is not met , there is no second call to the function

https://ideone.com/cCO9MM

另一个答案中提出的语法

if (cond1) || (cond2) {

在 C 中是非法的,它不会编译

【讨论】:

  • 上一个例子中括号放错地方了。
  • 不,但这让它变得无趣。此外,它应该是对该答案的评论,现在(一个)其他答案中没有这样的代码。
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多