Void 函数抛出 "no return statement" 警告

Void function is throwing a "no return statement" warning

所以我有以下功能,显然是无效的:

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: warning: no return statement in function returning non-void [-Wreturn-type]".

我试过添加空白 return 和 return 0 但没有成功。

知道为什么会抛出此错误,以及如何解决?

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

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

如果更改 return 类型不是一个选项,例如,因为您必须将此函数作为 pthread_createstart_routine 参数传递,您可以通过添加 return NULL 在函数体的末尾。

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

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

鉴于此函数有一个 while (1) 循环,它永远不应 return。不过,函数需要 return something,所以把 return NULL; 放在底部。这将使编译器满意,并且它会作为一个安全捕获器,以防您稍后引入导致您跳出循环的错误。