c, управление достигает конца не пустой функции в c - PullRequest
4 голосов
/ 10 августа 2011

У меня есть 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
    }
}

}

Ответы [ 5 ]

14 голосов
/ 10 августа 2011

Потому что вы объявляете это void * (не void) и ничего не возвращаете .Верните NULL, если вам не нужно возвращаемое значение.

void *dispatcher_threadloop(void *arg)
5 голосов
/ 10 августа 2011

Хорошо, представьте, что произойдет, если dQueue->HEAD равно NULL: if не будет введено, так что вы попадаете в конец функции, которая должна возвращать void* - но вы неt вернуть что-либо.

Попробуйте вернуть какое-нибудь разумное значение внизу вашей функции, чтобы это исправить.Или добавьте утверждение, в котором говорится, что этот код должен быть недоступен, например:

assert( !"Unreachable code hit" );
4 голосов
/ 10 августа 2011

Подпись для вашей функции указывает, что она возвращает void *, который является указателем и отличается от void.

Если ваша функция не предназначена для возврата чего-либо, используйте void.

2 голосов
/ 03 сентября 2015

Это старый вопрос, но если кто-то пытается выяснить это (для pthreads), вы МОЖЕТЕ вернуть:

  • pthread_exit(void *retval) (для объединенных потоков)
  • pthread_exit(NULL) (для отдельных нитей)
1 голос
/ 10 августа 2011

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

Это предупреждение похоже на предупреждение, описанное в разделе «Возврат без значения».Если управление достигает конца функции и возврат не обнаружен, GCC предполагает возврат без возврата значения.Однако для этого функция требует возвращаемого значения.В конце функции добавьте оператор return, который возвращает подходящее возвращаемое значение, даже если управление там никогда не достигнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...