我从下面的代码中发出dispatchQueue.c:215: warning: control reaches end of non-void function
警告。
谁能解释为什么?
void *dispatcher_threadloop(void *arg){
//thread loop of the dispatch thread- pass the tast to one of worker thread
dispatch_queue_thread_t *dThread = arg;
dispatch_queue_t *dQueue;
dQueue = dThread->queue;
if (dQueue->HEAD!=NULL){
for(;;){
printf("test");
sem_wait(&(dQueue->queue_task_semaphore));
dThread->current_task = dQueue->HEAD;
dQueue->HEAD = dQueue->HEAD->next;
dQueue->HEAD->prev = NULL;
sem_post(&(dQueue->queue_task_semaphore));
break;
//TODO
}
}
}
最佳答案
好吧,想象一下如果dQueue->HEAD
是NULL
会发生什么:不会输入if
,因此您到达了应该返回void*
的函数的末尾-但您未返回任何内容。
尝试在函数底部返回一些合理的值以解决此问题。或添加一个声明该代码应不可访问的断言,例如:
assert( !"Unreachable code hit" );