如何在C中获取函数指针?

rat*_*zip 4 c pthreads

我在C中有一个函数:

void start_fun()
{
   // do something
}
Run Code Online (Sandbox Code Playgroud)

我想用来pthread_create()创建一个线程,启动例程是start_fun(),如果没有修改void start_fun(),如何获取函数指针start_fun();

Lun*_*din 6

如果start_fun在代码中的任何地方编写没有任何参数的函数名,您将获得一个指向该函数的函数指针.

但是 pthread_create需要格式化的功能void* func (void*).

如果重写函数不是一个选项,你将不得不写一个包装器:

void* call_start_fun (void* dummy)
{
  (void)dummy;

  start_fun();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后将call_start_fun传递给pthread_create:

pthread_create(&thread, NULL, call_start_fun, NULL);
Run Code Online (Sandbox Code Playgroud)

  • 该函数的类型不是`pthread_create`所需的正确类型. (2认同)
  • 这只是一个风格问题,但我会从`call_start_fun`返回`NULL` (2认同)