如何删除这个重复的else语句?

时间:2013-09-05 03:05:34

标签: c compiler-construction

这是伪代码:

if A
  then B
  if C
    then D
  else
    then E
else 
  then E

B,D,E包括几行。我们可以看到这里的“其他”重复了两次。如何删除重复的代码并维护该功能?不要使用“goto”。

5 个答案:

答案 0 :(得分:1)

让它们成为一种功能。即。

void E() {

... Your several lines of code here

}

答案 1 :(得分:1)

if A
  then B
  if C
    then D
if not (A and C)
  then E

if A
  then B
if (A and C)
  then D
else
  then E

答案 2 :(得分:1)

正如Ed Heal建议的那样,只需要做一个功能。

有时这是不实际的,因为需要传递大量变量,而且你真的只需要从两个地方调用它。

在这种情况下,您设置一个标志:

needE = 1

if A {
  B
  if C {
    D
    needE = 0
  }
}

if needE {
  E
}

这可能比以后重复逻辑的其他解决方案更可取,因为有时您的逻辑会产生副作用。你当然可以计算一次逻辑并存储结果,但这意味着更多的变量。

答案 3 :(得分:1)

使用布尔逻辑,这是一种方法:

if A
  then B
if A and C
  then D
if !A or !C
  then E

答案 4 :(得分:0)

“隐藏的转到”怎么样?这样,您至少可以获得最少的必要布尔评估:

do
{
  if (A)
  {
    B;

    if (C)
    {
      D;

      break;
    }
  }

  E;
} while (0);