找出是否没有打破

Find out if a for has not broken

本文关键字:是否      更新时间:2023-10-16

我在函数内有一个简单的循环。

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        break;
    }
    if (/*for is not broken*/)
    {
    }
}

我应该写什么而不是:"/*因为没有破坏*/"?

我不想在循环外定义我。

我不想在循环外定义另一个变量。

没有附加变量,您将无法进行测试。

我发现您的约束非常奇怪:

  • 我不想在循环外定义我。
  • 我不想在循环外定义另一个变量。

有什么原因吗?为此使用变量是正常的。代码是关于可读性的,而不是试图达到最少的代码。

但是,您唯一可以在不使用额外变量的情况下可以做的就是在for循环中处理它。当您要休息时。

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        if (some_condition)
        {
            HandleBreakScenario();
            break;
        }
    }
}

最明显的答案是在循环中执行您的代码,然后断开,在您的琐碎示例中看起来像:

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        {
           /* other stuff */
           break;
        }
    }
}

通常,如果您想在循环之外做其他事情,如果您没有断裂,则会发生此问题,这通常意味着在循环外定义循环变量。这有点混乱,但是如果您将循环放入函数中并返回true/fals(我更喜欢这里的枚举,因为我个人不喜欢true/false返回值,除非从函数名称中很清楚它们真的是指)。

void LoopFuncReturnTrueOnBreak(void)
{
    for( /* loop conditions */ )
    {
        // stuff
        if ( /* condition */ )
        {
            return true;
        }
    }
    return false;
}
void Func(void)
{
    if (LoopFuncReturnTrueOnBreak())
    {
        /* other stuff */
    }
}

通常您使用一个变量:

bool didBreak = false;
for (int i = 0; i < 1; ++i)
{
    didBreak = true;
    break;
}
if (didBreak)
{
}

试图避免出于晦涩的原因避免这种简单的解决方案,这使您的生活变得更加艰难。