Предварительная обработка и компиляция дизайна компилятора - PullRequest
0 голосов
/ 09 апреля 2019

Здесь написано , что одним из многих заданий препроцессора является:

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

Проходит ли содержимое в заголовочных файлах лексический анализатор, синтаксический анализатор или семантический анализатор, прежде чем он будет использован в нашем коде?Если нет, то как компилятор сообщал о любых ошибках в заголовочном файле, прежде чем сообщать об ошибках в «коде, написанном программистом»?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Нет.Препроцессор просто вставляет включенный файл в ваш код, а затем выполняет лексический анализ и т. Д. Получающегося «большого шарика».

В действительности препроцессор, вероятно, не создает весь «большой шарик»,он просто выполняет лексический анализ, чтобы создать поток токенов, которые могут быть переданы на более поздние этапы компиляции.

Большинство компиляторов позволяют генерировать «большой двоичный объект» (gcc использует опцию -E) - этосоздаст файл со всем вашим кодом и всем включенным кодом и, возможно, с некоторыми дополнительными маркерами «cpp добавили», такими как номера строк из исходного файла и т. д., чтобы помочь с отчетами об ошибках.

Причина, по которой ошибки из включенных файлов появляются первыми, заключается в том, чтопотому что они встречаются в первую очередь компилятором.

0 голосов
/ 01 мая 2019

препроцессор также интерпретирует директивы препроцессора, чтобы определить, какие файлы включать и какие части этого файла, а затем передает большой двоичный объект.

...