C# 迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是结束不可见的空语句?
在此期间,我们敬爱的Jon Skeet考虑了C# 迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是结束不可见的空语句?,c#,iteration,semantics,C#,Iteration,Semantics,在此期间,我们敬爱的Jon Skeet考虑了do{}while()需要语句终止符的情况,因为while()需要语句体,并继续举例说明: while(true)(空语句)或while(true){}(块语句) …将是有效的 第二个例子很简单;执行复合(块)语句({})的while循环,该语句为空 然而,第一个例子,连同双向飞碟的描述,引发了我一个有趣的问题: 是否执行在while中(true)(或任何其他迭代语句)终止,而(/statement)本身(在某种意义上)终止,或者它终止了)和终止符之
do{}while()
需要语句终止符的情况,因为while()
需要语句体,并继续举例说明:
while(true)
(空语句)或while(true){}
(块语句)
…将是有效的
第二个例子很简单;执行复合(块)语句(
{}
)的while循环,该语句为空
然而,第一个例子,连同双向飞碟的描述,引发了我一个有趣的问题:
是否执行
代码>在while中(true)代码>(或任何其他迭代语句)终止,而(/statement)本身(在某种意义上)终止,或者它终止了)
和终止符之间实际不可见的空语句?从语法角度看,它终止语句。这是一个非常奇怪的想法<代码>while
循环必须有一个主体,所以如果您只编写
while(true)
解析器不知道“语句”在哪里结束,因为它缺少一个标记。同样,您也可以使用另一条语句“终止”该语句
while (true) i++;
与一样有效代码>。你真正应该考虑的是写作
while (true) ;
实际上是一个while循环,它的主体是一个空语句,而不是试图去想什么是“终止语句”如果你有while(something()),这个用例就是这样的它将执行something()
,直到返回false。所以你不一定需要身体
这相当于
while(true){
if (something()) break;
}
你可以像一个等待操作的操作员一样使用它。根据你链接到的答案,它肯定是一个空语句
while (true) i++;
发件人:
每个表达式语句和声明语句的末尾都有一个分号
while (true) i++;
(if
,for
etc语句不是表达式或声明语句。)
而while
似乎是一样的(除了do…while
是这里提到的一个例外)。语法?根据规范,while语句由标记while
、(
、布尔表达式
、)
和嵌入的
语句组成。然后,embedded_语句
的定义包括许多不同的内容,包括block
和embedded_语句
。事实上,embedded_statement
可以是除labeled_statement
和declaration_statement
之外的所有类型的语句,因此这些是唯一不能在那里使用的“语句”。例如while(true)var i=42代码>应该是非法的(但是可以使用块)。在示例中while(true)代码>有一个空的\u语句
。