为什么这个程序显示 "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从来没有)。