我在功能方面遇到了一些问题。我相信这可能是因为我没有正确使用它们。我的代码如下:
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型]
答案 0 :(得分:2)
当numerator
为1
且denominator
为10
然后它不会返回任何内容时会发生什么情况 - 并且考虑到它将返回某些内容而使用该函数将导致未定义行为。
这就是警告的全部内容。
有很多方法可以解决这个问题 - 在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;
}