Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是结束不可见的空语句?_C#_Iteration_Semantics - Fatal编程技术网

C# 迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是结束不可见的空语句?

C# 迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是结束不可见的空语句?,c#,iteration,semantics,C#,Iteration,Semantics,在此期间,我们敬爱的Jon Skeet考虑了do{}while()需要语句终止符的情况,因为while()需要语句体,并继续举例说明: while(true)(空语句)或while(true){}(块语句) …将是有效的 第二个例子很简单;执行复合(块)语句({})的while循环,该语句为空 然而,第一个例子,连同双向飞碟的描述,引发了我一个有趣的问题: 是否执行在while中(true)(或任何其他迭代语句)终止,而(/statement)本身(在某种意义上)终止,或者它终止了)和终止符之

在此期间,我们敬爱的Jon Skeet考虑了
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语句