1 Обзор
Препроцессор C, часто известный как cpp, — это макропроцессор, который автоматически используется компилятором C для преобразования вашей программы перед компиляцией. Он называется макропроцессором, потому что позволяет определять макросы, которые являются краткими аббревиатурами для более длинных конструкций.
Препроцессор C предназначен для использования только с исходным кодом C, C++ и Objective-C. В прошлом он злоупотреблялся как общий текстовый процессор. Он будет сбоить на вводе, который не подчиняется лексическим правилам C. Например, апострофы будут интерпретироваться как начало символьных констант и вызывать ошибки. Кроме того, вы не можете полагаться на него для сохранения характеристик ввода, которые не важны для языков семейства C. Если Makefile предварительно обрабатывается, все жесткие табуляции будут удалены, и Makefile не будет работать.
Сказав это, вы часто можете обойтись использованием cpp для вещей, которые не являются C. Другие языки программирования семейства Algol часто безопасны (Pascal, Ada и т. д.). Также это относится к ассемблеру, но с осторожностью. Режим -traditional-cpp сохраняет больше пробелов и в остальном более допускает. Многие проблемы можно избежать, написав комментарии в стиле C или C++ вместо комментариев родного языка и сохраняя макросы простыми.
В тех случаях, когда это возможно, следует использовать препроцессор, настроенный для языка, на котором вы пишете. Современные версии ассемблера GNU имеют средства макросов. Большинство языков высокого уровня имеют собственный механизм условной компиляции и включения. Если все остальное не поможет, попробуйте настоящий общий текстовый процессор, такой как GNU M4.
Препроцессоры C различаются по некоторым деталям. В этом руководстве рассматривается препроцессор GNU C, который предоставляет небольшой набор функций стандарта ISO C. В своем стандартном режиме препроцессор GNU C не выполняет некоторые действия, требуемые стандартом. Это функции, которые редко, если вообще когда-либо используются, и могут вызвать неожиданные изменения в значении программы, которая не ожидает их. Чтобы получить строгий стандарт ISO C, следует использовать параметры -std=c90, -std=c99 или -std=c11, в зависимости от нужной версии стандарта. Чтобы получить все обязательные диагностические сообщения, необходимо также использовать -pedantic. См. Вызов.
В этом руководстве описано поведение препроцессора ISO. Чтобы свести к минимуму напрасные различия, там, где поведение препроцессора ISO не конфликтует с традиционной семантикой, традиционный препроцессор должен вести себя аналогично. Различные существующие различия подробно описаны в разделе Традиционный режим.
Для ясности, если не указано иное, ссылки на ‘CPP’ в этом руководстве относятся к GNU CPP.
| • Наборы символов: | ||
| • Первичная обработка: | ||
| • Токенизация: | ||
| • Язык предварительной обработки: |
Далее: Файлы заголовков, Предыдущее: Главная, Вверх: Главная [Содержание][Указатель]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/cpp/Overview.html