我创建了两个 C 程序
程序 1
int main() { }
节目二
int main() { //Some Harmless comments }
AFAIK,编译时,编译器(gcc)应该忽略注释和多余的空白,因此输出必须相似。
但是当我检查输出二进制文件的 md5sum 时,它们不匹配。我也尝试使用优化进行编译,-O3
但-Ofast
它们仍然不匹配。
这里发生了什么?
编辑:确切的命令和 md5sum 是(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