Spec-Zone.ru › GCC 4

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 сообщит об этом как об unused. Чтобы избежать предупреждения в таком случае, можно улучшить область определения макроса, например, поместив его в первый пропущенный блок. В качестве альтернативы вы можете предоставить фиктивное использование, используя что-то вроде:

#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 также подавляет вывод обработанного текста, так как отсутствующий заголовочный файл делает это бесполезным.

Эта функция используется в автоматическом обновлении make файлов.

-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 "имя_файла" в выходные данные, чтобы отметить место, где был найден предварительно скомпилированный заголовок, и его имя_файла. Когда -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=стандарт
-ansi
Укажите стандарт, которому должен соответствовать код. В настоящее время CPP знает о стандартах C и C++; в будущем могут быть добавлены другие.

стандарт может быть одним из:

c90
c89
iso9899:1990
Стандарт ISO C 1990 года. ‘c90’ — это обычное сокращение для этой версии стандарта.

Параметр -ansi эквивалентен -std=c90.

iso9899:199409
Стандарт C ISO 1990 года, изменённый в 1994 году.
iso9899:1999
c99
iso9899:199x
c9x
Пересмотренный стандарт ISO C, опубликованный в декабре 1999 года. До публикации он был известен как C9X.
iso9899:2011
c11
c1x
Пересмотренный стандарт ISO C, опубликованный в декабре 2011 года. До публикации он был известен как C1X.
gnu90
gnu89
Стандарт C ISO 1990 года плюс расширения GNU. Это значение по умолчанию.
gnu99
gnu9x
Стандарт C ISO 1999 года плюс расширения GNU.
gnu11
gnu1x
Стандарт C ISO 2011 года плюс расширения GNU.
c++98
Стандарт ISO C++ 1998 года плюс поправки.
gnu++98
То же, что и -std=c++98 плюс расширения GNU. Это значение по умолчанию для кода C++.
-I-
Разделить путь включения. Любые каталоги, указанные с параметрами -I перед -I-, будут проверяться только на заголовки, запрошенные с #include "файл"; они не будут проверяться на #include <файл>. Если дополнительные каталоги указаны с параметрами -I после -I-, эти каталоги будут проверяться на все директивы ‘#include’.

Кроме того, -I- запрещает использование каталога текущего файла в качестве первого каталога поиска для #include "файл". Этот параметр устарел.

-nostdinc
Не проверять стандартные системные каталоги на заголовочные файлы. Будут проверяться только каталоги, указанные вами с параметрами -I (и каталог текущего файла, если это необходимо).
-nostdinc++
Не проверять каталоги стандартных заголовков, специфичные для C++, но всё ещё проверять другие стандартные каталоги. (Этот параметр используется при построении библиотеки C++.)
-include файл
Обработать файл так, как будто #include "file" появился в качестве первой строки основного исходного файла. Однако первым каталогом, проверяемым на файл, является рабочий каталог препроцессора вместо каталога, содержащего основной исходный файл. Если он не найден там, он проверяется в оставшейся части цепочки поиска #include "..." в обычном порядке.

Если задано несколько параметров -include, файлы включаются в том порядке, в котором они появляются в командной строке.

-imacros файл
Точно так же, как -include, за исключением того, что любые данные, полученные в результате сканирования файл, отбрасываются. Макросы, которые он определяет, остаются определёнными. Это позволяет вам получить все макросы из заголовка, не обрабатывая также его объявления.

Все файлы, указанные параметром -imacros, обрабатываются до всех файлов, указанных параметром -include.

-idirafter каталог
Проверить каталог на заголовочные файлы, но сделать это после того, как будут проверены все каталоги, указанные параметром -I, и стандартные системные каталоги. каталог обрабатывается как системный каталог включения. Если каталог начинается с =, то = будет заменён префиксом sysroot; см. --sysroot и -isysroot.
-iprefix префикс
Укажите префикс в качестве префикса для последующих -iwithprefix параметров. Если префикс представляет собой каталог, вы должны включить конечный ‘/’.
-iwithprefix каталог
-iwithprefixbefore каталог
Добавить каталог к префиксу, указанному ранее с -iprefix, и добавить полученный каталог в путь поиска заголовков. -iwithprefixbefore помещает его в то же место, что и -I; -iwithprefix помещает его туда, где будет -idirafter.
-isysroot каталог
Этот параметр похож на параметр --sysroot, но применяется только к заголовочным файлам (за исключением целей Darwin, где он применяется к заголовочным файлам и библиотекам). Более подробную информацию см. в параметре --sysroot.
-imultilib каталог
Использовать каталог как подкаталог каталога, содержащего заголовочные файлы C++ для конкретной целевой платформы.
-isystem каталог
Проверить каталог на заголовочные файлы после всех каталогов, указанных параметром -I, но перед стандартными системными каталогами. Отметить его как системный каталог, чтобы он получил такое же специальное обращение, как и стандартные системные каталоги. Если каталог начинается с =, то = будет заменён префиксом sysroot; см. --sysroot и -isysroot.
-iquote каталог
Проверить каталог только на заголовочные файлы, запрошенные с #include "файл"; они не проверяются на #include <файл>, до всех каталогов, указанных параметром -I, и до стандартных системных каталогов. Если каталог начинается с =, то = будет заменён префиксом 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
Принимать универсальные имена символов в идентификаторах. Этот параметр экспериментальный; в будущей версии GCC он будет включён по умолчанию для C99 и C++.
-fno-canonical-system-headers
При предварительной обработке не сокращать пути к системным заголовкам с помощью канонизации.
-fpreprocessed
Указать препроцессору, что входной файл уже был предварительно обработан. Это подавляет такие действия, как расширение макросов, преобразование триграфов, слияние экранированных символов новой строки и обработку большинства директив. Препроцессор всё ещё распознаёт и удаляет комментарии, поэтому вы можете передать файл, предварительно обработанный с -C компилятору без проблем. В этом режиме интегрированный препроцессор представляет собой не более чем токенизатор для передних концов.

-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 деактивирует этот параметр так, как если бы он не был указан в командной строке. Значение «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. См. Параметры отладки.

‘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. С одним дефисом, продолжить предобработку в обычном режиме. С двумя дефисами, немедленно завершить работу.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Preprocessor-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API