在什么情况下需要在单个语句周围使用花括号?
本文关键字:周围使 语句 情况下 单个 在什么 | 更新日期: 2023-09-27 18:04:33
在我的回答:c#锁语法- 2个问题中,LukeH指出try...catch...(finally)
语句需要花括号。
我找到了为什么的答案,在这里找到(为什么要尝试…catch块需要花括号?)很有趣。
我想知道更多的例子,其中花括号是必需的,而不是良好的实践等,理想情况下与代码片段和解释为什么
绕过方法体。
// not allowed:
int Inc(int x)
return x+1;
为什么不那么容易,看起来老式的C比c++/c#更需要它。
关于为什么的部分,在(非常)古老的C中,你会写
int Sum()
int a, b; // parameters, very informal
{
int s; // local var
...
}
所以这个古老的语法需要大括号。在所有基于C语言的语言中,没有人认为让它们成为可选的有什么意义,假设在某些情况下这是可能的。
语言的某些部分需要使用大括号。例如,当你开始一个方法时,你必须用开括号和闭括号来标识它是一个代码块。在函数内部,某些语言特性,如循环、条件语句等,也接受大括号,尽管在某些情况下它们不是必需的。例如:
if (someValue == true)
doSomething();
在这种情况下,不需要大括号,但是你可以用大括号把这个语句括起来,因为在if检查之后你只有一条语句要执行,但是如果你想在if中执行多条语句,你就需要使用大括号。例如,
if (someValue == true)
{
doSomething();
doSomeMoreWork();
}
不允许这样做:
if (someValue == true)
doSomething();
doSomeMore();
else
doWork2();
int i = 1 + 2;
编译器会报错。
这个问题可以在下面的循环中看到:
while(i < 10)
doSomeWork();
i++;
在这里你期望i增加,但这从来没有发生过。基本上这个循环和这个是一样的:
while(i < 10)
{
doSomeWork();
}
i++;
块内的语句将无限执行,并且i永远不会增加。在这种情况下,正确的写法应该是:
while(i < 10)
{
doSomeWork();
i++;
}
现在您有了一个正常工作的语句。不管要执行多少条语句,我都喜欢使用大括号。这样做的原因是,迟早我可能需要在if语句或for或foreach循环中添加更多的工作。
对于checked
和unchecked
,必须使用大括号或括号,这取决于您是将它们视为操作符还是语句:
// legal operator
int y = checked(x * 2);
// legal statement
unchecked
{
if ((a * b) > c)
{
DoSomething();
}
}
// illegal operator
int y = checked x * 2;
// illegal statement
unchecked
if ((a * b) > c)
DoSomething();
类/结构/接口声明
类X {int _myval}