如何在C中使用函数指针?

如何在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,因此在使用前需要告诉它

我正在编写包含如下函数的pthread程序,我想在一个函数之间调用另一个函数

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.不同的错误。他还需要从函数中返回一个指针,指针应该返回一个指针。