0

VisualStudio2005のcl.exeコンパイラを使用しています。たくさんの/I/ Dといくつかのコンパイル/最適化フラグ(例:/ Ehsc)を使用して呼び出します。

2つのコンパイルスクリプトがあり、どちらも/ Iフラグのみが異なります(インクルードディレクトリは異なります)。他のすべてのフラグは同じです。これらのスクリプトは、さまざまなオブジェクトファイルを生成します(以下に示すように、タイムスタンプの違いだけではありません)。奇妙なことに、両方のスクリプトの/E出力が同じです。これは、インクルードファイルがオブジェクトファイルの違いを引き起こしていないことを意味しますが、繰り返しますが、違いはどこから来ているのでしょうか?

私の状況で2つの異なるオブジェクトファイルがどのように表示されているかを誰かが説明できますか?インクルードファイルが違いを引き起こしている場合、どうして同じ/ E出力が表示されるのですか?

PS。オブジェクトファイルは、タイムスタンプだけでなく、コードセクションでも異なります。実際、私の最終的な実行可能ファイルの動作は、どちらの場合も異なります。

編集:PSS:cl.exeの/ includeFiles出力を見ても、その出力は同じです。ただし、オブジェクトファイルはタイムスタンプだけでなく異なります(実際、1つはもう1つより1KB大きいです!)

4

1 に答える 1

0

私の推測では、コードが依存するいくつかのプリプロセッサ定数を #define するヘッダー ファイルをインクルードしていると思われます。実行可能ファイルの動作が異なることは既に述べました。コードが異なる場合は、もちろんオブジェクト ファイルのサイズが異なる可能性があります。

だとしたら、/E の出力が違うのではないでしょうか? /E フラグは、プリプロセッサの出力を示します。

いい視点ね!/P (/E と同じですが、ファイルに) を使用すると、生成されるファイルはまったく同じになりますか?

于 2009-06-15T21:24:38.080 に答える