编译器警告的解决方案:控制到达非void函数的结束

时间:2013-04-25 05:40:06

标签: c++ compiler-construction

我有以下代码:

int cons_col()
{
for(int col =0; rx_state_== MAC_IDLE; col++)
return col;
}

当满足条件rx_state_ == MAC_IDLE时,它就像一个应该返回整数的计数器; 当我编译时,我收到警告:控制到达非void函数的结束。

如果在上面的函数末尾添加以下内容,这个问题是否会消失:

if (coll == 0)
return 0;

谢谢

1 个答案:

答案 0 :(得分:5)

该代码对此进行评估。

int cons_col()
{
    for( int col = 0; rx_state_ == MAC_IDLE; col++ )
    {
       return col;
       // "return" prevents this loop from finishing its first pass,
       // so "col++" (above) is NEVER called. 
    }
    // What happens here?  What int gets returned?
}

请注意,此功能始终立即完成。

这样做:

  • 将整数col设置为0
  • 如果rx_state_MAC_IDLE,则检查一次
  • 如果是,则返回0
  • 如果不是,则转到// What happens here?,然后到达非空函数的末尾而不返回任何内容。

根据你的描述,你可能想要这样的东西。

int cons_col()
{
    int col = 0;
    for( ; rx_state_ != MAC_IDLE; col++ )
    {
       // You may want some type of sleep() function here.
       // Counting as fast as possible will keep a CPU very busy
    }
    return col;
}