我刚用if语句创建了一个简单的项目来检查语句是否为真,但后来我偶然发现了一些奇怪的东西。
这是我的示例代码
if(x ==1)
{
do something;
}
else if( x==2)
{
do something;
}
else if( x==3)
{
do something;
}
else if( x==4)
{
do something;
}
{
do something;
}
不,你读的没错。我也打错了。我遗漏了else语句,但我为它创建了大括号。当我编译时,它运行正常。这是某种错误吗?或者我刚刚对此感到陌生?我只是想知道。感谢所有答案
答案 0 :(得分:17)
在大括号中包含任意数量的语句(包括零)始终在语法上是合法的。结果本身就是一个声明。
你总是使用这个事实;事实上,你在你的例子中使用了它六次。 “if”的结果总是单一的陈述。在您的示例中,该单个语句是包含另一个语句的块语句。
答案 1 :(得分:14)
将执行没有if/else if
的最后一个代码块。大括号用于代码分离,并且不需要条件/迭代或任何其他前提来具有意义。
为了进一步解释我的观点:
{
{
Console.WriteLine("This works");
int i;
}
// the variable i is out of scope and can't be referenced here
}
这也是可能的。
根据 @slugonamission 的评论,他提出了一个很好的观点。代码块还为在此代码块内创建的变量创建范围隔离。
答案 2 :(得分:5)
一组花括号定义了一个语句块。您可以将任何语句集合作为块,尽管最有用的情况是在控制结构之后使用它们将多个语句放入其中。块语句的语法只要求它后面的语句是一个语句 - 它可以是单个语句,也可以是块语句(这只是另一种语句)。
除了为局部变量创建新范围外,控制语句外部的块也没有太大作用。我喜欢在case
内使用它们,因为案例不会自动创建新范围。
switch (foo) {
case 1: {
int i; // local to this case!
break;
}
case 2: {
int i;
break;
}
}
答案 3 :(得分:2)
这是有效的语法。括号本身仅表示一个单独的范围块;在这种情况下,与if - else if
完全无关。
因此,在您的代码中,最后一个块将始终执行。