如何解决 "control reaches end of non-void function" 警告?

How to solve the "control reaches end of non-void function" warning?

我遇到编译器错误 control reaches end of non-void function。有问题的代码 [if 语句和 if 语句的主体被省略为 ] 的形式为:

extern RC_Code_t osa_odm_init (void)
{
    if ( ⋯ )
    {
        ⋯
        ⋯
        return (RC_OK);
    }
}

我将函数的 return 值指定为 void,但出现错误。如何解决这个问题?

当函数 return 类型不为 void 时,会出现 control reaches end of non-void function 警告,但函数可以在没有 return 的情况下到达结尾 .

这可能是由 if 语句和缺少 return 语句等控制语句引起的。

回答“我将函数的 return 值指定为 void 但出现错误”,

  • 您的函数 osa_odm_init return 是 RC_Code_t,而不是 voidvoid在参数中,表示没有参数。

实际原因是它 returns RC_Code_t,但是 return 仅在 if 语句为真时才会出现,您错过了 return如果 if 语句失败。编辑后的代码应该是

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
}