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

时间:2010-09-03 14:10:43

标签: c syntax formatting

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

5 个答案:

答案 0 :(得分: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
}

你可以:

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

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

答案 1 :(得分:9)

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

答案 2 :(得分:2)

如果代码块包含局部变量声明(您的描述不清楚内部的内容),那么它们可能会限制这些变量的范围。即。

int i = ...;
// i is visible here
{
  int j = ...;
  // both i and j are visible here
}
// j went out of scope, only i is visible here

答案 3 :(得分:2)

用于创建范围。范围,如果用于声明只能在此范围内使用的变量。例如,如果在大括号之前声明了变量,则可以在它们之后的大括号内使用它。相反,如果在大括号内声明了变量,则只能在大括号内使用。 希望这会有所帮助。

答案 4 :(得分:0)

它通常意味着编写它是为了通过一个更大的函数声明一个变量,但变量只需要一个非常有限的范围,或者甚至可能需要隐藏一些东西。它完全是合法的 - 它只是引入了一个块。最大的问题始终是“该代码的正确缩进是什么”。

预处理器也可以使用它将其他语言转换为生成的C.转换后的材料通常包含在块中(也可能包含#line指令。)