我有一个简单的函数内循环。找出一个for是否没有坏
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
break;
}
if (/*for is not broken*/)
{
}
}
我应该写什么来代替:“/ * for not not broken * /”?
我不想在循环外定义我。
我不想在循环外定义另一个变量。
我有一个简单的函数内循环。找出一个for是否没有坏
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
break;
}
if (/*for is not broken*/)
{
}
}
我应该写什么来代替:“/ * for not not broken * /”?
我不想在循环外定义我。
我不想在循环外定义另一个变量。
最明显的答案就是在循环中执行代码,再突破,这在你的小例子只是看起来像:
当你想要做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 */
}
}
因为代码中的if语句的范围中没有可以测试的变量,所以不能没有附加变量。
通常你使用一个变量:
bool didBreak = false;
for (int i = 0; i < 1; ++i)
{
didBreak = true;
break;
}
if (didBreak)
{
}
试图避免你提到的晦涩的原因,这简单的解决办法只是让你的生活困难。
我找到你的约束很奇怪:
这是什么原因?为此使用变量是正常的。代码是关于可读性的,而不是试图实现最少的代码行。
但是你可以不使用额外的变量就可以做的唯一事情就是在for循环中处理它。当你即将破裂时。
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
if (some_condition)
{
HandleBreakScenario();
break;
}
}
}
原因:我在一个复杂的函数中反复使用这个模式,我试图阻止在函数中向我的范围添加更多变量。 –
你的回答是对的,因为其实我需要做的事情没有坏(对不起,我的错误,我编辑它。)。 –
其实我需要做些事情,如果没有中断。你的答案(使用函数)正是我所需要的。 –
请接受答案,如果它给你你想要的东西,当然如果你真的需要在环没有中断时发生什么事,你应该把它放在你的问题中。 –