C块内部有什么功能?

时间:2012-07-07 23:40:25

标签: c function scope

我在C函数的定义中发现了一个奇怪的块使用(在动态窗口管理器的源代码中)。

这是函数定义中的一个块。 Line 944 of this file有一个例子。 这是关于什么的?

void
grabbuttons(Client *c, Bool focused) {
  updatenumlockmask();
  {
    unsigned int i, j;
    unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
    //some more code
  }
}

2 个答案:

答案 0 :(得分:12)

就是这样:一个街区。它引入了一个新的有限范围:内部声明的变量在外部不可用,因此它可以用来限制一组变量的范围。

但通常它只是用来组织代码以便于阅读,也许是为了建议或提醒一些额外的细节(或者只是强迫你的编辑器进行额外的缩进),例如:

lockDatabase();
{
    // this code is all within the database lock:


}
unlockDatabase();

此外,较旧的C标准仅将变量声明限制为块的开始。根据该限制,您的选择是在函数开头或其他(阻塞的)控制结构中声明变量的全部,或者仅为此目的引入新的裸块来声明其他变量。

答案 1 :(得分:1)

C块的用法是将逻辑与其余代码分开。以下是一些有用的场景:

  1. 不应多次调用的函数。最好在块中编写这段代码。
  2. 在C语言中,变量只能在函数的开头声明。因此,任何需要更多变量且不希望与函数其余代码具有单独功能的代码都可以放在代码块中