不同的源代码可以生成相同的可执行文件/二进制文件吗?
这可能吗?
答案 0 :(得分:6)
是。编译器可以进行大量优化,不同的源代码可以映射到相同的目标代码。这里有几个简单的例子。请注意,这些都取决于语言。
答案 1 :(得分:4)
是。 例如
int nabs1(int a){
return -abs(a);
}
int nabs2(int a){
return(a<0) ? a : -a;
}
gcc -O6生成相同的代码:
_nabs1:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
popl %ebp
movl %edx, %eax
sarl $31, %eax
xorl %eax, %edx
subl %edx, %eax
ret
.p2align 4,,15
.globl _nabs2
.def _nabs2; .scl 2; .type 32; .endef
_nabs2:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
popl %ebp
movl %edx, %eax
sarl $31, %eax
xorl %eax, %edx
subl %edx, %eax
ret
答案 2 :(得分:1)
这取决于你如何定义相似的。可以在Java或C#中进行微小的更改,并使其生成相同的字节码。
例如,在C中,我希望如果我对文字字符串使用预处理命令,或者直接使用文字字符串,那么生成的代码将是相同的但源不同。