logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.16.1 Фазы препроцессорной обработки

По определению существует несколько фаз препроцессорной обработки.

В конкретной реализации фазы могут сливаться, но результат все равно

должен быть таким, как будто были выполнены все фазы.

Перечислим их.

При необходимости символы, зависящие от системы символы, обозначающие

конец строки, заменяются на стандартный символ конца строки. Аналогичной

замене подлежат все зависящие от системы символы. Определенные

последовательности символов (триграфы) заменяются на эквивалентный

им отдельный символ ($$R.16.2).

Удаляются все такие пары символов: обратная дробная черта, следующий

за ней символ конца строки. В результате будут слиты строки входного

текста, из которых была удалена эта пара.

Входной текст разбивается на лексемы препроцессора и последовательность

обобщенных пробелов. Каждый комментарий заменяется на один пробел.

Входной текст не должен кончаться посреди лексемы или комментария.

Выполняются команды препроцессора, и производятся макроподстановки

($$R.16.3, $$R.16.4, $$R.16.5, $$R.16.6, $$R.16.7 и $$R.16.8).

В символьных константах и строках литералов комбинации специальных

символов заменяются на свои эквиваленты ($$R.2.5.2).

Сливаются соседние строки литералов.

Результат препроцессорной обработки подвергается синтаксическому

и семантическому анализу, транслируется, а затем связывается с

необходимыми библиотеками и другими программами.