警告:' noreturn '函数确实返回



我正在做一个线程库(用uncontext.h改变上下文)。我的函数是void类型的,我不能返回。但是,即使我不返回,编译时也会出现以下警告:

dccthread.c: In function ‘dccthread_init’:
dccthread.c:184:1: warning: ‘noreturn’ function does return [enabled by default]
 }

这是函数的简化代码(没有一些细节):

void dccthread_init(void (*func), int param) {
    int i=0;
    if (gerente==NULL)
    gerente = (dccthread_t *) malloc(sizeof(dccthread_t));
    getcontext(&gerente->contexto);
    gerente->contexto.uc_link = NULL;
    gerente->contexto.uc_stack.ss_sp = malloc ( THREAD_STACK_SIZE );
    gerente->contexto.uc_stack.ss_size = THREAD_STACK_SIZE;
    gerente->contexto.uc_stack.ss_flags = 0;
    gerente->tid=-1;
    makecontext(&gerente->contexto, gerente_escalonador, 0);
    if (principal==NULL)
    principal = (dccthread_t *) malloc(sizeof(dccthread_t));
    getcontext(&principal->contexto);
    principal->contexto.uc_link = NULL;
    principal->contexto.uc_stack.ss_sp = malloc ( THREAD_STACK_SIZE );
    principal->contexto.uc_stack.ss_size = THREAD_STACK_SIZE;
    principal->contexto.uc_stack.ss_flags = 0;
    makecontext(&principal->contexto, func, 1, param);
    swapcontext(&gerente->contexto, &principal->contexto);

}

请注意,我不会随时返回。但是gcc给我这个警告。有人知道是什么问题吗?

即使void函数返回,它也不返回return;意味着它返回到前一个函数中调用它的地方,无论是否有新值。正如@Matthias之前所说,任何函数在C结尾都会有一个自动返回。如果编译器到达函数的结束括号,它将返回。我相信你需要用另一个函数调用或类似的东西来离开这个函数,以摆脱警告。

我希望这对你有帮助。

在C代码的末尾插入一个隐式返回。无返回函数应该在循环中运行或通过系统调用退出。它不同于返回但不传递值的void函数。

仅仅因为你没有return并不意味着你的例程不能返回。脱离结束(控制到达最后的右括号)相当于return。

因此,

foo(x)
{
    ...
}

相同
foo(x)
{
    ...
    return;
}

相关内容

  • 没有找到相关文章

最新更新