Процесс компиляции в C ++ - PullRequest
       41

Процесс компиляции в C ++

2 голосов
/ 21 сентября 2010

Буду очень признателен, если кто-нибудь действительно сможет объяснить, что именно делает мой компилятор, когда я нажимаю кнопку BUILD, и компилятор начинает компилировать все мои файлы .h и .cpp, как именно происходит этот процесс (что у меня естьвнутри объектного файла?), почему я задаю такой вопрос?Я пытаюсь понять, что значит «минимизировать зависимости компиляции между файлами» из книги Мейерса о 50 конкретных способах ... (надеюсь, вы знаете об этой книге), там он объясняет, что это значит, абстрактный базовый класс и классы дескрипторов, как объяснил мне мой лектор, мне не нужно включать чрезмерные файлы .h и все, любые ссылки на процесс компиляции также будут оценены, заранее спасибо за любую помощь

Ответы [ 3 ]

5 голосов
/ 21 сентября 2010

При полной компиляции компилятор будет читать каждый файл .cpp по очереди.Для данного файла .cpp он затем будет читать каждый файл, на который ссылается директива #include, рекурсивно, компилируя код в процессе работы.Когда он компилирует следующий исходный файл, он будет читать файлы, на которые ссылается #include в этом исходном файле.

Когда вы вносите какие-либо изменения и делаете сборку, то если какой-либо из файлов, на которые ссылается #includeдиректива из вашего файла .cpp изменилась, затем файл .cpp будет перекомпилирован, как если бы изменился сам файл .cpp.

Ненужные директивы #include, таким образом, имеют две стоимости: во-первых, компилятор должен прочитать ипри компиляции обрабатывает больше файлов, и, во-вторых, увеличивает вероятность того, что ваш файл .cpp потребуется перекомпилировать, даже если ничего из того, что он на самом деле использует, не изменилось.

1 голос
/ 21 сентября 2010

См.

http://computer.howstuffworks.com/c2.htm для введения и

http://www.tenouk.com/ModuleW.html для углубленного описания

Кроме того, некоторые теоретические предпосылки могут бытьнайдено по адресу http://en.wikipedia.org/wiki/Compiler

0 голосов
/ 21 сентября 2010

Лучший способ понять, как работает компилятор, - это сначала понять, как работает ассемблер. Здесь есть достойное объяснение .

...