[英]c, control reaches end of non-void function in c
我有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
}
}
}
因為您將其聲明為void *
(不是void
)並且不返回任何內容。 如果您不需要任何返回值,則返回NULL
。
void *dispatcher_threadloop(void *arg)
好吧,想象一下如果dQueue->HEAD
是NULL
會發生什么: if
不會被輸入,所以你到達 function 的末尾,它應該返回一個void*
- 但你什么都不返回。
嘗試在 function 的底部返回一些合理的值來解決這個問題。 或者添加一個斷言該代碼應該是不可訪問的,例如:
assert( !"Unreachable code hit" );
function 的簽名表明它返回一個void *
,它是一個指針,與void
不同。
如果您的 function 不打算返回任何東西,請使用void
。
這是一個老問題,但如果有人試圖解決這個問題(對於 pthreads),你可能想要返回:
pthread_exit(void *retval)
(用於可連接線程)pthread_exit(NULL)
(對於分離的線程)此警告類似於 Return with no value 中描述的警告。 如果控制到達 function 的末尾並且沒有遇到返回,則 GCC 假定返回沒有返回值。 但是,為此,function 需要返回值。 在 function 的末尾,添加一個 return 語句,該語句返回一個合適的返回值,即使控制從未到達那里。
從原型來看,您似乎想要返回一些東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.