4

我认为这个问题更多的是关于风格:我有一个算法,它的 CC 非常高(还有很多行!)。我想减少它,这很容易,因为有一些可以分组的代码。问题是,以这种方式做事我会有一个“大”函数调用“小”函数,这些函数只被调用一次。

在我看来,尽管函数被调用一次,但将一个大函数分成小块更利于代码的易读性(在这种情况下)。

你怎么看?类似情况你怎么办?

4

4 回答 4

7

将一个大功能分解成更小的、大部分独立的块是一个非常好的主意。它使代码更易读,控制流更清晰。

如果函数是静态的并且只调用一次,编译器可能会在不被询问的情况下为您内联它们,因此无需担心运行时成本。

于 2010-05-21T14:03:39.717 回答
3

只调用一次的函数并没有什么不好。
它们使您的代码保持整洁,并且您不会丢失任何东西,只是添加了函数调用,对只调用一次的函数没有真正的性能影响。

于 2010-05-21T14:04:12.267 回答
2

比内联更进一步,有很多函数只被调用一次。

假设我们有这样的结构:

typedef struct foo {
     char *foo;
     int bar;
     double foobar;
} foo_t;

我们写一些东西来初始化/分配它:

foo_t *foome(void)
{
    foo_t *ret;

    ret = (foo_t *) malloc(sizeof(struct foo));

    ...
    ...
}

但是,为什么我们在foome()只被调用一次时经历了所有这些麻烦main()呢?因为我们希望下一个必须处理我们程序的人能够查看main()并立即理解我们想要完成的工作。

我宁愿看到有几十个一次性函数的代码,如果这意味着一个复杂的算法在单个(或关闭)屏幕上读起来就像一本书。当我不得不上下滚动 n 百行同时试图保持我的位置时,我无法告诉你我的头有多痛。

这可以节省理智并有助于环境,因为现在我不需要打印出所有 60 页算法并将它们排列在一张桌子上以便能够阅读它:)

于 2010-05-21T14:18:57.747 回答
0

如前所述,将一个大功能拆分为几个较小的功能有很多优点。可读性(使用正确的命名),局部变量的分组(函数中使用的临时变量更接近,从而提供更好的缓存行为),这些函数中的一个可以在其他地方重用,这是以前不可见的。

于 2010-05-21T14:12:37.823 回答