Void函数抛出"无返回语句"警告

3 c warnings compiler-errors

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

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();
    }  
}
Run Code Online (Sandbox Code Playgroud)

它扔了

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

我试过添加一个空白的返回并返回0没有运气.

任何想法为什么它抛出这个错误,以及如何解决?

das*_*ght 9

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

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

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

  • @PeterJ如果函数指针必须符合预定义的签名,则可能无法实现,例如,因为您将此函数传递给`pthread_create`,这几乎就是这里的情况. (5认同)