【问题标题】:C Block inside a function?函数内部的C块?
【发布时间】:2012-07-07 22:27:57
【问题描述】:

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

【问题讨论】:

    标签: c function scope


    【解决方案1】:

    很简单:一个块。它引入了一个新的有限作用域:在内部声明的变量不能在外部使用,因此它可以用来限制一组变量的作用域。

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

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

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

    【讨论】:

    • 在相当多的时候使用这样的块很方便——例如,在switch/case 语句中;或任何需要防止范围到达块外的地方。
    【解决方案2】:

    C 块的使用是将逻辑从其余代码中分离出来。以下是一些有用的场景:

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

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      相关资源
      最近更新 更多