C中的闭合/功能块

时间:2014-10-13 08:16:17

标签: c closures

我一直认为在C中使用大括号块作为闭包块是非常方便的。主要原因是我可以在IDE中更好地使用语法折叠,而不会给代码增加额外的复杂性(例如添加其他功能)。

 // Block 1
 {
     int i; 
     i = some_work(i);
     j = i;
 }

 // Block 2
 {
    ...
 }

我不知道这是否是C中的正确解决方案。是否有任何编程标准提及C中的闭包块?

2 个答案:

答案 0 :(得分:3)

那些不是closures,它们只是范围块。

您不能像使用本机支持闭包的语言中的闭包一样使用它们。例如,您无法存储对此类块的引用并稍后执行它。

它们在C99中的用处不大,因为你现在可以在任何地方声明新的变量。

答案 1 :(得分:3)

大多数编程标准都主张将长函数划分为较短的函数,并使用空行将函数分成较小的单元。

这样做的两个主要原因是可读性和可测试性。

如果将长函数分成较小的函数,则每个较小的函数可以单独进行单元测试。

你所做的比仅仅拥有一个大功能更好,但你错过了可测试性部分。

根据代码的外观,您可能也会错失可读性。请记住,函数具有描述它的名称。块没有名称,因此您需要注释来描述它。

如果使用正确,可以使用块来提高可读性。然而,对于简单的空白行也是如此。块在空行上的优点是它限制了局部变量的范围,从而提高了可读性。

因此,对于您创建的每个块,您应该考虑它是对应于空行还是函数调用。在后一种情况下,将块转换为单独的函数。

相关问题