当只有函数的中间部分不同时,避免重复代码

eva*_*ing 2 c code-duplication

我有一堆函数,所有函数都以相同的方式开始和结束,只有中间部分不同.

我知道我能做到:

int
foo(int bar)
{
    intro();
    /* stuff that differs */
    outro();
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否还有另一种方法,让我免于重新输入所有函数中的intro()和outro().

Bat*_*eba 7

一种方法是使用函数指针.void (*function)(void)是一个指向函数的指针,该函数返回void并且不带参数.

int foo(int bar, void (*function)(void))
{
    intro();
    /* call the function*/
    function();
    outro();
}
Run Code Online (Sandbox Code Playgroud)

您可以通过传递具有原型的函数的地址来调用它

void someFunctionName(void).

如果"不同的东西"应该采取参数或返回值,请调整味道.