1

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

在此处输入图像描述

第二组演示代码正上方的句子让我感到困惑,它被写成“所以'else'不可能属于封闭的'if'”。就我试图了解作者的想法而言,最里面的 if 语句是if(b)and foo();。当他说“封闭的'if'”时,他打算指的是if(b)。但如果我的猜测是正确的,那么演示代码应该是这样的:

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

我对吗?问题是什么是“封闭的'if'”。

4

2 回答 2

4

“封闭if”是if另一个(“内部”)if被“封闭”的主体。

让你感到困惑的句子是正确的。该段落指出,您应该按照第二个示例所示放置括号,以达到与第一个示例相同的结果(但没有来自 的警告gcc)。

如果您想要示例 1 的缩进所建议的代码,那么您的示例将是正确的。

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

于 2013-10-06T14:23:38.370 回答
1

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

是的。而 theelse是它的一个子句,而不是封闭 if 的一个子句。

当他说“封闭的'if'”时,他打算指的是if(b)。

不。她/他正在讨论一种方法,以明确表示else属于最里面的,而不是封闭的。对编译器清除,也就是说,这样它就不会抛出这个警告。

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

于 2013-10-06T14:30:09.460 回答