cl.exe Разница в объектных файлах, когда вывод / E одинаков и флаги одинаковы - PullRequest
0 голосов
/ 16 июня 2009

Я использую компилятор Visual.exe 2005 cl.exe. Я называю это с помощью набора / I / D и некоторых флагов компиляции / оптимизации (пример: /Ehsc).

У меня есть два сценария компиляции, и оба отличаются только флагами / I (включая разные каталоги). Все остальные флаги одинаковые. Эти сценарии создают разные объектные файлы (а не просто разницу во времени, как указано ниже). Странно то, что вывод / E обоих сценариев одинаков. Это означает, что включаемые файлы не вызывают различия в объектных файлах, но опять же, откуда эта разница?

Может кто-нибудь объяснить, как я вижу два разных объектных файла в моей ситуации. Если включаемые файлы вызывают разницу, почему я вижу идентичный вывод / E?

PS. Объектные файлы различаются не только по метке времени, но и по разделам кода. На самом деле поведение моего окончательного исполняемого файла в обоих случаях разное.

Редактировать: PSS: Я даже посмотрел на вывод / includeFiles файла cl.exe, и этот вывод идентичен. Однако объектные файлы отличаются не только отметкой времени (на самом деле один на 1 КБ больше другого!)

1 Ответ

0 голосов
/ 16 июня 2009

Я предполагаю, что вы включаете заголовочные файлы, которые #define определяют константы препроцессора, от которых, в свою очередь, зависит ваш код. Вы уже упоминали, что поведение вашего исполняемого файла отличается. Если у вас другой код, то, конечно, объектные файлы могут отличаться по размеру.

Если это так, не должен ли / E выходной будет разным? / E флаг дает выход препроцессора.

Хороший вопрос! Так что, если вы используете / P (то же самое, что и / E, но для файла), сгенерированные файлы в точности совпадают?

...