c#-迭代语句后的语句终止符(;)运算符:结束迭代语句本身,还是看不见的空语句?
作者:互联网
在this answer年期间,我们心爱的Jon Skeet考虑了以下情况:do {} while()需要一个语句终止符,因为while()需要一个声明体,并举例说明:
while (true);
(empty statement) orwhile (true) {}
(block statement)
…将是有效的.
第二个例子很简单. while循环执行复合(块)语句({}),该语句为空.
但是,第一个示例以及Skeet的描述向我提出了一个有趣的问题:
是否;在while(true); (或其他任何迭代语句)终止while(/ statement)本身(在某种意义上),还是终止)和终止符之间的实际不可见的空语句?
解决方法:
从语法的角度来看,它终止了该语句.不过,这是一种很奇怪的思考方式. while循环必须有一个主体,所以如果您只写
while(true)
解析器不知道“语句”在哪里结束,因为它缺少令牌.您可以类似地用另一个语句“终止”该语句.
while (true) i++;
与;一样有效.您真正应该考虑的方式是写作
while (true) ;
实际上是一个以空语句为主体的while循环,而不是试图思考什么“终止了该语句”
标签:iteration,semantics,c 来源: https://codeday.me/bug/20191110/2015584.html