查看 for 是否未中断

Find out if a for has not broken

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

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

我应该写什么来代替:“/* for is not broken*/”?

我不想在循环外定义 i。

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

如果没有额外的变量,你不能,因为在你的代码中的 if 语句范围内没有你可以测试的变量。

通常你使用一个变量:

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

出于您提到的不明原因而试图避免这种简单的解决方案只会让您的生活更加艰难。

我觉得你的约束很奇怪:

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

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

但是在不使用额外变量的情况下,您唯一可以做的就是在 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;
        }
    }
}

通常当您想在循环外执行其他操作时会出现此问题,如果您没有 break,这通常意味着在循环外定义循环变量。这有点乱,但是如果你把循环放在一个函数中,并且 return true/false (我更喜欢这里的枚举,因为我个人不喜欢 true/false return 值,除非从函数名中可以清楚地看出它们 真正 的意思)。

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

void Func(void)
{
    if (LoopFuncReturnTrueOnBreak())
    {
        /* other stuff */
    }
}