什么是最内层的“if”语句和附带的“if”?

时间:2013-10-06 13:55:43

标签: gcc

首先,请允许我发布GCC手册页的屏幕截图。

enter image description here

第二组演示代码正上方的句子让我感到困惑,这被写成“因此'else'不可能属于封闭的'if'。”至于我试图了解作者的想法,最里面的if语句是if(b)foo();。他打算提及if(b)何时说“封闭'如果'”。但如果我猜对了,那么演示代码应该是这样的:

    {
       if(a)
          {
             if(b)
                foo();
          }
       else
          bar();
    }

我是对的吗?事实证明这是一个“封闭'if'”。

2 个答案:

答案 0 :(得分:4)

“封闭if”是if,其身体是另一个(“内部”),如果是“封闭的”。

困惑你的句子是正确的。段落声明,您应该将第二个示例中显示的括号放在第一个示例中,以获得与第一个示例相同的结果(但没有来自gcc的警告)。

如果您希望获得示例1缩进建议的代码,那么您的示例将是正确的。

现在句子的意思是:在示例1中,else子句属于内部if,但这只能是偶然的(当您的示例中的行为需要时)。 当您按照示例2中的方式编写代码时,“没有办法”可以实现此目的。

答案 1 :(得分:1)

  

至于我试图了解作者的想法,最里面的if语句是if(b)和foo();

是。而else是它的一个条款,而不是封闭if的一个条款。

  

他打算提及if(b)当他说“封闭'if'”时。

没有。他/她正在讨论一种方法,明确else属于最内层,而不是封闭的那个。清除编译器,即不会抛出此警告。

除此之外,这两个例子在功能上是相同的。唯一的区别是,一个人会引发警告。你的大括号版本在功能上与那两个版本不同 - 它使else成为封闭if(a)的一个子句。