두 개의 C 프로그램을 만들었습니다.
프로그램 1
int main() { }
프로그램 2
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는 동일한 플래그를 사용하는 여러 컴파일에서 일치합니다.
BTW 내 시스템이 gcc (GCC) 5.2.0
와Linux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux