C语言中单个花括号代码块的含义

use*_*925 6 c syntax formatting

我遇到了一些包含几个代码块的代码,用花括号括起来{}.在代码块之前没有行将它们标记为if语句,函数定义或其他任何内容的一部分.只是一个浮动在函数中间的代码块.这有什么意义吗?gcc通过代码似乎非常高兴; 我只能想象这是允许原始编码器在视觉上分割功能块的某种方式......

Ste*_*sop 11

它创建了一个范围.块内是否定义了自动变量?如果是这样,那么这些变量的范围仅限于块.它对于您不希望污染函数的其余部分的临时变量很有用,并且在编写C89时也很有用,其中变量定义必须位于块的开头.

所以,而不是:

int main() {
    int a = 0;
    int b;
    int i;

    for (i = 1; i < 10; ++i) {
        a += i;
    }

    b = a * a;
    // do something with a and b
}
Run Code Online (Sandbox Code Playgroud)

你可以有:

int main() {
    int a = 0;
    {
        int i;
        for (i = 1; i < 10; ++i) {
            a += i;
        }
    }

    {
        int b = a * a;
        // do something with a and b
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,如果你这样做,你还必须问自己这些块是否会作为单独的功能更好.


Mar*_*ade 9

独立花括号用于作用域 - 在块中声明的任何变量在其外部都不可见.

  • 当与RAII结合使用时,这是一个非常强大的C++工具. (5认同)