How to optimize code for multiple return value?

时间:2018-09-18 08:48:32

标签: c

Here an example of my code:

void MyFunc()
{
    if(funcA(varA) == 0)
    {
        if(funcB(varB) == 0)
        {
            if(funcC(varC) == 0)
            {
                //Success funcC
            }
            else
            {
                //error with funcC
            }
        }
        else
        {
            //error with funcB
        }
    }
    else
    {
        //error with funcA
    }
}

So the code will be like, if funcA() returns zero ONLY then execute funcB(), if funcB() returns zero ONLY then execute funcC() and so on. My question is how can I replace that nested if...else statements with some other optimized method?

4 个答案:

答案 0 :(得分:6)

要防止一堆范围,如果嵌套了,可以改为快速失败:

if(funcA(varA)) // if funcA returns 0, only then proceed
  return;

if(funcB(varB))
  return;

if(funcC(varC))
  return;

如果您要打印一些错误,可以展开if

if(funcA(varA))
{
  //error..
  return;
}

或者,如果您不需要此类信息,请使用短路单线纸,如果funcB返回funcA,则只会运行0,等等:

!funcA(varA) && !funcB(varB) && !funcC(varC);

答案 1 :(得分:2)

您的代码完全等同于

void MyFunc()
{
    if(funcA(varA)){
        //error with funcA
        return;
    }
    if(funcB(varB)){
        //error with funcB
        return;
    }
    if(funcC(varC)){
        //error with funcC
        return;
    }
    //Success funcC [sic.]
}

在需要使用funcD的情况下,存在明显的模式也可以更好地扩展。

答案 2 :(得分:2)

不要。

除非您的编码标准有此要求,否则原始代码必须足够清楚,并在需要时提供注释的地方。

在C语言中,低级优化应留给编译器。程序员的责任是使用正确的高级算法生成可读代码。

行数对旧的基本语言或javascript中的优化很重要,而不是C语言。

答案 3 :(得分:0)

尝试

void MyFunc()
{
    if(funcA(varA) == 0 && funcB(varB) == 0 && funcC(varC) == 0)
    {

    }
    else
    {

    }
}

如果您的第一个函数仅求出期望的结果,则将调用funcB,在下一个函数的情况下相同。 唯一的缺点是您无法检查其中哪个不会产生期望的结果。

相关问题