注释在运行时是否可以产生任何影响
Can comments make any difference during the run-time?
阅读我听到的最好的评论是什么?这条评论被投了201次:
很久以前,我不小心在Java3D中添加了一个segfault议论它具有100%的可重复性;如果我删除了评论,它坠毁。只要评论还在,它就很好。我想是的这是一个奇怪的时间问题,但我从来没有弄清楚到底是什么正在发生。
这可能吗?
如果他在Java3D中修复segfault,我猜他是在用Java或C/C++编写代码。我认为在这些语言中的任何一种语言中,评论都会在编译前被删除。。。
正如您所说,在Java中,注释不包括在编译的字节码中。例如,采用以下类:
public class test {
public void methodWithoutComment() {
System.out.println("This method does not have a comment");
}
public void methodWithComment() {
// Method with comment
System.out.println("This method has a comment");
}
}
如果我们使用javap
和javap -c test
内省字节码,我们可以看到两种方法的字节码是相同的——除了输出到控制台的字符串:
public class test {
public test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void methodWithoutComment();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String This method does not have a comment
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
public void methodWithComment();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #5 // String This method has a comment
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
我以为在任何一种语言中,评论都会被删除在编译之前。。。
看起来可能是这样,但不幸的是,这个看起来无害的Hello World
程序甚至无法编译。
为什么?因为注释。罪魁祸首是源的路径。具体地说,users
。反斜杠后面跟着字母
u
,表示Unicode转义的开始。尾随的sers
使其成为一个格式错误的Unicode转义。(如果u
后面跟着4个十六进制数字,那也没关系——是的,即使在注释中也需要。)
因此,由于注释,代码甚至不会编译。
public class HelloWorld {
/**
* Source: C:usersdevnullHelloWorld.java
*/
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
这里有两种解释。
第一,记者错了。他们没有进行他们认为正在进行的编辑,或者编译或执行错误,或者错误不稳定,偶然与他们的编辑相吻合,等等。
第二,编辑删除了看起来像注释的内容,但实际上它与其他语法进行了交互。例如,考虑:
/* Start comment.
…
/* Not a new comment. */
… Some code here …
/* Sometimes a comment. */
当出现"Not a new comment"行时,"Some code here"是不属于注释的源代码。当"不是新注释"行不存在时,"此处的某些代码"就是注释的一部分。
别这么认为。为了运行Java程序,它应该编译成字节码,这样在编译过程中注释会被删除,不会影响程序的执行。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 是否有任何区域设置会影响宽字符编码?
- 为什么 std::move 对 std::unique_lock 没有任何影响?
- 当在循环中使用时,std::shared_ptr 对该循环的矢量化有任何影响吗?
- 这会对代码产生任何影响吗?
- 与任何算术操作员都会影响优化的恒定操作数顺序
- C/C++:-msse 和 -msse2 标志对二进制文件没有任何影响
- 注释在运行时是否可以产生任何影响
- 公共和私有对对象的内存布局是否有任何影响
- 对自我的 typedef 是否有任何影响
- 包含每个标头是否有任何性能影响
- 以下任何配置都会影响发布版本的性能吗
- 当调用放置新时,强制投射指向"void*"的指针是否有任何影响?
- 在程序结束后,内存泄漏有任何影响吗?
- "explicit"关键字对默认构造函数有任何影响吗?
- signal():任何性能影响