【问题标题】:Why can't compilers handle unreachable code? [duplicate]为什么编译器不能处理无法访问的代码? [复制]
【发布时间】:2016-02-26 19:46:26
【问题描述】:

我为 java 开发者使用 eclipse IDE

编辑:我应该只指 eclispe IDE,因为不同语言的其他编译器只会给出警告并且可以处理代码

我知道什么会导致这个错误(无法访问的代码),但是为什么它作为错误而不是警告存在?什么是编译器无法处理无法访问的代码?

Unreachable code: error or warning? 我见过这个问题,但它没有回答为什么编译器不能处理不可访问以及为什么它必须给出错误。

我认为它肯定可以编译它并且永远不会到达已编译程序中的代码,但显然编译器(我使用 eclipse for java)不允许它。

【问题讨论】:

  • Java 是很多人最先学习的语言,至少现在是这样。也许设计者考虑到了这一点,并决定限制人们使用无法访问的代码,即使它实际上并没有受到伤害。不妨教这些编程新手不要有无法访问的代码。新手可能倾向于忽略警告,因为他们对完成任务/项目非常兴奋。
  • 您的问题似乎是基于错误的假设。如果您查看this question,您会发现在 C/C++ 中,死代码确实是一个警告,编译器能够处理它。 (这里的处理意味着要么消除它,要么忽略它)
  • 顺便说一句,这是一个设计决策,而不是技术决策;并不是编译器“无法处理”,而是 Java 编译器设计试图完全避免警告,因为它们通常被用户忽略。在引入泛型之前,根本没有任何警告。现在,如果忽略泛型的语义,它会发出一些警告。

标签: java c++ eclipse compiler-errors


【解决方案1】:

简单地说,如果他们不能,那是因为他们被设计成不能这样做。

大多数人都同意它应该只是一个警告。 Java 不将此视为警告的原因是因为它被设计为错误。来自Java Language Specification for J7SE

"如果由于无法访问而无法执行语句,则为编译时错误。"

某些语言只会抛出警告(即 C#),但 Java 的设计并非如此。

【讨论】:

  • 值得一提的是,如果您愿意,Eclipse 允许您将其配置为警告而不是错误。我不推荐它,但这是可能的。因此,编译器可以“处理”它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2014-10-03
相关资源
最近更新 更多