错误:控制可能达到无效功能/

时间:2013-09-30 21:30:41

标签: c++ function controls warnings void

不要理解为什么我会收到警告“#Control;控制可能会达到无效功能的结束。"有什么建议吗?

这是我的代码:

long double geo_fn(long reps, int seed) {
    double x, y, pythag_sum, total = 0, inside = 0;
    default_random_engine engine(seed);             
    uniform_real_distribution<double>dist(0,1);

    for(int i = 0; i< reps ;i++){
        x = dist(engine);
        y = dist(engine);
        pythag_sum = (x*x)+(y*y);
        if (pythag_sum <= 1){
            inside += pythag_sum;
            total += pythag_sum;
        }
        else {
            total += pythag_sum;
         }
     return (inside/total)/10;
     }
}

3 个答案:

答案 0 :(得分:8)

如果使用第一个参数0调用该函数,则永远不会执行循环,因此永远不会达到return语句。非void函数结束的下降是未定义的行为。

我的个人猜测是return语句意味着向上一级,即在out区域中:这将保证函数始终返回一个值,警告就会消失。

答案 1 :(得分:3)

你必须确保,无论你的期望是什么,总会有东西返回,因为你声明你的函数返回类型为非void。 对于此代码,您将需要在“else”情况下发生的return语句

Image* Image::findAndClone( imageType type )
{

    if (_prototypes[i]->returnType() == type)
        return _prototypes[i]->clone();

};

它将是:

Image* Image::findAndClone( imageType type )
{

    if (_prototypes[i]->returnType() == type)
        return _prototypes[i]->clone();
    else return NULL;

};

在“for”循环的情况下,循环有可能在“i&lt; _nextSlot”处中断而不实际返回任何内容。编译器无法分辨。所以你需要提供一个return语句来捕获“for”循环“永不执行”的情况。

Image* Image::findAndClone( imageType type )
{
    for (int i=0; i < _nextSlot; i++)
            return _prototypes[i]->clone();
    return NULL;
};

那么这只是结合两者的最后一个例子:

Image* Image::findAndClone( imageType type )
{
    for (int i=0; i < _nextSlot; i++)
        if (_prototypes[i]->returnType() == type)
            return _prototypes[i]->clone();
    return NULL;
};

答案 2 :(得分:0)

确保在for循环之前添加无效参数检查。如果传递的参数之一具有无效值,请确保该函数将返回错误代码。