2009-06-15 23 views
0

Visual Studio 2005のcl.exeコンパイラを使用しています。/I/Dといくつかのコンパイル/最適化フラグ(例:/ Ehsc)を付けて呼びます。cl.exe/E出力が同じでフラグが同じ場合のオブジェクトファイルの相違

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

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

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

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

答えて

0

私の推測では、あなたのコードが順番に依存するいくつかのプリプロセッサ定数を定義しますに。実行可能ファイルの動作が異なることは既に述べました。異なるコードを使用している場合は、オブジェクトファイルのサイズが異なる場合があります。

その場合、/ の出力が異なるはずはありませんか?/Eフラグを指定すると、プリプロセッサの出力が になります。

良い点!したがって、/ Pを使用する場合(/ Eと同じですがファイルにする)、生成されるファイルはまったく同じですか?

+0

この場合、/ E出力が異なるはずはありませんか?/Eフラグは、プリプロセッサの出力を示します。 –

関連する問題