如何证明嵌套else语句的执行顺序

本文关键字:语句 else 执行 顺序 嵌套 何证明 证明 | 更新日期: 2023-09-27 18:15:57

请注意,不是关于如何else绑定以及如何扩展作用域的问题。另外,请注意,这不是一个应该或不应该使用大括号的问题。

考虑下面的嵌套条件语句。

if(alpha)
  if(beta)
    AlphaAndBeta();
  else
    AlphaNotBeta();

就我个人而言,即使我非常赞成删除任何多余的括号,我也建议在这种情况下使用花括号,以非常清楚地表明else语句是内部条件的一部分,这可能很棘手,特别是当一些聪明的人开始像这样用缩进胡闹时。

if(alpha)
  if(beta)
    AlphaAndBeta();
else
  AlphaNotBeta();

然而,我想有一个方便的参考,在哪里描述的行为。我在MSDN上查看了语言定义,但没有找到确切的位置。它需要非常清楚地说明else如何绑定到if(不一定是微软的官方网站)。

请问我在哪里可以找到那一页?

如何证明嵌套else语句的执行顺序

这在c#规范第8.7.1节- if语句中有记录:

else部分与语法允许的词法上最接近的if部分相关联。因此,形式为

if语句
if (x) if (y) F(); else G();

等价于

if (x) {
   if (y) {
      F();
   }
   else {
      G();
   }
}

这里有一个资源,MSDN:

then语句和else语句可以是任何类型的,包括另一个if语句嵌套在原始if语句中。在嵌套if语句中,每个如果没有对应的Else子句,则属于最后一个其他