1
我一直在为操作系统类(所以请只有提示,没有完整答案)和一个函数的参数和返回类型是由我的教师提供,但谁的内容被我填补正在抛出一个错误。功能如下:C函数指针无效值问题
void start_thread(void (*function)(void))
{
TCB_t* stackPointer = malloc(8192); //8192 is a provided value for assignment
TCB_t tcb;
tcb = init_TCB(&tcb, function, stack, sizeof(stack));
AddQueue(RunQ, tcb);
}
以下函数来自错误被引发的行,该函数被定义为赋值并且不应该被改变。
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 = stack_size;
makecontext(&tcb->context, function, 0);
}
我不熟悉C和函数指针的特别的想法,但我所有的研究说,这个码应该不会引发错误,但它不断抛出以下:
error: void value not ignored as it ought to be
你写了'init_TCB'吗? C不支持从函数指针到void指针的转换,在形式上它是未定义的行为。但实际上这是一个普遍的非标准扩展。如果你没有写出来,告诉你的老师,他们不应该教非标准的C. – Lundin