3.11 Параметры, управляющие препроцессором
Эти параметры управляют C-препроцессором, который запускается для каждого файла исходного кода C перед фактической компиляцией.
Если вы используете параметр -E, ничего не делается, кроме предпроцессирования. Некоторые из этих параметров имеют смысл только вместе с -E, поскольку они делают вывод препроцессора непригодным для фактической компиляции.
-Wp,option-
Вы можете использовать -Wp,option, чтобы обойти драйвер компилятора и передать option напрямую препроцессору. Если option содержит запятые, он разделяется на несколько параметров в местах этих запятых. Однако многие параметры изменяются, переводятся или интерпретируются драйвером компилятора перед передачей препроцессору, и -Wp намеренно обходит эту фазу. Прямой интерфейс препроцессора не документирован и может изменяться, поэтому, по возможности, следует избегать использования -Wp и позволять драйверу обрабатывать параметры вместо этого.
-Xpreprocessor option-
Передать option в качестве параметра препроцессору. Вы можете использовать это для предоставления специфичных для системы параметров препроцессора, которые GCC не распознаёт.
Если вы хотите передать параметр, принимающий аргумент, вы должны использовать -Xpreprocessor дважды, один раз для параметра и один раз для аргумента.
-no-integrated-cpp-
Выполнить предпроцессирование как отдельный этап перед компиляцией. По умолчанию GCC выполняет предпроцессирование как интегрированную часть токенизации и разбора входных данных. Если этот параметр указан, соответствующий фронтенд языка (
cc1,cc1plus, илиcc1objдля C, C++ и Objective-C соответственно) вызывается дважды: один раз для только предпроцессирования и один раз для фактической компиляции преобразованного ввода. Этот параметр может быть полезен в сочетании с параметрами -B или -wrapper для указания альтернативного препроцессора или выполнения дополнительной обработки исходного кода программы между обычным предпроцессированием и компиляцией.
-D name-
Определить name как макрос с определением
1. -D name=definition-
Содержание definition токенизируется и обрабатывается так, как если бы оно появилось во время фазы обработки трансляции в директиве «#define». В частности, определение будет усечено вставленными символами новой строки.
Если вы вызываете препроцессор из оболочки или оболочеподобной программы, вам может потребоваться использовать синтаксис цитирования оболочки для защиты символов, таких как пробелы, которые имеют значение в синтаксисе оболочки.
Если вы хотите определить макрос, похожий на функцию, в командной строке, запишите его список аргументов со скобками вокруг перед знаком равенства (если он есть). Скобки имеют значение для большинства оболочек, поэтому вам необходимо привести опцию к цитате. С
shиcsh, -D'name(args…)=definition' работает.Опции -D и -U обрабатываются в порядке, в котором они указаны в командной строке. Все опции -imacros file и -include file обрабатываются после всех опций -D и -U.
-U name-
Отменить любое предыдущее определение name, встроенное или заданное с помощью опции -D.
-undef-
Не определять макросы, специфичные для системы или GCC. Стандартные предопределённые макросы остаются определёнными.
-I dir-
Добавить директорию dir в список директорий, которые будут проверяться на наличие заголовочных файлов. Директории, указанные с помощью -I, проверяются перед стандартными системными заголовочными директориями. Если директория dir является стандартной системной заголовочной директории, опция игнорируется для того, чтобы не нарушать стандартный порядок поиска системных директорий и специального обращения со системными заголовками. Если dir начинается с
=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -o file-
Вывести выходные данные в file. Это то же самое, что указание file в качестве второго не-опционального аргумента для
cpp.gccимеет другое толкование второго не-опционального аргумента, поэтому для указания выходного файла необходимо использовать -o. -Wall-
Включает все необязательные предупреждения, которые желательны для обычного кода. В настоящее время это -Wcomment, -Wtrigraphs, -Wmultichar и предупреждение об автоматическом преобразовании целых чисел, вызывающее изменение знака в
#ifвыражениях. Обратите внимание, что многие предупреждения препроцессора включены по умолчанию и не имеют опций для их управления. -Wcomment-Wcomments-
Предупреждать всякий раз, когда последовательность начала комментария ‘/*’ появляется в комментарии ‘/*’ или когда обратный слэш-новая строка появляется в комментарии ‘//’. (Оба формата имеют тот же эффект.)
-Wtrigraphs-
Большинство триграфов в комментариях не могут повлиять на значение программы. Однако триграф, который образовал бы эскейп-новую строку (‘??/’ в конце строки), может изменить начало или конец комментария. Поэтому только триграфы, которые образовали бы эскейп-новые строки, генерируют предупреждения внутри комментария.
Эта опция подразумевается опцией -Wall. Если -Wall не задана, эта опция всё ещё включена, если триграфы не включены. Чтобы получить преобразование триграфов без предупреждений, но получить другие предупреждения -Wall, используйте ‘-trigraphs -Wall -Wno-trigraphs’.
-Wtraditional-
Предупреждать об определённых конструкциях, которые ведут себя по-разному в традиционном и ISO C. Также предупреждать об ISO C-конструкциях, не имеющих традиционного C-эквивалента, и проблематичных конструкциях, которых следует избегать.
-Wundef-
Предупреждать, когда идентификатор, который не является макросом, встречается в директиве ‘#if’, вне ‘defined’. Такие идентификаторы заменяются нулём.
-Wunused-macros-
Предупреждать о макросах, определённых в главном файле, которые не используются. Макрос считается используемым, если он расширяется или проверяется на существование по крайней мере один раз. Препроцессор также будет предупреждать, если макрос не был использован в момент его переопределения или отмены определения.
Встроенные макросы, макросы, определённые в командной строке, и макросы, определённые в файлах включения, не будут вызывать предупреждения.
Примечание: Если макрос фактически используется, но только в пропущенных условных блоках, то CPP сообщит об этом как об неиспользуемом. Чтобы избежать предупреждения в таком случае, можно улучшить область определения макроса, например, переместив его в первый пропущенный блок. В качестве альтернативы, можно предоставить фиктивное использование с помощью чего-то подобного:
#if defined the_macro_causing_the_warning #endif
-Wendif-labels-
Предупреждать всякий раз, когда ‘#else’ или ‘#endif’ следуют за текстом. Это обычно происходит в коде вида
#if FOO … #else FOO … #endif FOO
Вторая и третья
FOOдолжны быть в комментариях, но часто в старых программах не являются. Это предупреждение включено по умолчанию. -Werror-
Превратить все предупреждения в жёсткие ошибки. Исходный код, который вызывает предупреждения, будет отклонен.
-Wsystem-headers-
Выдавать предупреждения для кода в системных заголовочных файлах. Обычно это бесполезно для поиска ошибок в собственном коде, поэтому подавляется. Если вы ответственны за системную библиотеку, вы можете захотеть их увидеть.
-w-
Подавить все предупреждения, включая те, которые GNU CPP выдаёт по умолчанию.
-pedantic-
Выдавать все обязательные диагностики, перечисленные в стандарте C. Некоторые из них по умолчанию пропускаются, так как они часто срабатывают на безобидном коде.
-pedantic-errors-
Выдавать все обязательные диагностики и превращать все обязательные диагностики в ошибки. Это включает обязательные диагностики, которые GCC выдаёт без ‘-pedantic’, но обрабатывает как предупреждения.
-M-
Вместо вывода результата предварительной обработки, вывести правило, подходящее для
makeописания зависимостей главного исходного файла. Препроцессор выводит одноmakeправило, содержащее имя файла объекта для этого исходного файла, двоеточие и имена всех включённых файлов, включая те, которые поступают от -include или -imacros опций командной строки.Если явно не указано (с -MT или -MQ), имя файла объекта состоит из имени исходного файла со всеми суффиксами, заменёнными суффиксами файла объекта, и со всеми ведущими частями каталога, удалёнными. Если имеется много включённых файлов, то правило разбивается на несколько строк с помощью ‘\’-новой строки. В правиле нет команд.
Эта опция не подавляет вывод отладки препроцессора, например -dM. Чтобы избежать смешивания такого вывода отладки с правилами зависимости, следует явно указать файл вывода зависимостей с -MF или использовать переменную окружения, например
DEPENDENCIES_OUTPUT(см. Переменные окружения). Данные отладки по-прежнему будут отправляться в обычный поток вывода, как обычно.Передача -M драйверу подразумевает -E и подавляет предупреждения с неявной -w.
-MM-
Как -M, но не упоминает заголовочные файлы, которые находятся в системных заголовочных директориях, ни заголовочные файлы, которые включены, прямо или косвенно, из такого заголовочного файла.
Это означает, что выбор угловых скобок или двойных кавычек в директиве ‘#include’ сам по себе не определяет, будет ли этот заголовок появляться в выводе зависимостей -MM. Это небольшое изменение в семантике по сравнению с версиями GCC 3.0 и ранее.
-MF file-
При использовании с -M или -MM, указывает файл, в который будут записаны зависимости. Если переключатель -MF не задан, препроцессор отправляет правила в то же место, в которое он отправил бы предварительно обработанный вывод.
При использовании с опциями драйвера -MD или -MMD, -MF переопределяет файл вывода зависимостей по умолчанию.
-MG-
В сочетании с такой опцией, как -M, запрашивающей создание зависимостей, -MG предполагает, что отсутствующие заголовочные файлы — это файлы, которые генерируются, и добавляет их в список зависимостей без поднятия ошибки. Имя файла зависимости берётся непосредственно из директивы
#includeбез добавления пути. -MG также подавляет вывод предварительно обработанного кода, так как отсутствующий заголовочный файл делает это бесполезным.Эта функция используется при автоматическом обновлении makefile.
-MP-
Эта опция указывает CPP добавить фиктивную цель для каждой зависимости, кроме главного файла, заставляя каждую зависеть от ничего. Эти фиктивные правила обходят ошибки, которые
makeдаёт, если вы удаляете заголовочные файлы, не обновив Makefile в соответствии с этим.Это типичный вывод:
test.o: test.c test.h test.h:
-MT target-
Изменить цель правила, выводимого генерированием зависимостей. По умолчанию CPP берёт имя главного входного файла, удаляет все компоненты каталога и любые суффиксы файлов, такие как ‘.c’, и добавляет обычный платформенный суффикс объекта. Результат — цель.
Опция -MT установит цель точно в указанную вами строку. Если вам нужны несколько целей, вы можете указать их как один аргумент для -MT или использовать несколько опций -MT.
Например,
-MT '$(objpfx)foo.o'может дать$(objpfx)foo.o: foo.c
-MQ target-
То же самое, что -MT, но цитирует любые символы, которые являются специальными для Make.
-MQ '$(objpfx)foo.o'даёт$$(objpfx)foo.o: foo.c
Цель по умолчанию автоматически цитируется, как если бы она была задана с помощью -MQ.
-MD
-
-MD эквивалентен -M -MF file, за исключением того, что -E не подразумевается. Драйвер определяет file на основе наличия параметра -o. Если он есть, драйвер использует его аргумент, но с суффиксом .d, в противном случае он использует имя входного файла, удаляет все компоненты каталога и суффикс, а затем добавляет суффикс .d.
Если -MD используется совместно с -E, любой параметр -o понимается как указание файла вывода зависимостей (см. -MF), но если используется без -E, каждый -o понимается как указание целевого файла объекта.
Поскольку -E не подразумевается, -MD может использоваться для генерации файла вывода зависимостей как побочного эффекта процесса компиляции.
-MMD-
Как -MD, за исключением того, что упоминаются только заголовочные файлы пользователя, а не системные.
-fpch-deps-
При использовании предварительно скомпилированных заголовков (см. Предварительно скомпилированные заголовки), этот флаг приведет к тому, что флаги вывода зависимостей также будут перечислять файлы из зависимостей предварительно скомпилированного заголовка. Если не указано, будет перечислен только предварительно скомпилированный заголовок, а не файлы, использованные для его создания, так как эти файлы не рассматриваются при использовании предварительно скомпилированного заголовка.
-fpch-preprocess-
Этот параметр позволяет использовать предварительно скомпилированный заголовок (см. Предварительно скомпилированные заголовки) вместе с -E. Он вставляет специальный
#pragma,#pragma GCC pch_preprocess "filename"в вывод, чтобы отметить место, где был найден предварительно скомпилированный заголовок, и его имя файла filename. При использовании -fpreprocessed, GCC распознает этот#pragmaи загружает PCH.Этот параметр по умолчанию выключен, так как полученный препроцессированный вывод подходит только для использования в качестве входных данных для GCC. Он включается с помощью -save-temps.
Вам не следует писать этот
#pragmaв собственном коде, но безопасно изменять имя файла, если PCH-файл доступен в другом месте. Имя файла может быть абсолютным или относительным к текущему каталогу GCC. -x c-x c++-x objective-c-x assembler-with-cpp-
Укажите язык исходного кода: C, C++, Objective-C или ассемблер. Это не имеет отношения к соответствию стандартам или расширениям; это просто выбор базового синтаксиса, который ожидается. Если вы не укажете ни один из этих параметров, cpp определит язык по расширению исходного файла: ‘.c’, ‘.cc’, ‘.m’ или ‘.S’. Также распознаются некоторые другие распространённые расширения для C++ и ассемблера. Если cpp не распознаёт расширение, он обработает файл как C; это самый общий режим.
Примечание: Предыдущие версии cpp принимали параметр -lang, который выбирал как язык, так и уровень соответствия стандартам. Этот параметр был удален, поскольку он конфликтует с параметром -l.
-std=standard-ansi-
Укажите стандарт, которому должен соответствовать код. В настоящее время CPP знает о стандартах C и C++; другие могут быть добавлены в будущем.
standard может быть одним из:
c90c89iso9899:1990-
Стандарт ISO C от 1990 года. ‘c90’ — это обычное сокращение для этой версии стандарта.
Параметр -ansi эквивалентен -std=c90.
iso9899:199409-
Стандарт C 1990 года, изменённый в 1994 году.
iso9899:1999c99iso9899:199xc9x-
Переработанный стандарт ISO C, опубликованный в декабре 1999 года. До публикации он был известен как C9X.
iso9899:2011c11c1x-
Переработанный стандарт ISO C, опубликованный в декабре 2011 года. До публикации он был известен как C1X.
gnu90gnu89-
Стандарт C 1990 года плюс расширения GNU. Это значение по умолчанию.
gnu99gnu9x-
Стандарт C 1999 года плюс расширения GNU.
gnu11gnu1x-
Стандарт C 2011 года плюс расширения GNU.
c++98-
Стандарт ISO C++ 1998 года плюс поправки.
gnu++98То же, что -std=c++98 плюс расширения GNU. Это значение по умолчанию для кода C++.
-I--
Разделяет путь к include. Все каталоги, указанные с помощью параметров -I до -I-, ищутся только для заголовков, запрошенных с
#include "file"; они не ищутся для#include <file>. Если дополнительные каталоги указаны с помощью параметров -I после -I-, эти каталоги ищутся для всех директив ‘#include’.Кроме того, -I- запрещает использование каталога текущего файла в качестве первого каталога поиска для
#include "file". Этот параметр устарел. -nostdinc-
Не искать стандартные системные каталоги заголовочных файлов. Ищутся только каталоги, указанные вами с помощью параметров -I (и каталог текущего файла, если это уместно).
-nostdinc++-
Не искать заголовочные файлы в специфичных для C++ стандартных каталогах, но продолжать поиск в других стандартных каталогах. (Этот параметр используется при построении библиотеки C++).
-include file-
Обрабатывает file так, как будто
#include "file"появился в качестве первой строки основного исходного файла. Однако первый каталог, в котором ищется file, — это рабочий каталог препроцессора, а не каталог, содержащий основной исходный файл. Если не найден там, он ищется в оставшейся части#include "…"цепочки поиска в обычном порядке.Если указано несколько параметров -include, файлы включаются в порядке их появления в командной строке.
-imacros file-
Точно так же, как -include, за исключением того, что любой вывод, полученный при сканировании file, отбрасывается. Макросы, которые он определяет, остаются определёнными. Это позволяет вам получить все макросы из заголовка без обработки его объявлений.
Все файлы, указанные с помощью -imacros, обрабатываются перед всеми файлами, указанными с помощью -include.
-idirafter dir-
Искать dir заголовочные файлы, но делать это после всех каталогов, указанных с помощью -I, и стандартных системных каталогов. dir обрабатывается как системный каталог включаемых файлов. Если dir начинается с
=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -iprefix prefix-
Укажите prefix в качестве префикса для последующих параметров -iwithprefix. Если префикс представляет собой каталог, вы должны включить конечный символ ‘/’.
-iwithprefix dir-iwithprefixbefore dir-
Добавьте dir к префиксу, указанному ранее с помощью -iprefix, и добавьте полученный каталог к пути поиска include. -iwithprefixbefore помещает его в то же место, что и -I; -iwithprefix помещает его туда, где был бы -idirafter.
-isysroot dir-
Этот параметр аналогичен параметру --sysroot, но применяется только к заголовочным файлам (за исключением целей Darwin, где он применяется как к заголовочным файлам, так и к библиотекам). Для получения дополнительной информации см. параметр --sysroot.
-imultilib dir-
Используйте dir в качестве подкаталога каталога, содержащего целевые заголовочные файлы C++.
-isystem dir-
Искать dir заголовочные файлы после всех каталогов, указанных параметром -I, но перед стандартными системными каталогами. Отметить его как системный каталог, чтобы он получил такое же специальное обращение, как и стандартные системные каталоги. Если dir начинается с
=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -iquote dir-
Искать dir только заголовочные файлы, запрошенные с помощью
#include "file"; они не ищутся для#include <file>, перед всеми каталогами, указанными с помощью -I, и перед стандартными системными каталогами. Если dir начинается с=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -fdirectives-only-
При препроцессировании обрабатывать директивы, но не расширять макросы.
Поведение параметра зависит от параметров -E и -fpreprocessed.
С параметром -E препроцессинг ограничивается обработкой директив, таких как
#define,#ifdef, и#error. Другие операции препроцессора, такие как расширение макросов и преобразование триграфов, не выполняются. Кроме того, параметр -dD неявно включен.С параметром -fpreprocessed отключение предварительной загрузки макросов командной строки и большинства встроенных макросов. Макросы, такие как
__LINE__, которые зависят от контекста, обрабатываются обычно. Это позволяет компилировать файлы, предварительно препроцессированные с помощью-E -fdirectives-only.С параметрами -E и -fpreprocessed правила для -fpreprocessed имеют приоритет. Это позволяет полностью препроцессировать файлы, предварительно препроцессированные с помощью
-E -fdirectives-only. -fdollars-in-identifiers-
Принимать ‘$’ в идентификаторах.
-fextended-identifiers-
Принимать универсальные символьные имена в идентификаторах. Этот параметр включён по умолчанию для C99 (и более поздних версий стандарта C) и C++.
-fno-canonical-system-headers-
При препроцессировании не сокращать пути к системным заголовочным файлам с помощью канонизации.
-fpreprocessed
-
Укажите препроцессору, что входной файл уже был предварительно обработан. Это подавляет такие вещи, как расширение макросов, преобразование триграфов, склеивание экранированных символов новой строки и обработку большинства директив. Препроцессор по-прежнему распознает и удаляет комментарии, так что вы можете передать файл, предварительно обработанный с -C, в компилятор без проблем. В этом режиме интегрированный препроцессор представляет собой не более чем токенизатор для front end.
-fpreprocessed подразумевается, если входной файл имеет одно из расширений ‘.i’, ‘.ii’ или ‘.mi’. Это расширения, которые GCC использует для предварительно обработанных файлов, созданных с помощью -save-temps.
-ftabstop=width-
Установите расстояние между позициями табуляции. Это помогает препроцессору сообщать правильные номера столбцов в предупреждениях или ошибках, даже если на строке встречаются табуляции. Если значение меньше 1 или больше 100, опция игнорируется. По умолчанию значение равно 8.
-fdebug-cpp-
Эта опция полезна только для отладки GCC. При использовании с -E выводит отладочную информацию о картах расположения. Каждый токен в выводе предваряется выводом карты, к которой относится его расположение. Вывод карты, содержащей расположение токена, будет следующим:
{‘P’:/file/path;‘F’:/includer/path;‘L’:line_num;‘C’:col_num;‘S’:system_header_p;‘M’:map_address;‘E’:macro_expansion_p,‘loc’:location}При использовании без -E эта опция не имеет эффекта.
-ftrack-macro-expansion[=level]-
Отслеживать расположения токенов при расширении макросов. Это позволяет компилятору выдавать диагностику о текущем стеке расширения макросов при возникновении ошибки компиляции в расширении макроса. Использование этой опции заставляет препроцессор и компилятор потреблять больше памяти. Параметр level может использоваться для выбора уровня точности отслеживания расположения токенов, тем самым уменьшая потребление памяти при необходимости. Значение ‘0’ параметра level отключает эту опцию так же, как если бы -ftrack-macro-expansion не было в командной строке. Значение ‘1’ отслеживает расположения токенов в режиме пониженного качества для минимизации нагрузки на память. В этом режиме все токены, полученные в результате расширения аргумента макроса типа функции, имеют одинаковое расположение. Значение ‘2’ полностью отслеживает расположения токенов. Это значение наиболее ресурсоёмко. Если эта опция задана без аргумента, значение параметра по умолчанию равно ‘2’.
Обратите внимание, что
-ftrack-macro-expansion=2активировано по умолчанию. -fexec-charset=charset-
Установить кодировку выполнения, используемую для строковых и символьных констант. По умолчанию используется UTF-8. charset может быть любой кодировкой, поддерживаемой системной библиотекой
iconv. -fwide-exec-charset=charset-
Установить расширенную кодировку выполнения, используемую для широких строковых и символьных констант. По умолчанию используется UTF-32 или UTF-16, в зависимости от ширины
wchar_t. Как и в случае с -fexec-charset, charset может быть любой кодировкой, поддерживаемой системной библиотекойiconv; однако у вас возникнут проблемы с кодировками, которые не помещаются точно вwchar_t. -finput-charset=charset-
Установить кодировку входного файла, используемую для преобразования кодировки входного файла в кодировку исходного файла, используемую GCC. Если в локали это не указано или GCC не может получить эту информацию из локали, по умолчанию используется UTF-8. Это можно переопределить с помощью локали или этой опции командной строки. В настоящее время опция командной строки имеет приоритет при конфликте. charset может быть любой кодировкой, поддерживаемой системной библиотекой
iconv. -fworking-directory-
Включить генерацию маркеров строк в выходном файле препроцессора, которые позволят компилятору узнать текущую рабочую директорию во время предварительной обработки. При включении этой опции препроцессор выведет после начального маркера строки второй маркер со значением текущей рабочей директории, за которым следуют две косые черты. GCC будет использовать эту директорию, если она присутствует в предварительно обработанном входе, как директорию, выведенную в качестве текущей рабочей директории в некоторых форматах отладочной информации. Эта опция неявно включена, если включена отладочная информация, но это можно запретить с помощью обратной формы -fno-working-directory. Если в командной строке присутствует флаг -P, эта опция не имеет эффекта, так как никакие
#lineдирективы не выводятся. -fno-show-column-
Не выводить номера столбцов в диагностике. Это может потребоваться, если диагностика сканируется программой, которая не понимает номера столбцов, такой как
dejagnu. -A predicate=answer-
Выполнить утверждение с предикатом predicate и ответом answer. Эта форма предпочтительнее более старой формы -A predicate(answer), которая всё ещё поддерживается, потому что она не использует специальные символы оболочки.
-A -predicate=answer-
Отменить утверждение с предикатом predicate и ответом answer.
-dCHARS-
CHARS — последовательность из одного или нескольких следующих символов и не должна предшествовать пробелу. Другие символы интерпретируются самим компилятором или зарезервированы для будущих версий GCC и поэтому молча игнорируются. Если вы укажете символы, поведение которых конфликтует, результат не определен.
- ‘M’
-
Вместо обычного вывода сгенерировать список директив ‘#define’ для всех макросов, определённых во время выполнения препроцессора, включая предопределённые макросы. Это даёт вам возможность узнать, что предопределено в вашей версии препроцессора. Предполагая, что у вас нет файла foo.h, команда
touch foo.h; cpp -dM foo.h
покажет все предопределенные макросы.
Если вы используете -dM без опции -E, -dM интерпретируется как синоним -fdump-rtl-mach. Смотрите (gcc)Debugging Options.
- ‘D’
-
Подобно ‘M’, за исключением двух моментов: он не включает предопределенные макросы и выводит и директивы ‘#define’, и результат предварительной обработки. Оба вида вывода направляются в стандартный выходной файл.
- ‘N’
-
Подобно ‘D’, но выводит только имена макросов, а не их расширения.
- ‘I’
-
Вывести директивы ‘#include’ дополнительно к результату предварительной обработки.
- ‘U’
-
Подобно ‘D’, за исключением того, что выводятся только те макросы, которые расширяются или чья определённость проверяется в директивах препроцессора; вывод откладывается до использования или проверки макроса; и директивы ‘#undef’ также выводятся для макросов, проверенных, но не определённых на момент времени.
-P-
Запретить генерацию маркеров строк в выводе препроцессора. Это может быть полезно, когда препроцессор запускается на чём-то, что не является кодом C, и будет отправлено программе, которая может быть сбита с толку маркерами строк.
-C-
Не игнорировать комментарии. Все комментарии передаются в выходной файл, за исключением комментариев в обработанных директивах, которые удаляются вместе с директивой.
Вы должны быть готовы к побочным эффектам при использовании -C; он заставляет препроцессор обрабатывать комментарии как токены. Например, комментарии в начале строки, которая должна была бы быть директивой, имеют эффект превращения этой строки в обычную строку исходного кода, так как первый токен в строке больше не является ‘#’.
-CC-
Не игнорировать комментарии, включая во время расширения макросов. Это подобно -C, за исключением того, что комментарии, содержащиеся в макросах, также передаются в выходной файл при расширении макроса.
Помимо побочных эффектов опции -C, опция -CC заставляет все комментарии в стиле C++ внутри макроса преобразовываться в комментарии в стиле C. Это делается для предотвращения случайного комментирования остальной части строки исходного кода при последующем использовании этого макроса.
Опция -CC обычно используется для поддержки комментариев lint.
-traditional-cpp-
Постараться имитировать поведение старых C препроцессоров, в отличие от ISO C препроцессоров.
-trigraphs-
Обрабатывать триграфные последовательности. Это последовательности из трёх символов, все начинающиеся с ‘??’, которые определены ISO C, чтобы обозначать отдельные символы. Например, ‘??/’ обозначает ‘\’, поэтому ‘'??/n'’ — это символьная константа для новой строки. По умолчанию GCC игнорирует триграфы, но в стандартных режимах он их преобразует. Смотрите опции -std и -ansi.
Девять триграфов и их замены:
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- Replacement: [ ] { } # \ ^ | ~ -remap-
Включить специальный код для решения проблем с файловыми системами, которые допускают только очень короткие имена файлов, такие как MS-DOS.
--help--target-help-
Вывести текст, описывающий все опции командной строки, вместо предварительной обработки чего-либо.
-v-
Подробный режим. Вывести номер версии GNU CPP в начале выполнения и сообщить окончательный вид пути включения.
-H-
Вывести имя каждого используемого файла заголовка, кроме других обычных действий. Каждое имя отступено, чтобы показать, насколько глубоко оно находится в стеке ‘#include’. Также выводятся предварительно скомпилированные файлы заголовков, даже если они окажутся недействительными; недействительный предварительно скомпилированный файл заголовка выводится с ‘...x’, а действительный — с ‘...!’.
-version--version-
Вывести номер версии GNU CPP. С одним тире продолжить предварительную обработку в обычном режиме. С двумя тире немедленно завершить работу.
Далее: Опции ассемблера, Предыдущее: Опции оптимизации, Наверх: Использование GCC [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Preprocessor-Options.html