一个函数接受void func(void)和void func(void * param)

时间:2015-02-08 22:00:40

标签: c function-pointers

我在GNU编译器集合中使用C语言。 所以我需要将函数指针传递给函数。现在有两种类型的可接受的函数指针原型我想要处理:

void function(void);

void function(void* param);

现在我有了以下内容:

int createProcess(void (*procFunc)(void*), void* param);

这仅适用于第二个原型。有没有办法让它适用于两个示例原型?

2 个答案:

答案 0 :(得分:3)

您可以使用带有未指定数量的参数的函数指针:

int createProcess(void (*procFunc)(), void* param);

但是你还需要区分这两种功能。添加第三个参数或(如果您的函数已经不使用它)使用param的空指针值作为区分这两种函数的标志。

请注意,使用未指定数量的参数声明函数是一个过时的C功能,因此您可以考虑声明两个不同的createProcess函数。

答案 1 :(得分:1)

创建类似这样的类型。

typedef struct fnn {
  int fntype;
  union {
    void (*fn0)(void);
    void (*fn1)(void* param);
  } fn;
} fnArg;

在fntype中输入0或1以标识您使用过的哪个联合字段,填充相关的fn.fn0或fn.fn1并将此结构作为第一个参数传递。

这基本上是一种更复杂的语言,但它会隐藏细节。

编辑:如果您有其他方法可以决定使用哪个字段,您也可以只使用联合。