我一直收到编译器错误control reaches end of non-void function
。有问题的代码[省略了if语句和if语句的主体作为⋯
]的形式是:
extern RC_Code_t osa_odm_init (void)
{
if ( ⋯ )
{
⋯
⋯
return (RC_OK);
}
}
我将函数的返回值指定为void
,但出现错误。如何解决这个问题?
当该函数返回类型不为 void,但函数可以在没有return
的情况下到达末尾时,会出现control reaches end of non-void function
警告。
它可能是由控制语句(如 if 语句和缺少的返回语句(引起的。
要回答">我将函数的返回值指定为 void,但收到错误",
- 你的函数
osa_odm_init
返回一个RC_Code_t
,而不是void
。void
在参数中,表示没有参数。
实际原因是它返回RC_Code_t
,但只有当 if 语句为真时,return
才会出现,如果 if 语句失败,您将错过return
。编辑后的代码应为
extern RC_Code_t osa_odm_init (void)
{
if ( odmInitFlag == BOOL_FALSE )
{
........
........
return (RC_OK);
}
// This section runs if ( odmIntFlag != BOOL_FALSE )
// In your original code, you omitted the return
return RC_ERROR; // Edit: Or return another RC_Code_t result
}