所以我有以下功能,显然是一个空白:
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但没有运气。
有关它为什么会抛出此错误以及如何修复的任何想法?
答案 0 :(得分:9)
这不是void
函数,这是void*
(void
指针)函数。它必须返回一个值,该值必须是指向任何类型数据的指针,或NULL
。
在你的情况下,return
不是必需的,因为函数永远不会返回:它有一个while(1)
循环,它永远运行。更好的方法是使它成为void
函数,而不是void*
函数,除非它必须符合某些预定义的函数指针类型。
如果更改返回类型不是一个选项,例如,因为您必须将此函数作为pthread_create
的start_routine
参数传递,您可以通过在结尾添加return NULL
来使警告静音功能的身体。
答案 1 :(得分:1)
此函数的返回类型为void *
,即任何类型的指针,而不是void
,因此它必须返回一个值。
您可以通过将返回类型更改为void
来解决此问题。但是,看起来这个函数是作为一个线程调用的,在这种情况下它必须有一个void *(*)(void *)
的签名,所以如果这样的情况下改变返回类型不是一个选项。
鉴于此函数具有while (1)
循环,它永远不会返回。但是,该函数需要返回某些内容,因此将return NULL;
放在底部。这将满足编译器的需要,如果您以后引入一个导致您突破循环的错误,它将充当安全捕获。