如何在C中使用函数指针?
我正在编写包含如下函数的pthread程序,我想在一个函数之间调用另一个函数如何在C中使用函数指针?,c,gcc,pthreads,C,Gcc,Pthreads,我正在编写包含如下函数的pthread程序,我想在一个函数之间调用另一个函数 void *fun1(void *arg1) { fun2(NULL); } void *fun2(void *arg) { fun1(NULL); } 当我调用如上所示的另一个函数时,我得到如下所示的错误 错误:“fun2”的类型冲突 注意:前面的“fun2”隐式声明在这里 在fun1之间如何调用fun2声明: void*fun2(void*) 在fun1之前 编译器假定默认返回类型为int,因此在使用前需要告诉它
void *fun1(void *arg1)
{
fun2(NULL);
}
void *fun2(void *arg)
{
fun1(NULL);
}
当我调用如上所示的另一个函数时,我得到如下所示的错误
错误:“fun2”的类型冲突
注意:前面的“fun2”隐式声明在这里
在fun1之间如何调用fun2声明:
void*fun2(void*)代码>
在fun1之前
编译器假定默认返回类型为int
,因此在使用前需要告诉它实际的原型
/* forward declaration */
void *fun2(void *arg);
void *fun1(void *arg1)
{
fun2(NULL);
}
void *fun2(void *arg)
{
fun1(NULL);
}
注意,正如所写的,您有一个无限递归。这两个函数将互相调用,直到程序耗尽堆栈并崩溃。在编译过程中,您没有为fun2
提供原型,例如:
void * fun2(void *);
由于没有正向声明,因此编译器隐式地假定它将返回一个int
。(我的意思是这就是我的编译器的行为)因此它将有冲突的类型
最佳做法是:
void * fun1(void *);
void * fun2(void *);
void * fun1(void *arg1)
{
fun2(NULL);
//return missing
}
void * fun2(void *arg)
{
fun1(NULL);
//return missing
}
调用函数之前必须声明函数。请保持在头文件或.c
文件顶部声明函数的习惯。你应该
void *fun2(void *args);
让我们疯狂地假设您已经使用了前向声明
<代码> FUN1<代码>(有一个误称)调用<代码> FUN2< /代码>然后调用<代码> FUN1 >调用代码> FUN2 AudiTime-直到祝福机器运行栈(耐心)并放弃。为什么把C放在标题标题中,然后标记它C++?把它移到你身上,因为这是C++中与C.不同的错误。他还需要从函数中返回一个指针,指针应该返回一个指针。