【问题标题】:#if in java, like in c preprocessors [duplicate]#if 在 java 中,就像在 c 预处理器中一样
【发布时间】:2012-12-21 22:11:20
【问题描述】:

可能重复:
How to mark java code such that it’s not compiled

中,我们可以像这样阻止块代码的编译:

#if 0

    //code here

#endif

因此,即使代码块容易出错,代码也可以编译,我想要在 Java 中做同样的事情,这样我就可以跳过由于缺少某些库而无法编译的那部分代码。

谁能帮帮我?

【问题讨论】:

标签: c java android eclipse c-preprocessor


【解决方案1】:

Java 中没有预处理器。根据您的构建系统,您可能能够使用第三方预处理器(您可以通过搜索“java preprocessor”找到很多)。一些例子是

根据您要注释掉的范围,您可以使用块 cmets,有时也可以使用类似

if (false) {
    . . .
}

如果一切都失败了,只需使用// 注释掉每一行。大多数 IDE 都有办法有效地执行此操作(并撤消它)。

附:如果您可以使用块 cmets(并非总是可行,因为块 cmets 不能嵌套在 Java 中),那么有一个很好的技巧可以更轻松地关闭和打开注释部分。单独在一行上开始您的块注释,但以另一个以行注释开头的孤立行结束,如下所示:

/*
   <block of code ignored as comment>
//*/

然后,如果您想重新打开已注释掉的部分,只需在块的开头添加第二个 /

//*
   <block of code now active>
//*/

要再次关闭代码,只需删除第一个 /。 (如果在最后一行的开头没有//,当您通过在块的开头行添加/ 来激活代码时,悬空的*/ 将是语法错误。)

【讨论】:

【解决方案2】:

你必须注释掉代码,你不能在java中使用预处理指令。

【讨论】:

  • 答案有什么问题??
  • 甚至第一条评论都是一样的:)
  • @CharanPai,第一条评论是在我回答之后发表的,:) 看时间:)
  • @CharanPai,这是投反对票的原因吗?
  • 我没有投反对票:/我会投你的票:)实际上是正确的答案
【解决方案3】:

我假设编译器会剥离使用常量/最终标志强制执行的块内的代码?这就是您可以在项目中保留最终 apk 中未提供的代码的方法。

public final static boolean DEBUG = false;

if(DEBUG) {
    //add messy error prone code here
    //compiler will strip this out as unreachable when false
}

在这里阅读:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21

【讨论】:

  • "优化编译器可能意识到语句 x=3; 将永远不会被执行并且可能选择从生成的类文件”-这与您“将”的断言略有不同。 Eclipse中的Java编译器是否如此,我不知道。
  • 是的,这与 Dalvik 环境有关,但更多的是经验法则。不能确定一般性的声明,但我在评估 dex2jar 和检查时看到了这一点。如果您使用 Proguard,也可能会影响您的结果。
  • 好的。但是eclipse不允许我编译对吗?
  • 它在 Eclipse 中被称为构建,您可以在项目选项卡中将其设置为自动构建。这是编译项目的几种方法之一。不确定您的设置/环境。
  • 是的,正如@paxdiablo 所说,这与忽略代码块的预处理器指令不同。代码仍然需要编译/构建。由于错误而防止编译与剥离仍然编译的易出错代码不同。如果代码块有运行时问题,如果编译器剥离代码块,这将起作用。
【解决方案4】:

Java 没有与 C 类似的预处理器。

由于根据标签,您使用的是 Eclipse,您可以简单地标记要注释掉的整个代码块,然后使用 CTRL - /

您也可以使用相同的键序列来取消注释已注释掉的块。

【讨论】:

    【解决方案5】:

    我使用的一种技术是使用m4 作为java 文件的预处理器。您在classname.java.m4 中编写代码并使用 Makefile 或其他构建系统规则来运行 m4:

    %: %.m4
            @echo "/* automatically generated from $< -- don not edit*/" >$@
            m4 $< >>$@
    

    【讨论】:

      【解决方案6】:

      java 不提供预处理器功能。

      顺便说一句,您可以使用如下评论:

      您使用的是 Eclipse,您可以简单地标记要注释掉的整个代码块,然后使用 CTRL+SHIFT+C 来注释和取消注释代码块。

      【讨论】:

      • 这个答案只是抄袭@paxdiablo 下面的答案。
      • 其实并不是相当抄袭。评论击键是不同的,但我仍然更喜欢我的,因为它少了一个按键:-)
      • 如果代码本身包含块注释,则带有块 cmets 的周围代码将失败。此外,注释代码的official keyboard shortcut 是 CTRL+/(或 CTRL+SHIFT+/),而不是 CTRL+SHIFT+C。
      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2017-04-19
      • 2012-05-14
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多