如何在C中获取指向函数的函数指针?
我在C中有一个函数:如何在C中获取指向函数的函数指针?,c,pthreads,C,Pthreads,我在C中有一个函数: void start_fun() { // do something } 我想使用pthread\u create()创建一个线程,启动例程是start\u fun(),不需要修改void start\u fun(),如何获取指向start\u fun()的函数指针 如果在代码中没有任何参数的情况下编写函数名start\u fun,则会得到指向该函数的函数指针 但是,pthread_create需要一个格式为void*func(void*)的函数 如果不选择重写函数
void start_fun()
{
// do something
}
我想使用
pthread\u create()
创建一个线程,启动例程是start\u fun()
,不需要修改void start\u fun()
,如何获取指向start\u fun()的函数指针 如果在代码中没有任何参数的情况下编写函数名start\u fun
,则会得到指向该函数的函数指针
但是,pthread_create需要一个格式为void*func(void*)
的函数
如果不选择重写函数,则必须编写包装器:
void* call_start_fun (void* dummy)
{
(void)dummy;
start_fun();
return 0;
}
然后将call_start_fun传递给pthread_create:
pthread_create(&thread, NULL, call_start_fun, NULL);
函数名用作表达式,计算结果为指向命名函数的指针。因此,例如:
pthread_t thread_id;
int result = pthread_create(&thread_id, NULL, start_fun, NULL);
但是,您提供的启动函数没有正确的签名,因此将其用作pthread启动函数会产生未定义的行为。启动函数必须具有以下签名:
void *start_fun(void *arg);
如果合适,函数可以忽略其参数并始终返回NULL
,但必须同时声明参数和返回值(这些类型)。start\u-fun
是指向start\u-fun
的指针。尽管。。它不是正确类型的函数pthread\u create
需要一个void*(*f)(void*)
。函数不是pthread\u create
@ArjunShankar所需的正确类型。事实上,我已经修复了答案。谢谢。这只是风格的问题,但我会从call_start_fun
@JeremyP返回NULL
,因为结果将[任何空指针常量]强制转换为void*,因此函数将始终返回空指针常量(void*)0
。是的,但是我得到了一个错误:从'int()()'到'void()(void)[-fppermissive]pthread\u create(&thread\u id,NULL,start\u fun,NULL)的转换无效;