【问题标题】:C - Passing function with unknown params to another function, and calling itC - 将具有未知参数的函数传递给另一个函数,并调用它
【发布时间】:2016-02-01 13:35:35
【问题描述】:

我正在尝试实现这样的目标:

void sum(int a, int b){ printf("result: %d", a+b); }

void callFunc(void (*funct)(...), ...)
{
     va_list ars;

     va_start(ars, funct);
     funct(ars);
     va_end(ars);
}

int main()
{
     callFunc(sum, 2,3);         

     return 0;
}

但这不起作用,因为需要两个va_lists,用于funct 参数和传递的参数。但是,即使我尝试传递 sum 函数,它也会显示:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'

那么如何使这项工作在旧的 C 风格中发挥作用?

【问题讨论】:

  • 如果你想把它保留为 C,为什么要标记这个 C++?

标签: c function pointers parameters


【解决方案1】:

你不能那样做。这根本不可能。

您能做的最好的事情(同时保持其通用性)是将funct 更改为va_list,就像vprintf。但这可能对您的目的不太有效。

或者,你可以做一个宏:

#include <stdio.h>

#define CALL_FUNC(func, ...) func(__VA_ARGS__)

void sum(int a, int b){ printf("result: %d", a+b); }

int main()
{
     CALL_FUNC(sum, 2, 3);         

     return 0;
}

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多