我在函数中有一个简单的for循环。
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
break;
}
if (/*for is not broken*/)
{
}
}
我应该写什么而不是:“/ * for not broken * /”?
我不想在循环外定义i。
我不想在循环外定义另一个变量。
答案 0 :(得分:4)
如果没有其他变量,则不能,因为代码中的if语句范围中没有可以测试的变量。
答案 1 :(得分:4)
我发现你的约束非常奇怪:
有什么理由吗?为此使用变量是正常的。代码是关于可读性的,而不是试图获得最少的代码行。
但是,如果不使用额外的变量,唯一能做的就是在for循环中处理它。当你即将休息时。
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
if (some_condition)
{
HandleBreakScenario();
break;
}
}
}
答案 2 :(得分:0)
通常使用变量:
bool didBreak = false;
for (int i = 0; i < 1; ++i)
{
didBreak = true;
break;
}
if (didBreak)
{
}
试图避免这种简单的解决方案,因为你提到的不明原因只会让你的生活更加艰难。
答案 3 :(得分:0)
最明显的答案是在循环中执行代码,然后中断,这在你的简单示例中看起来像:
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
{
/* other stuff */
break;
}
}
}
如果没有中断,通常意味着在循环外定义循环变量,当你想在循环外做其他事情时,通常会出现这个问题。这有点乱,但如果你把循环放在一个函数中,并返回true / false(我更喜欢这里的枚举,因为我个人不喜欢真/假的返回值,除非从函数名中很清楚它们是什么真的意味着。)
void LoopFuncReturnTrueOnBreak(void)
{
for( /* loop conditions */ )
{
// stuff
if ( /* condition */ )
{
return true;
}
}
return false;
}
void Func(void)
{
if (LoopFuncReturnTrueOnBreak())
{
/* other stuff */
}
}