我创建了两个C程序
程序1
int main() { }
程序 2
int main()
{
//Some Harmless comments
}
AFAIK,编译时编译器(gcc)应忽略注释和冗余空格,因此输出应该是相似的。但是当我检查输出二进制文件的md5值时,它们不匹配。我还尝试了使用优化标志 -O3 和 -Ofast 进行编译,但仍然无法匹配。请问这里发生了什么?编辑:精确命令及其md5sums如下(t1.c 是程序 1,t2.c 是程序 2)。gcc ./t1.c -o aaa
gcc ./t2.c -o bbb
98c1a86e593fd0181383662e68bac22f aaa
c10293cbe6031b13dc6244d01b4d2793 bbb
gcc ./t2.c -Ofast -o bbb
gcc ./t1.c -Ofast -o aaa
2f65a6d5bc9bf1351bdd6919a766fa10 aaa
c0bee139c47183ce62e10c3dbc13c614 bbb
gcc ./t1.c -O3 -o aaa
gcc ./t2.c -O3 -o bbb
564a39d982710b0070bb9349bfc0e2cd aaa
ad89b15e73b26e32026fd0f1dc152cd2 bbb
是的,在使用相同标志编译的多个版本之间,md5sums匹配。
顺便说一下,我的系统是gcc(GCC)5.2.0
和Linux 4.2.0-1-MANJARO#1 SMP PREEMPT x86_64 GNU / Linux