首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接受void ( void )和void(void* param)的一个函数

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

Stack Overflow用户
提问于 2015-02-08 22:00:39
回答 2查看 123关注 0票数 0

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

代码语言:javascript
复制
void function(void);

代码语言:javascript
复制
void function(void* param);

现在我有个折叠式:

代码语言:javascript
复制
int createProcess(void (*procFunc)(void*), void* param);

这将只适用于第二个原型。有什么方法可以使这两个示例原型都工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 22:04:52

可以使用具有未指定数目的参数的函数指针:

代码语言:javascript
复制
int createProcess(void (*procFunc)(), void* param);

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

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

票数 3
EN

Stack Overflow用户

发布于 2015-02-08 22:10:40

创建一个类似这样的类型。

代码语言:javascript
复制
typedef struct fnn {
  int fntype;
  union {
    void (*fn0)(void);
    void (*fn1)(void* param);
  } fn;
} fnArg;

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28399867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档