得到警告:控件到达while_loop函数中非void函数[-Wreturn类型]的末尾



有人能告诉我应该如何修复这个错误吗?我不能单独打印10到19的数字。

# include <iostream>
using namespace std;
int while_loop(int a)
{
a = 10;
while (a < 20)
{
a++ ;
return a;
}
}
int main()
{
int a, result;
result = while_loop(a);
cout << "The result of while_loop is : " << result << endl;
return 0;
}

在这种情况下,编译器并不完美:

int while_loop(int a)
{
a = 10;
while (a < 20)
{
a++ ;
return a;
}
}

由于最初将a设置为10,因此此循环将始终终止(仅在一次迭代之后(。但是,在一般情况下,while循环将运行多次或从不运行,这意味着您需要在循环之后添加return语句。

您编写的代码不使用循环,因为由于循环中有无条件的return a;,所以它总是返回11。你想要的可能是:

while (a < 20)
{
a++;
}
return a;

此外,主函数将一个未初始化的值传递给循环函数:

int a, result; // change that to int a = 10
result = while_loop(a);

然后您可以从函数内部删除CCD_ 3。

错误1

当你写道:

int a, result;
result = while_loop(a);//UNDEFINED BEHAVIOR

变量aresult具有不确定值,因为它们是内置类型(在本地范围内(,并且您尚未初始化它们。使用这些未初始化的变量会导致未定义的行为。因此while_loop(a)导致了未定义的行为。

解决此问题,应将a初始化为10,如下所示。

int a =10, result;//INITIALIZED a to 10
result = while_loop(a);

错误2

while_loop函数中,如果条件while (a < 20)不满足,则控制流将不会遇到任何return语句,因此您会收到上述警告。

解决此问题,您可以将return a;移动到while循环之外,如下所示:

int while_loop(int a)
{
//a = 10;//NO NEED FOR THIS
while (a < 20)
{
a++ ;

}
return a;//return moved outside while
}

已更正程序

所以修改后的程序看起来像:

# include <iostream>
using namespace std;
int while_loop(int a)
{
//a = 10;NO NEED FOR THIS
while (a < 20)
{
a++ ;

}
return a;//return MOVED OUTSIDE while
}
int main()
{
int a = 10, result;//INITIALIZE a to 10
result = while_loop(a);
cout << "The result of while_loop is : " << result << endl;
return 0;
}

最新更新