我从下面的代码中发出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->HEADNULL会发生什么:不会输入if,因此您到达了应该返回void*的函数的末尾-但您未返回任何内容。

尝试在函数底部返回一些合理的值以解决此问题。或添加一个声明该代码应不可访问的断言,例如:

assert( !"Unreachable code hit" );

10-08 07:11