控制可能达到非空函数的结束[-Werror,-Wreturn-type]

时间:2018-01-21 07:06:36

标签: c

我在功能方面遇到了一些问题。我相信这可能是因为我没有正确使用它们。我的代码如下:

int duration(string fraction)
{
    // X part of the fraction
    int numerator = fraction[0];
    // Y part of the fraction
    int denominator = fraction[2];
    // Checking for eighth note, quarter note and half note
    if (numerator == 1)
    {
        switch (denominator)
        {
            case 8:
            return 1;
            case 4:
            return 2;
            case 2:
            return 4;
       }
    }
    // Checking for dotted quarter note
    else
        return 3;
}

我的代码中出现此问题的原因是什么:

错误:控件可能会达到非空函数的结束       [-Werror,-Wreturn型]

2 个答案:

答案 0 :(得分:2)

numerator1denominator10然后它不会返回任何内容时会发生什么情况 - 并且考虑到它将返回某些内容而使用该函数将导致未定义行为。

这就是警告的全部内容。

有很多方法可以解决这个问题 - 在default语句中添加switch个案例或在函数中放置一个return语句(这可能会指定发生的一些错误事件)。您将返回的值是根据函数返回的值选择您的值。这是一个完全不同的讨论。

    ...
    if (numerator == 1)
    {
        switch (denominator)
        {
            case 8:
            return 1;
            case 4:
            return 2;
            case 2:
            return 4;
            default:
            return -1; // whatever value satisfies your application's need. 
       }
    }
    ...

答案 1 :(得分:0)

如果denominator的值不是2,4,8,则会以下面的评论结束。

(假设numerator是1)

在那里放一个退货声明!

int duration(string fraction)
{
// X part of the fraction
int numerator = fraction[0];
// Y part of the fraction
int denominator = fraction[2];
// Checking for eigth note, quatar note and half note
if (numerator == 1)
{
    switch (denominator)
    {
        case 8:
        return 1;
        case 4:
        return 2;
        case 2:
        return 4;
   }
   // Got here and about to leave function without a return value
}
// Checking for dotted quater note
else
    return 3;
}