Neden'sadece yorumlar farklı program iki ikili t tam olarak gcc ile uyumlu olur?
İki C Program oluşturdum
Program 1
int main() { }
Program 2
int main() { //Some Harmless comments }
Derleme AFAIK, derleyici(gcc) Yorum yok sayıp whitepaces yedek gerekir, ve bu nedenle çıkış benzer olması gerekir.
Ama çıkış ikili md5sums kontrol ettiğimde, onlar uyuşmuyor. Ben de optimizasyonu -O3
-Ofast
ile derleme çalıştı ama onlar hala eşleşmedi.
Burada neler oluyor?
EDİT: komutları ve orada tam md5sums(t1.c program 1 ve t2.c program 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
Ve evet, md5sums maç aynı bayrakları ile birden çok derleme karşısında.
Benim sistem BTW gcc (GCC) 5.2.0
Linux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux
CEVAP
Dosya isimleri farklı dizeler çıktı aynı olmasına rağmen). Dosyayı kendisi (yerine iki dosya olması) değiştirmeye çalışırsanız, çıkış ikili artık farklı olduğunu fark edeceksiniz. Hem Jens, GCC dökümleri oluşturur ikili meta verileri bir sürü çünkü dedim, including the exact source filename (ve AFAİCS çok çınlama yapıyor).
Bunu deneyin:
$ cp code.c code2.c subdir/code.c
$ gcc code.c -o a
$ gcc code2.c -o b
$ gcc subdir/code.c -o a2
$ diff a b
Binary files a and b differ
$ diff a2 b
Binary files a2 and b differ
$ diff -s a a2
Files a and a2 are identical
Bu md5sums yapılar arasındaki değişmez açıklıyor, ama farklı dosyalar arasında farklıdır. Eğer isterseniz, Jens önerisi ne ve dosya ikili gömülü olduğunu fark edeceksiniz her bir ikili için strings
çıkış karşılaştırabilirsiniz. "Eğer" bu, 14 ** ikili dosyaları ve meta verileri kaldırılır: . düzeltmek isterseniz
$ strip a a2 b
$ diff -s a b
Files a and b are identical
$ diff -s a2 b
Files a2 and b are identical
$ diff -s a a2
Files a and a2 are identical
Neden benim program tam olarak 8192 el...
Neden't ondalık sayılar ikili düz...
Neden NULL işaretçiler farklı C ve C o...
e-posta / olmadan farklı bir kullanıcı...
Neden Gıt bu ikili bir metin dosyası o...