1 Обзор
Предпроцессор C, часто известный как cpp, — это процессор макросов, который автоматически используется компилятором C для преобразования вашей программы перед компиляцией. Он называется процессором макросов, потому что позволяет определять макросы, которые являются краткими аббревиатурами для более длинных конструкций.
Предпроцессор C предназначен для использования только с исходными кодами C, C++ и Objective-C. В прошлом он использовался как общий текстовый процессор. Он будет сбоить на входных данных, которые не подчиняются лексическим правилам C. Например, апострофы будут интерпретироваться как начало символьных констант и вызовут ошибки. Также нельзя полагаться на то, что он сохранит характеристики входных данных, которые не имеют значения для языков семейства C. Если Makefile препроцессируется, все символы табуляции будут удалены, и Makefile не будет работать.
Сказав это, вы часто можете обойтись использованием cpp для вещей, которые не являются C. Другие языки программирования семейства Algol часто безопасны (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-12.1.0/cpp/Overview.html