函数中的C块?
我在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
void
grabbuttons(Client *c, Bool focused) {
updatenumlockmask();
{
unsigned int i, j;
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
//some more code
}
}
这很简单:一个街区。它引入了一个新的有限范围:内部声明的变量在外部不可用,因此可以使用它来限制一组变量的范围 但通常它只是用于组织代码以提高可读性,或者建议或提醒一些额外的细节(或者只是强制编辑器增加缩进级别),例如:
此外,旧的C标准仅将变量声明限制在块的开头。在这种限制下,您的选择是在函数或其他(阻塞的)控制结构的开头声明所有变量,或者引入一个新的裸块,仅用于声明其他变量。使用C块是将逻辑与代码的其余部分分开。以下是一些有用的场景:
在相当长的一段时间内使用这样的块很方便-例如,在
switch
/case
语句中;或者任何需要防止作用域到达块外的地方。
lockDatabase();
{
// this code is all within the database lock:
}
unlockDatabase();