迭代语句后的语句终止符 (;) 运算符:结束迭代语句本身,还是一个不可见的空语句?
Statement-terminator (;) operator after iteration statement: Ends the iteration statement itself, or an invisible empty statement?
在 this answer 期间,我们敬爱的 Jon Skeet 考虑了 do {} while ()
需要语句终止符的情况,因为 while()
需要语句主体,并继续举例说明:
while (true);
(empty statement) or while (true) {}
(block statement)
...将是有效的。
第二个例子很简单; while 循环执行复合(块)语句 ({}
),它是空的。
然而,第一个例子连同双向飞碟的描述引发了一个有趣的问题:
while(true);
中的 ;
(或任何其他迭代语句)是否终止了 while
(/语句)本身(在某种意义上),或者它是否终止了一个实际的不可见)
和终止符之间的空语句?
从语法的角度来看,它终止了语句。不过,这是一种非常奇怪的思考方式。 while
循环必须有主体,所以如果你只写
while(true)
解析器不知道 "statement" 在哪里结束,因为它缺少一个标记。您可以类似地 "terminate" 该语句与另一个语句。
while (true) i++;
与 ;
一样有效。你真正应该考虑的方式是写作
while (true) ;
真的是一个while循环,以空语句为主体,没想到什么"terminates the statement"
一个用例是如果你有 while(something());
它会执行 something()
直到它 returns false。所以你不一定需要一个body.
这相当于
while(true){
if (something()) break;
}
您可以像等待操作的 await
运算符一样使用它。
根据您链接到的答案,它肯定是一个空语句。
来自that answer:
There's a semi-colon at the end of every expression statement and declaration statement.
(if
, for
etc statements aren't expression or declaration statements.)
和while
似乎是一样的(除了那里提到的do...while
是一个例外)。
在 this answer 期间,我们敬爱的 Jon Skeet 考虑了 do {} while ()
需要语句终止符的情况,因为 while()
需要语句主体,并继续举例说明:
while (true);
(empty statement) orwhile (true) {}
(block statement)
...将是有效的。
第二个例子很简单; while 循环执行复合(块)语句 ({}
),它是空的。
然而,第一个例子连同双向飞碟的描述引发了一个有趣的问题:
while(true);
中的 ;
(或任何其他迭代语句)是否终止了 while
(/语句)本身(在某种意义上),或者它是否终止了一个实际的不可见)
和终止符之间的空语句?
从语法的角度来看,它终止了语句。不过,这是一种非常奇怪的思考方式。 while
循环必须有主体,所以如果你只写
while(true)
解析器不知道 "statement" 在哪里结束,因为它缺少一个标记。您可以类似地 "terminate" 该语句与另一个语句。
while (true) i++;
与 ;
一样有效。你真正应该考虑的方式是写作
while (true) ;
真的是一个while循环,以空语句为主体,没想到什么"terminates the statement"
一个用例是如果你有 while(something());
它会执行 something()
直到它 returns false。所以你不一定需要一个body.
这相当于
while(true){
if (something()) break;
}
您可以像等待操作的 await
运算符一样使用它。
根据您链接到的答案,它肯定是一个空语句。
来自that answer:
There's a semi-colon at the end of every expression statement and declaration statement.
(
if
,for
etc statements aren't expression or declaration statements.)
和while
似乎是一样的(除了那里提到的do...while
是一个例外)。