2つのCプログラムを作成しました
プログラム1
int main() { }
プログラム2
int main() { //Some Harmless comments }
私の知る限り、コンパイルするとき、コンパイラ(gcc)はコメントと冗長な空白を無視する必要があるため、出力は類似している必要があります。
しかし、出力バイナリのmd5sumsを確認したところ、一致していません。また、最適化-O3
を使用してコンパイルしようとしました-Ofast
が、それでも一致しませんでした。
ここで何が起きてるの?
編集:正確なコマンドとそこにあるmd5sumsがあります(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