C - недопустимое преобразование из 'void *' в 'void (*) ()' - PullRequest
0 голосов
/ 26 августа 2018

При попытке скомпилировать программу я получаю следующее:

invalid conversion from ‘void*’ to ‘void (*)()’

initializing argument 2 of ‘void makecontext(ucontext_t*, void (*)(), int, ...)’ [-fpermissive]

invalid conversion from ‘void (*)()’ to ‘void*’ [-fpermissive] init_TCB(tcb,function,stack,STACK_SIZE);
initializing argument 2 of ‘void init_TCB(TCB_t*, void*, void*, int)’ [-fpermissive]
void init_TCB (TCB_t *tcb, void *function, void *stackP, int stack_size)`

Это строки кода, которые вызывают ошибки:

#include <ucontext.h>

typedef struct TCB_t {
   struct TCB_t     *next;
   struct TCB_t     *prev;
   ucontext_t      context;
} TCB_t; 

void init_TCB (TCB_t *tcb, void *function, void *stackP, int stack_size)
{
   memset(tcb, '\0', sizeof(TCB_t));       
   getcontext(&tcb->context);      
   tcb->context.uc_stack.ss_sp = stackP;
   tcb->context.uc_stack.ss_size = (size_t) stack_size;
   makecontext(&tcb->context, function, 0);
}

Чего мне не хватает

1 Ответ

0 голосов
/ 26 августа 2018

У вас есть void *function, но void* не является правильным типом указателя на функцию. void (*)() - это тип указателя на функцию, поэтому, вероятно, вам следует изменить сигнатуру функции:

void init_TCB (TCB_t *tcb, void (*function)(), void *stackP, int stack_size)
...