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_create
的 start_routine
参数传递,您可以通过添加 return NULL
在函数体的末尾。
此函数的 return 类型为 void *
,即任何类型的指针,而不是 void
,因此它必须 return 一个值。
您可以通过将 return 类型更改为 void
来解决此问题。但是,看起来这个函数应该作为线程调用,在这种情况下它必须具有 void *(*)(void *)
的签名,所以如果是这种情况,则不能更改 return 类型。
鉴于此函数有一个 while (1)
循环,它永远不应 return。不过,函数需要 return something,所以把 return NULL;
放在底部。这将使编译器满意,并且它会作为一个安全捕获器,以防您稍后引入导致您跳出循环的错误。
所以我有以下功能,显然是无效的:
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_create
的 start_routine
参数传递,您可以通过添加 return NULL
在函数体的末尾。
此函数的 return 类型为 void *
,即任何类型的指针,而不是 void
,因此它必须 return 一个值。
您可以通过将 return 类型更改为 void
来解决此问题。但是,看起来这个函数应该作为线程调用,在这种情况下它必须具有 void *(*)(void *)
的签名,所以如果是这种情况,则不能更改 return 类型。
鉴于此函数有一个 while (1)
循环,它永远不应 return。不过,函数需要 return something,所以把 return NULL;
放在底部。这将使编译器满意,并且它会作为一个安全捕获器,以防您稍后引入导致您跳出循环的错误。