我在现有的代码中发现了一个空的for语句,我想知道它的作用是什么,它是否“安全”。这只是感觉不对。
for(;;)
{
//some if statements and a case statement
}
谢谢!
答案 0 :(得分:17)
这是创建无限循环的一种方法。它是一个常规for
循环,但具有空的初始化,条件和增量表达式。因为条件表达式是无操作,所以循环永远不会退出。假设它有一个终止条件(break
或return
语句[或者甚至是goto
,我认为]),它完全是“安全的”。
就个人而言,我更喜欢用while
s:
while (true)
{
//some statements and a case statement
}
(因为for
用于迭代而while
用于重复)。
但是,在阅读this question(由@jailf链接)之后,我现在更喜欢while (42) { ... }
。
答案 1 :(得分:5)
它等同于拥有无限循环:
while (true) {
}
这很安全。您需要提供外部退出机制。 I.E.,在for
循环中休息。
答案 2 :(得分:4)
这是indefinite or infinite loop的常见习语。如果您正在寻找一个开头不是有限的条件 - 例如用户输入或未知大小的文件结尾,那么您故意可能有一个无限循环。您可能也会看到while(1)
或while(true)
同样的事情。它说'做这件事{无论},直到没有......'
在该循环结构内部可能是条件和break statement,例如:
for(;;)
{
Console.Write("Enter your selection (1, 2, or 3): ");
string s = Console.ReadLine();
int n = Int32.Parse(s);
switch (n)
{
case 1:
Console.WriteLine("Current value is {0}", 1);
break;
case 2:
Console.WriteLine("Current value is {0}", 2);
break;
case 3:
Console.WriteLine("Current value is {0}", 3);
break;
default:
Console.WriteLine("Sorry, invalid selection.");
break;
}
if(n==1 || n==2 || n==3)
break; // out of the for(;;) loop
}
关键是否“安全”是弄清楚你如何离开那个循环的逻辑,或者你的无限循环将成为一个无意的无限循环和一个错误。
更多信息来自for
的{#3}}
答案 3 :(得分:3)
答案 4 :(得分:3)
与while (true) { /**/ }
...无限循环相同,直到break
或return
或类似情况发生。
所有它真的“确实”看起来很难看IMO;)
答案 5 :(得分:3)
在SO上多次询问过这个问题。关于该主题的最佳讨论在以下链接:
Is "for(;;)" faster than "while (TRUE)"? If not, why do people use it?
答案 6 :(得分:2)
这是无限循环的有效语法。你需要“打破”;出来的。这在C ++日IIRC中很受欢迎。
就安全而言,你对此感到“错误”是正确的。通常情况下会出现“if”条件,您可以决定是继续还是中断循环。如果您不验证所有执行路径,则很可能导致无限循环。我会尝试以其他方式这样做。
答案 7 :(得分:2)
它有时被称为“永远”循环,因为它就是它的作用。在循环中查找break;
或return;
语句,或者将循环包装在try / catch块中。就个人而言,我试着避免那种事情。
答案 8 :(得分:1)
是否有break
,return
或throw
声明?这是唯一的出路。安全吗?这取决于你是否在无限循环中感到安全。有些应用需要一个。
答案 9 :(得分:1)
这在没有操作系统的嵌入式系统上非常常见。如果您的程序终止,那么没有基础系统可以解决这个问题。所以大多数情况下都存在一个巨大的无限循环,其中大部分操作都在处理中。