Void函数抛出一个" no return语句"警告

时间:2017-07-06 17:24:24

标签: c compiler-errors warnings

所以我有以下功能,显然是一个空白:

static void *CpuStatsTestLoop (void *arg){
    UNUSED (arg);

    rtems_object_set_name(rtems_task_self(), "CPU Usage Thread");

    while (1)
    {
        sleep (CPU_USAGE_REPORT_INTERVAL_SECS);
        rtems_cpu_usage_report();
        rtems_cpu_usage_reset();
    }  
}

然后抛出

  

" cpu_stats.c:98:1:警告:函数中没有return语句返回non-void [-Wreturn-type]"。

我尝试添加空白回报并返回0但没有运气。

有关它为什么会抛出此错误以及如何修复的任何想法?

2 个答案:

答案 0 :(得分:9)

这不是void函数,这是void*void指针)函数。它必须返回一个值,该值必须是指向任何类型数据的指针,或NULL

在你的情况下,return不是必需的,因为函数永远不会返回:它有一个while(1)循环,它永远运行。更好的方法是使它成为void函数,而不是void*函数,除非它必须符合某些预定义的函数指针类型。

如果更改返回类型不是一个选项,例如,因为您必须将此函数作为pthread_createstart_routine参数传递,您可以通过在结尾添加return NULL来使警告静音功能的身体。

答案 1 :(得分:1)

此函数的返回类型为void *,即任何类型的指针,而不是void,因此它必须返回一个值。

您可以通过将返回类型更改为void来解决此问题。但是,看起来这个函数是作为一个线程调用的,在这种情况下它必须有一个void *(*)(void *)的签名,所以如果这样的情况下改变返回类型不是一个选项。

鉴于此函数具有while (1)循环,它永远不会返回。但是,该函数需要返回某些内容,因此将return NULL;放在底部。这将满足编译器的需要,如果您以后引入一个导致您突破循环的错误,它将充当安全捕获。