gpt4 book ai didi

Java 编译器 : Stop complaining about dead code

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:34 25 4
gpt4 key购买 nike

出于测试目的,我经常开始在现有项目中键入一些代码。因此,我要测试的代码先于所有其他代码,如下所示:

public static void main(String[] args)
{
char a = '%';
System.out.println((int)a);
// To know where '%' is located in the ASCII table.

// But, of course, I don't want to start the whole project, so:
return;

// The real project starts here...
}

但编译器会提示 return 语句,因为下面是“死代码”。 (而在 C++ 中,编译器服从程序员并简单地编译 return 语句)

为了防止编译器报错,我写了一个愚蠢的if语句:

if (0 != 1) return;

我讨厌它。为什么编译器不能按我的要求做?是否有一些编译标志或注释或其他任何东西可以解决我的问题?

谢谢

最佳答案

没有标志可以关闭此行为。使死代码成为编译时错误的规则是 part of the JLS (§14.21 Unreachable Statements)并且无法关闭。

循环中有一个明显的漏洞,允许这样的代码:

if (true) return;

someOtherCode(); // this code will never execute, but the compiler will still allow it

这是显式完成的,以允许“注释掉”或条件编译(取决于一些static final boolean 标志)。

如果你很好奇:这个漏洞是基于这样一个事实,即在检查时 if 语句的条件表达式的已知常量值被考虑if 语句内或之后代码的可达性。类似的情况发生在 while 中,其中 考虑了已知常量值,因此这段代码将无法编译:

while (true) return;

someOtherCode(); // this will be flagged as an unreachable statement

关于Java 编译器 : Stop complaining about dead code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com