[英]C: pointer to a function in Struct
我正在练习在C中构建结构数据结构,并且该结构具有指向函数的字段指针。 我已经编写了以下代码,但是当我尝试使用gcc进行编译时,出现以下错误:
在函数“ main”中:custhreadsTest1.c:27:16:警告:来自不兼容指针类型的赋值[默认启用]
将函数指针分配给结构体中的指针字段的正确方法是什么? 非常感谢!
#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
typedef struct
{
ucontext_t (*gt_context);
void (*function)(void *);
int status_flag;
} custhread_t;
void *add(void *)
{
// do something here
}
int main(void)
{
ucontext_t ctx_main;
getcontext(&ctx_main);
custhread_t th1;
th1.gt_context = &ctx_main;
th1.function = &add;
th1.status_flag = 1;
return 0;
}
您正在使用正确的语法( &
是可选的)进行分配,但是您要分配的函数指针的类型与struct中的函数指针类型不兼容(您的add
函数采用void *
,但是您的函数指针在struct中不接受任何参数)。
您的add
函数应该只是:
void add(void)
{
// do something
}
或者,如果您的add
函数确实将指向void的指针作为参数,则:
typedef struct
{
ucontext_t (*gt_context);
// pointer to a function that takes a void pointer, no return value
void (*function)(void *);
int status_flag;
} custhread_t;
void add(void *somePointer)
{
// do something with somePointer
}
因此,因此,如果您的add
函数采用并返回一个void指针,则:
typedef struct
{
ucontext_t (*gt_context);
// pointer to a function that takes and returns a void pointer
void *(*function)(void *);
int status_flag;
} custhread_t;
void *add(void *somePointer)
{
// do something with somePointer
// return a void pointer
}
您做对了。 只要确保函数指针类型匹配即可。 例如,从结构中删除“ *”,以使参数只是void而不是void指针。 像这样。
typedef struct
{
ucontext_t (*gt_context);
void (*function)(void);
int status_flag;
} custhread_t;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.