2011-08-10 63 views
5

我有dispatchQueue.c:215: warning: control reaches end of non-void function警告下面的代碼..
任何人都可以請解釋爲什麼?c,控制到達非空函數結束c

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 
    } 
} 

}

回答

6

嘛,試想如果dQueue->HEADNULL發生了什麼:在if不會進入,所以你得到它應該返回一個void*功能的結束 - 但你不返回任何東西。

嘗試在函數底部返回一些合理的值來解決這個問題。或添加其中指出該代碼應該是無法訪問的,就像一個斷言:

assert(!"Unreachable code hit"); 
5

您函數的簽名表明它返回一個void *,這是一個指針,比void不同。

如果您的功能無意返回任何內容,請使用void

+6

他不能使它無效,它可能是'pthread'函數。 – cnicutar

14

因爲您聲明它void *(而不是void)和不返回任何東西。如果您不需要任何返回值,請返回NULL

void *dispatcher_threadloop(void *arg) 
2

這是一個老問題,但如果有人試圖弄清楚這一點(爲並行線程),你可能需要返回:

  • pthread_exit(void *retval)(對於可連接線)
  • pthread_exit(NULL)(對於分離線程)
相關問題