可读条件逻辑没有不必要的执行?

Ada*_*m S 5 c

我正在努力使下面的代码既可读又具有高效性.我想避免任何不必要的呼叫,getFlagB()同时也不要重复任何事情.下面我写了两种方法,每种方法都满足这些标准中的一种.

假设getFlagB()不能以任何方式改变.有没有办法在C中同时满足这两个要求,而不创建额外的标志?

// Method 1 - doesn't repeat code blocks but calls getFlagB even when it may not need to
void foo(int flagA)
{
    int flagB;
    getFlagB(&flagB);

    if(flagA & flagB)
    {
        // Code block 0
    }
    else
    {
        // Code block 1
    }
}

// Method 2 - doesn't no extra call to getFlagB, but repeats code block 1
void foo(int flagA)
{
    int flagB;

    if(flagA)
    {
        getFlagB(&flagB);
        if(flagB)
        {
            // Code block 0
        }
        else
        {
            // Code block 1
        }
    }
    else
    {
        // Code block 1
    }
}
Run Code Online (Sandbox Code Playgroud)

Pot*_*ter 1

在 之前显式计算条件if

_Bool condition = flagA;

if ( flagA ) { /* First decide what to do. */
    _Bool flagB;
    GetFlagB( & flagB );

    condition = flagA && flagB; /* Prefer && over &. */
}

if ( condition ) { /* Then do it. */
    Code1();
} else {
    Code2();
}
Run Code Online (Sandbox Code Playgroud)