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 или -std=c17 в зависимости от того, какой стандарт вы хотите. Для получения всех обязательных диагностических сообщений необходимо также использовать -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-8.5.0/cpp/Overview.html