我知道断言可以在运行时启用/禁用,分别用于调试和生产。但是我发现断言也会增加生成的二进制文件的大小(在下面的示例中约为 100-200 个字节)。
在 C 和 C++ 中,我们可以在编译时通过#define NDEBUG
before来执行此操作#include <assert.h>
。
Java 编译器有没有办法自动执行此操作?我想将它们留在源代码中,以便稍后进行调试。但我也不希望生成的二进制文件比必要的大(我们有一个大小限制作为设计要求)。
C代码:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
Java代码:
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
回应 bn. 的回答:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
编辑:事实上,在我看来,这种启用/禁用是一个比运行时更有用的编译时特性。我的意思是,有多少最终用户将启用它们?就调试过程中的程序员而言,他/她可能无论如何都会重新编译代码。