J'ai donc créé deux programmes C
-
Programme 1
int main() { }
-
Programme 2
int main() { //Some Harmless comments }
AFAIK, lors de la compilation, le compilateur (gcc) devrait ignorer les commentaires et les espaces blancs redondants, et donc la sortie doit être similaire.
Mais quand j'ai vérifié les md5sums des binaires de sortie, ils ne correspondent pas. J'ai également essayé de compiler avec l'optimisation -O3
y -Ofast
mais ils ne correspondaient toujours pas.
Alors, qu'est-ce qui se passe ici ?
EDIT : les commandes exactes et leurs md5sums sont (t1.c est le programme 1 et t2.c le programme 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
Et oui, les md5sums correspondent à travers plusieurs compilations avec les mêmes drapeaux.
BTW mon système est gcc (GCC) 5.2.0
y Linux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux