首先,请允许我发布GCC手册页的屏幕截图。
第二组演示代码正上方的句子让我感到困惑,这被写成“因此'else'不可能属于封闭的'if'。”至于我试图了解作者的想法,最里面的if语句是if(b)
和foo();
。他打算提及if(b)何时说“封闭'如果'”。但如果我猜对了,那么演示代码应该是这样的:
{
if(a)
{
if(b)
foo();
}
else
bar();
}
我是对的吗?事实证明这是一个“封闭'if'”。
答案 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)
的一个子句。