减少代码重复

时间:2016-08-21 18:14:13

标签: c optimization

我有两个函数,它们只在一个参数(不同的结构)上有所不同,几乎完成相同的处理,导致大量的代码重复。请参阅以下简化示例:

struct foo {
    int a;
};

struct bar {
    int a;
    int b;
};

foo(struct foo *f) {
    do_b();
    // error handling
    f->a = 1;
    do_c();
    // error handling
    do_d();
    // error handling
}

bar(struct bar *b); {
    do_a();
    // error handling
    b->b = 2;
    do_b();
    // error handling
    b->a = 1;
    do_c();
    // error handling
    do_d();
    // error handling
}

是否有一些聪明的方法只使用一个功能来消除代码重复?

1 个答案:

答案 0 :(得分:4)

是的,但不是你想象的那样。保持类型安全是非常有益的,摆脱它(使用指向void或struct interitance的指针)并不符合你的最佳利益。

如果由于某些有意义的原因有两种不同的类型被定义为单独的类型,那么 应该有两个单独的函数来获取这些类型。

在这种情况下你应该做的是删除这些功能中的重复:

first( int* a )
{
   do_b();
    // error handling
    *a = 1;
    do_c();
    // error handling
    do_d();
    // error handling
}

foo(struct foo *f) {
    first( &f->a );
}

bar(struct bar *b); {
    do_a();
    // error handling
    b->b = 2;
    first( &b->a );
}