C# 如果我在源代码中插入注释,它的二进制文件MD5会被更改吗?

C# 如果我在源代码中插入注释,它的二进制文件MD5会被更改吗?,c#,java,c++,c,md5,C#,Java,C++,C,Md5,我只是想知道。。。。 如果是这样的话,我想为我出售软件的每个客户创建不同的研究,我能用MD5检查每一个吗?只是在源代码中更改注释并重新编译?我的意思是,在C++、C或Java代码中的java注释是否会改变二进制的MD5?< p>注释在编译过程中(或之前)被删除,因此插入注释不会改变编译后的二进制文件的哈希值。 唯一的例外(我能想到的)是,如果二进制文件包含行号,则行号可以根据注释进行更改。通常情况下,当你在调试模式编译时,这也会发生,但是你也可以用C++中的“代码>但即使在这种情况下,注释的内容

我只是想知道。。。。
如果是这样的话,我想为我出售软件的每个客户创建不同的研究,我能用MD5检查每一个吗?只是在源代码中更改注释并重新编译?我的意思是,在C++、C或Java代码中的java注释是否会改变二进制的MD5?

< p>注释在编译过程中(或之前)被删除,因此插入注释不会改变编译后的二进制文件的哈希值。
唯一的例外(我能想到的)是,如果二进制文件包含行号,则行号可以根据注释进行更改。通常情况下,当你在调试模式编译时,这也会发生,但是你也可以用C++中的“代码>但即使在这种情况下,注释的内容也无关紧要,只是它占用了多少行(因此,您也可以使用空行)。此外,发布的软件可能不应该包含这些信息。

在某些情况下,如果有构建时间戳,每个构建的二进制文件都会更改。这可以提供您想要的可追溯性。但是,注释不应影响发布模式二进制文件的MD5,除非您的编译器有缺陷。

注释不能编译为cpu操作码,因此它不会更改blob的哈希。

简短回答是否。注释在编译过程中很早就被删除

较长的答案是,有时——但不可靠。评论的残余(更像是副作用)可能会出现一些可预见的原因。然而,这些充其量是脆弱的


我假设这是为了某种自动化过程,比如在网站上销售软件。输出像“user.h”这样的头文件,将名称/电子邮件/用户名/等简单地指定为一个#define'd字符串,然后在程序的about屏幕的某个地方打印出来如何(既为了用户的利益,也为了编译器不会对其进行优化)?它要求您为每个用户重新编译您的程序,但如果只需几秒钟即可编译,则这可能不是问题。

它可以更改二进制文件


例如,在C/C++中,例如有宏。如果在代码中使用此选项,则如果添加或删除带有注释的行,将更改二进制文件。

对不起,这是错误的。在C/C++中,注释不会被剥离,而是被空格替换,不会影响二进制文件。但至少还有一种方式可能会影响二进制文件。是的,你说它只发生在编译过的二进制文件中。这不是真的,不是一个人的感受。这都是关于事实的答案。事实上,这一行在绝大多数C/C++项目中都不例外。你见过没有行号的断言吗?这可能很愚蠢:)真正的答案可能是“是的,它很有可能会更改二进制文件,但逻辑是相同的”。断言实际上是只在调试模式下出现的构造的典型示例。如果编译器构建不同的二进制文件并在需要时添加注释,则没有任何问题。@stefan,我澄清说我考虑的是发布模式。不,但它确实会影响行号和文件被修改的时间等。