【问题标题】:Making the "else if" part of the outer statement according to language semantics?根据语言语义制作外部语句的“else if”部分?
【发布时间】:2016-04-30 22:37:39
【问题描述】:

假设我们有以下 C 语句:

if( cond) 
      if( cond) 
        stat
      else
        stat

根据语言语义,“else stat”是内部 if 语句的一部分。为了使“else stat”成为外部 if 语句的一部分,我需要做什么?据我所知,在 then 之后和 if 语句的末尾添加 {} 以将它们分开是可行的。它是否正确?还有另一种方法吗?

【问题讨论】:

  • c 中没有then!
  • 在嵌套的if 周围使用大括号,这样它是明确的。如果使用正确的选项,GCC 将建议这样做。这是唯一的方法。为什么你还想要一个替代品?
  • @JonathanLeffler 我只是想看看是否有另一种方法可以做到这一点。我的教科书解释说还有其他方法,但没有说它们是什么。尝试研究它们,但没有运气。所以呀。谢谢大家!
  • then 来自哪里?那不是 C。
  • 为什么有人会对所有答案投反对票?

标签: c parsing if-statement conditional-statements semantics


【解决方案1】:

最佳做法是始终使用括号。它使您自己(或其他人)以后更容易阅读/理解/修改。

像这样:

if (condition1) {
     if (nestedCondition1) {
        //do something
     }
} else {
    //do something else
}

然后很容易快速看出你在哪个语句中。

【讨论】:

    【解决方案2】:

    在这种情况下,您应该使用复合语句

    if( cond1 )
    {
          if ( cond2 ) 
            stat;
    }
    else
    {
        stat;
    }
    

    从 C 语法的角度来看,另一种方法是可读性较差且不应使用的方法如下

    if( cond1 )
          if ( cond2 ) 
            stat;
          else
            ; // empty statement
    else
          stat;
    

    但是可以使用这种方法,然后内部 if 包含另一个 else if。例如

    if( cond1 )
          if ( cond2 ) 
            stat;
          else if ( cond3 )
            stat;
          else
            ; // empty statement
    else
          stat;
    

    或者可以通过以下方式使其更具可读性

    if( cond1 )
          if ( cond2 ) 
          {
            stat;
          }
          else
          {
            ; // empty statement
          }
    else
          stat;
    

    【讨论】:

      【解决方案3】:

      你需要使用括号:

      if (cond){
          if (cond)
              //inner conditional 
      } else {
        //outer conditional 
      }
      

      【讨论】:

        猜你喜欢
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多