if()//first if
{
if()//second if
statement;
}
else
statement;
我知道else
与第一个if
匹配,但我的问题是为什么?我这样想,首先if
和else
属于同一范围(例如,主要是本地范围),第二个if
位于第一个else
没有可见性的本地范围内?这是正确的吗?
答案 0 :(得分:9)
if....else
的基本语法是:
--optional-
if(expr) stmt [else stmt]
如果你只是用你的例子减去括号,他们会这样嵌套:
---------stmt----------
if(expr) if(expr) stmt else stmt
基本上意味着else
与最新的if
绑定,
并且满足外if
的语法,因为内if...else
是一个语句
添加大括号(首先显示整体语法):
if(expr) stmt [else stmt]
--compound-stmt--
if(expr) { if(expr) stmt } else stmt
这里,内部if(expr)
.. stmt包含在复合语句(这是一个语句的子变量)中,最近仍然是开放的(读取:在范围内)if
是第一个。您还可以查看复合语句的结尾 - 关闭括号 - 关闭所有包含的语法结构。
没有compound if
,只有if
控制复合语句。
答案 1 :(得分:5)
语法如下:
'if' '(' <condition> ')' <statement-1> [ 'else' <statement-2> ]
在if
之后有一个语句,在可选else
之后有一个语句。每个语句都可以是块语句,在这种情况下,您必须将它括在一对花括号中。
由于你有花括号,嵌套的if
在上面的语法中是<statement-1>
;因此,else
属于外if
。
请注意,如果删除花括号,else
将属于内部if
。
答案 2 :(得分:5)
else
与第一个if
匹配的原因是因为您强制使用{
和}
{
和}
做什么是他们接受任意数量的语句并将其转换为代码的“块”,由控制语句(如if
)处理,类似于单一陈述
如果您的代码没有将第二个if语句放入如下所示的块中
if()//first if
if()//second if
statement;
else
statement;
然后else
实际上对应第二 if
答案 3 :(得分:3)
“我知道其他地方与第一个匹配,但我的问题是为什么?”
为什么设计?
所以可能会有这样的陈述:
if (istrue)
if (thatstrue) dosomething ();
else donothing2 ();
else donothing1 ();
无需编写括号,如下所示:
if (istrue){
if (thatstrue) dosomething ();
else donothing2 ();
} else donothing1 ();
另请注意,Tab键无关紧要 - 它不会影响执行哪个else
语句。