在 C 中调用相同顺序的函数,每次调用一个不同的函数。如何更优雅地实现?

标签 c function

我有以下代码调用三个不同的函数,分别名为 func_afunc_bfunc_c,它们使用相同的参数。在每次调用之前和之后,我需要调用函数 foobar 以重置/打印一些变量。每次我调用他们时,他们都在做同样的事情。

foo();
func_a(param);
bar();

foo();
func_b(param);
bar();

foo();
func_c(param);
bar();

那么,我的问题是:有没有办法让这部分更优雅?在我的例子中,它上升到 func_e,所以我有五次几乎重复此代码。

最佳答案

我想您可以将所有共同点放入调用函数指针的单个函数中。然后遍历函数指针数组,将它们传递给单个辅助函数:

void invoke_foo_func_bar (void (*func)(int), int param) {
    foo();
    func(param);
    bar();
}

/* ... */
void (*funcs[])(int) = { func_a, func_b, func_c };
for (int i = 0; i < sizeof(funcs)/sizeof(*funcs); ++i) {
    invoke_foo_func_bar(funcs[i], param);
}

关于在 C 中调用相同顺序的函数,每次调用一个不同的函数。如何更优雅地实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372389/

相关文章:

javascript - 为什么 function.toString() 输出 "[native code]",而登录到控制台直接显示函数的源代码?

javascript - 在 JavaScript 中声明函数

c - 函数中数组出现问题

Azure Durable Functions, 'IsReplaying' 标志的意外值

C - sizeof(string) 结果小于应有的值

c - 如何找到以 GCC 开头的未闭括号?

c - 在退出时关闭文件描述符是一种好习惯吗

javascript - 函数在 Chrome 中工作正常,但在 Firefox 中不起作用

c - 警告 : incompatible implicit declaration of built-in function 'lrint'

c++ - 动态绑定(bind)或开关/案例?