#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;
}
上面的代码工作正常,但是为什么我收到“无法访问的代码”警告?我真的不明白我在做什么错。当我注释/删除return 0;
中的main()
语句时,编译器未显示警告。为什么会这样呢?请告诉我我做错了什么,做对的正确方法是什么。
答案 0 :(得分:3)
while (1)
循环没有其他选择。
因此,exit(0)
无法识别,因为数据流分析并不认为它是跳至while (1)
之后的代码的一种选择(实际上不是这样)。
因此,无法到达return 0;
。
如果将exit(0)
替换为break
,则它会更改。 break
将导致离开while (1)
,并且return 0;
可以到达。
答案 1 :(得分:3)
为什么我收到“无法访问的代码”警告?我真的不明白我在做什么错。
该循环没有返回条件:while(1)
,并且循环主体不包含会以其他方式跳出循环的break
(或goto
)。尽管如此,循环后仍然有一个return 0;
语句。由于执行永远不会跳出循环,因此永远无法到达return语句。
编译器警告您该行对程序的行为没有影响,因为执行永远无法达到目的。您可以通过可能会跳出循环的方式更改程序逻辑来摆脱警告。我建议:
if(ch==2)
break;
else
function();
当我注释/删除返回值0时,编译器不显示任何警告; main()中的语句。为什么会这样?
该语句是警告所指的“无法访问的代码”。如果没有无法访问的代码,则无需警告它。
删除该行是安全的。 main
的特殊之处在于,它在没有return语句的情况下隐式返回0(如果执行曾经从main
返回,而您的程序从不执行)。