为什么这个程序显示 "unreachable code" 警告?我该如何抑制它?
Why is this program showing "unreachable code" warning? And how do I suppress it?
#include<iostream.h>
#include<conio.h>
#include<process.h>
void function(void);
int main(void)
{
clrscr();
int ch;
while(1)
{
cin>>ch;
if(ch==2)
exit(0);
else
function();
}//while
return 0;
}//main
void function(void)
{
cout<<"Hello";
return;
}
上面的代码工作正常,但为什么我会收到 "unreachable code" 警告?我真的不明白我做错了什么。当我 comment/remove main()
中的 return 0;
语句时,编译器没有显示警告。为什么会这样?请告诉我哪里做错了,正确的做法是什么。
while (1)
循环没有退出的选项。
因此,exit(0)
未被识别,因为数据流分析未将其视为跳转到 while (1)
代码后面的选项(实际上它没有)。
因此,无法到达 return 0;
。
如果您将 exit(0)
替换为 break
,它就会发生变化。 break
将导致离开 while (1)
并且 return 0;
变得可访问。
why I'm getting the "unreachable code" warning? I really don't understand what am I doing wrong.
循环没有return条件:while(1)
并且循环体不包含会跳出循环的break
(或goto
)否则。尽管如此,您在循环后有一个 return 0;
语句。由于执行永远不会跳出循环,所以永远无法到达return语句。
编译器警告您该行对程序的行为没有影响,因为执行永远无法到达它。您可以通过以可能跳出循环的方式更改程序逻辑来消除警告。我建议如下:
if(ch==2)
break;
else
function();
The compiler shows no warning when I comment/remove the return 0; statement in main(). Why is it so?
该语句是警告所指的 "unreachable code"。如果没有无法访问的代码,则无需警告。
删除线是安全的。 main
的特殊之处在于它在没有 return 语句的情况下隐式地 returns 0(如果您的程序从 main
执行过 returns从来没有)。
#include<iostream.h>
#include<conio.h>
#include<process.h>
void function(void);
int main(void)
{
clrscr();
int ch;
while(1)
{
cin>>ch;
if(ch==2)
exit(0);
else
function();
}//while
return 0;
}//main
void function(void)
{
cout<<"Hello";
return;
}
上面的代码工作正常,但为什么我会收到 "unreachable code" 警告?我真的不明白我做错了什么。当我 comment/remove main()
中的 return 0;
语句时,编译器没有显示警告。为什么会这样?请告诉我哪里做错了,正确的做法是什么。
while (1)
循环没有退出的选项。
因此,exit(0)
未被识别,因为数据流分析未将其视为跳转到 while (1)
代码后面的选项(实际上它没有)。
因此,无法到达 return 0;
。
如果您将 exit(0)
替换为 break
,它就会发生变化。 break
将导致离开 while (1)
并且 return 0;
变得可访问。
why I'm getting the "unreachable code" warning? I really don't understand what am I doing wrong.
循环没有return条件:while(1)
并且循环体不包含会跳出循环的break
(或goto
)否则。尽管如此,您在循环后有一个 return 0;
语句。由于执行永远不会跳出循环,所以永远无法到达return语句。
编译器警告您该行对程序的行为没有影响,因为执行永远无法到达它。您可以通过以可能跳出循环的方式更改程序逻辑来消除警告。我建议如下:
if(ch==2)
break;
else
function();
The compiler shows no warning when I comment/remove the return 0; statement in main(). Why is it so?
该语句是警告所指的 "unreachable code"。如果没有无法访问的代码,则无需警告。
删除线是安全的。 main
的特殊之处在于它在没有 return 语句的情况下隐式地 returns 0(如果您的程序从 main
执行过 returns从来没有)。