根据语言语义制作外部语句的“else if”部分?

Posted

技术标签:

【中文标题】根据语言语义制作外部语句的“else if”部分?【英文标题】:Making the "else if" part of the outer statement according to language semantics? 【发布时间】: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。 为什么有人会对所有答案投反对票? 【参考方案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 

【讨论】:

以上是关于根据语言语义制作外部语句的“else if”部分?的主要内容,如果未能解决你的问题,请参考以下文章

[07 Go语言基础-if-else]

Go if else

一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率

在C语言中,if和else if是否在不加花括号的情况下也是一个复合语句

C语言 if else if else不能运行。求指导

多个if else if语句的用法?