我偶然遇到过这样的情况:
while (true) {
while (age == 5); //What does this semi-colon indicate?
//Code
//Code
//Code
}
while(true)
表示这是一个无限循环,但我无法理解while
条件完成后的分号是什么,是不是等于这个?:
while (age == 5) { }
//Code
//Code
换句话说,它是否意味着while
循环无用,因为它永远不会进入块?
答案 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
。