if()//first if
{
if()//second if
statement;
}
else
statement;
我知道
else
与第一个if
匹配,但我的问题是为什么?我认为它应该像这样,第一个if
和else
在同一范围内(例如主要的本地范围),而第二个if
在第一个if
的本地范围内,在这个范围内,else
是不可见的。这正确吗?if()//first if
{
if()//second if
statement;
}
else
statement;
else
与第一个if
匹配,但我的问题是为什么?我认为它应该像这样,第一个if
和else
在同一范围内(例如主要的本地范围),而第二个if
在第一个if
的本地范围内,在这个范围内,else
是不可见的。这正确吗?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
是第一个。你也可以将复合语句的末尾 - 闭合括号 - 视为关闭所有包含的语法结构。
没有复合if
,只有控制复合语句的if
。
'if' '(' <condition> ')' <statement-1> [ 'else' <statement-2> ]
在if
后面有一个语句,而在可选的else
后面有一个语句。每个语句都可以是一个块语句,在这种情况下,必须用一对大括号将其括起来。
由于您使用了花括号,嵌套的if
是上述语法中的<statement-1>
;因此else
属于外部的if
。
请注意,如果您删除大括号,则else
将属于内部的if
。
{
和 }
,因此 else
与第一个 if
匹配。
{
和 }
的作用是将任意数量的语句转换为“代码块”,控制语句(如 if
)会将其视为单个语句进行处理。
如果您的代码没有像以下示例那样将第二个 if 语句放入一个代码块中:
if()//first if
if()//second if
statement;
else
statement;
如果使用else
语句,它实际上对应的是第二个if
语句。
我知道else与第一个if匹配,但我的问题是为什么?
为什么要这样设计?
这样可以有像这样的语句:
if (istrue)
if (thatstrue) dosomething ();
else donothing2 ();
else donothing1 ();
不需要像这样写括号:
if (istrue){
if (thatstrue) dosomething ();
else donothing2 ();
} else donothing1 ();
else
语句。