Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数中的C块?_C_Function_Scope - Fatal编程技术网

函数中的C块?

函数中的C块?,c,function,scope,C,Function,Scope,我在C函数的定义(在动态窗口管理器的源代码中)中发现了块的奇怪用法 它是函数定义中的一个块。他有一个例子。 这是怎么回事 void grabbuttons(Client *c, Bool focused) { updatenumlockmask(); { unsigned int i, j; unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; //some m

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

它是函数定义中的一个块。他有一个例子。 这是怎么回事

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

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

但通常它只是用于组织代码以提高可读性,或者建议或提醒一些额外的细节(或者只是强制编辑器增加缩进级别),例如:


此外,旧的C标准仅将变量声明限制在块的开头。在这种限制下,您的选择是在函数或其他(阻塞的)控制结构的开头声明所有变量,或者引入一个新的裸块,仅用于声明其他变量。

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

  • 一种不能被多次调用的函数。最好在块中编写这段代码
  • 在C语言中,变量只能在函数的开头声明。因此,任何需要更多变量且不希望从函数的其余代码中分离出功能的代码都可以放在代码块中

  • 在相当长的一段时间内使用这样的块很方便-例如,在
    switch
    /
    case
    语句中;或者任何需要防止作用域到达块外的地方。
    lockDatabase();
    {
        // this code is all within the database lock:
    
    
    }
    unlockDatabase();