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