在while循环的条件下放置分号后会发生什么?

时间:2012-01-02 22:50:55

标签: c# loops syntax while-loop

我偶然遇到过这样的情况:

while (true) {

while (age == 5); //What does this semi-colon indicate?
//Code
//Code
//Code

}

while(true)表示这是一个无限循环,但我无法理解while条件完成后的分号是什么,是不是等于这个?:

while (age == 5) { }

//Code
//Code

换句话说,它是否意味着while循环无用,因为它永远不会进入块?

4 个答案:

答案 0 :(得分:22)

while (age == 5);     // empty statement

相当于

while (age == 5) { }  // empty block

更新:即使没有正文执行,也不意味着循环终止。相反,它将简单地循环遍历条件(,它可能具有或依赖于副作用),直到满足为止。以下是带有goto的等效表单:

loop:
if (age == 5)
  goto loop;

此构造有时用作busy-loop等待标记在线程代码中更改。 (确切的用法和有效性因语言,算法和执行环境而异。)

我发现;用于“空块”空语句可疑构造使用,因为这样的问题:

while (age == 5); {
   Console.WriteLine("I hate debugging");
}

(之前我已经多次看过这个bug,当时添加了新代码。)

快乐的编码。

答案 1 :(得分:1)

while (age == 5);陷入无限循环。在c ;中是一个空终止符。编译器假定上面的循环只有一个;语句,导致循环无限迭代。

答案 2 :(得分:1)

仅包含

的声明

;

是一个空语句。它与

中没有任何内容的块(也称为复合语句)相同
{
}

他们都不执行任何操作。

答案 3 :(得分:0)

如果我们将;置于任何位置,则表示null语句(不执行任何操作的语句)。

当我们写

while(true);

这意味着while循环是一个什么都不做的语句。它类似于

while(true)
i++;

此声明不是null,而在前一个案例声明中是null