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

时间:2015-09-11 13:09:27

标签: c pthreads

我在C中有一个函数:

void start_fun()
{
   // do something
}

我想使用pthread_create()创建一个线程,启动例程为start_fun(),不修改void start_fun(),如何将函数指针指向start_fun();

2 个答案:

答案 0 :(得分:6)

如果在代码中的任何地方编写函数名start_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);

答案 1 :(得分:3)

用作表达式的函数名称计算指向指定函数的指针。因此,例如:

pthread_t thread_id;
int result = pthread_create(&thread_id, NULL, start_fun, NULL);

HOWEVER ,您提供的启动函数没有正确的签名,因此使用作为 pthread启动函数会产生未定义的行为。 start函数必须具有以下签名:

void *start_fun(void *arg);

该函数可以忽略它的参数并且总是返回NULL,如果合适,但必须使用参数和返回值(这些类型)声明它。