Spec-Zone.ru › GCC 5 CPP

12 Вызов

Чаще всего при использовании препроцессора C вам не придётся вызывать его явно: компилятор C сделает это автоматически. Однако препроцессор иногда бывает полезен сам по себе. Все опции, перечисленные здесь, также приемлемы для компилятора C и имеют тот же смысл, за исключением того, что компилятор C имеет разные правила для указания выходного файла.

Примечание: Независимо от того, используете ли вы препроцессор через gcc или cpp, сначала выполняется драйвер компилятора. Цель этой программы — преобразовать вашу команду в вызовы программ, которые выполняют фактическую работу. Их командные интерфейсы похожи, но не идентичны документированному интерфейсу и могут меняться без предварительного уведомления.

Препроцессор C ожидает два имени файлов в качестве аргументов, infile и outfile. Препроцессор считывает infile вместе со всеми другими файлами, указанными с помощью ‘#include’. Весь вывод, генерируемый объединёнными входными файлами, записывается в outfile.

Любой из файлов infile или outfile может быть -, что в качестве infile означает чтение из стандартного ввода, а в качестве outfile означает запись в стандартный вывод. Кроме того, если любой из файлов опущен, это означает то же самое, как если бы для этого файла была указана -.

Если не указано иное, или опция заканчивается на ‘=’, все опции, которые принимают аргумент, могут иметь этот аргумент, стоящий либо непосредственно после опции, либо с пробелом между опцией и аргументом: -Ifoo и -I foo имеют одинаковый эффект.

Многие опции имеют многобуквенные имена; поэтому несколько однобуквенных опций нельзя объединять: -dM сильно отличается от ‘-d -M’.

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

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

-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, за исключением того, что упоминаются только заголовочные файлы пользователя, а не системные заголовочные файлы.

-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 может быть одним из следующих:

c90
c89
iso9899:1990

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

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

iso9899:199409

Стандарт C 1990 года, с изменениями 1994 года.

iso9899:1999
c99
iso9899:199x
c9x

Пересмотренный стандарт ISO C, опубликованный в декабре 1999 года. До публикации он был известен как C9X.

iso9899:2011
c11
c1x

Пересмотренный стандарт ISO C, опубликованный в декабре 2011 года. До публикации он был известен как C1X.

gnu90
gnu89

Стандарт C 1990 года плюс расширения GNU. Это значение по умолчанию.

gnu99
gnu9x

Стандарт C 1999 года плюс расширения GNU.

gnu11
gnu1x

Стандарт C 2011 года плюс расширения GNU.

c++98

Стандарт ISO C++ 1998 года плюс поправки.

gnu++98

То же, что и -std=c++98 плюс расширения GNU. Это значение по умолчанию для кода C++.

-I-

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

-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)Параметры отладки.

‘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

Обработать триграфические последовательности. См. Первоначальная обработка.

-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-5.5.0/cpp/Invocation.html

Spec-Zone.ru

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