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