簡體   English   中英

c,控制在 c 中到達非無效 function 的末端

[英]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->HEADNULL會發生什么: if不會被輸入,所以你到達 function 的末尾,它應該返回一個void* - 但你什么都不返回。

嘗試在 function 的底部返回一些合理的值來解決這個問題。 或者添加一個斷言該代碼應該是不可訪問的,例如:

assert( !"Unreachable code hit" );

function 的簽名表明它返回一個void * ,它是一個指針,與void不同。

如果您的 function 不打算返回任何東西,請使用void

這是一個老問題,但如果有人試圖解決這個問題(對於 pthreads),你可能想要返回:

  • pthread_exit(void *retval) (用於可連接線程)
  • pthread_exit(NULL) (對於分離的線程)

http://publib.boulder.ibm.com/infocenter/tpfhelp/current/topic/com.ibm.ztpf-ztpfdf.doc_put.cur/gtpm1/m1rhnvf.html

此警告類似於 Return with no value 中描述的警告。 如果控制到達 function 的末尾並且沒有遇到返回,則 GCC 假定返回沒有返回值。 但是,為此,function 需要返回值。 在 function 的末尾,添加一個 return 語句,該語句返回一個合適的返回值,即使控制從未到達那里。

從原型來看,您似乎想要返回一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM