在什么情况下需要在单个语句周围使用花括号?

本文关键字:周围使 语句 情况下 单个 在什么 | 更新日期: 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循环中添加更多的工作。

对于checkedunchecked,必须使用大括号括号,这取决于您是将它们视为操作符还是语句:

// 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}