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

标签 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
    }
}

最佳答案

你可以这样做:

void foo(int flagA)
{
    int flagB;

    if(flagA)
    {
        getFlagB(&flagB);
        if(flagB)
        {
            // Code block 0
            return ;
        }
    }
  // code block 1
}

关于c - 没有不必要执行的可读条件逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757122/

相关文章:

c - 为什么在此 C 反向 shell 代码中需要 dup2?

c - 这个现代编程面试挑战的解决方案不可靠吗?

从 unix 移植到 linux 的 C-Motif 代码项目

c - 从格式未知的文本文件中读取

c++ - 使用 Unicode 字符串文字 Stringify 宏

c - 当我在 int 中输入任何字符时,它会使其等于 8

c++ - CUDA 将 GpuMat 的 c 数组传递给内核

c - 在 C/C++ 中传递和修改多维数组

c - 添加一个项目到链表的末尾 --> 错误

c - 变量函数参数传递相关说明 "printf"