为什么该程序显示“无法访问的代码”警告?以及我如何抑制它?

时间:2018-09-17 15:59:42

标签: c++ function return turbo-c++ unreachable-code

#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()语句时,编译器未显示警告。为什么会这样呢?请告诉我我做错了什么,做对的正确方法是什么。

2 个答案:

答案 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返回,而您的程序从不执行)。

相关问题