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