12 Вызов
Чаще всего при использовании препроцессора C вам не нужно вызывать его явно: компилятор C сделает это автоматически. Однако препроцессор иногда бывает полезен сам по себе. Все опции, перечисленные здесь, также приемлемы для компилятора C и имеют то же значение, за исключением того, что компилятор C имеет другие правила для указания выходного файла.
Примечание: Независимо от того, используете ли вы препроцессор через gcc или cpp, сначала выполняется драйвер компилятора. Цель этой программы — перевести вашу команду в вызовы программ, которые выполняют фактическую работу. Их интерфейсы командной строки похожи, но не идентичны документированному интерфейсу и могут меняться без предварительного уведомления.
Препроцессор C ожидает два имени файлов в качестве аргументов, infile и outfile. Препроцессор считывает infile вместе с любыми другими файлами, которые он указывает с помощью ‘#include’. Весь вывод, сгенерированный объединенными входными файлами, записывается в outfile.
Либо infile, либо outfile может быть -, что как infile означает чтение со стандартного ввода, а как outfile означает запись в стандартный вывод. Кроме того, если какой-либо файл опущен, это означает то же самое, что и если - был указан для этого файла.
Если не указано иное или опция заканчивается на ‘=’, все опции, принимающие аргумент, могут иметь этот аргумент, расположенный либо непосредственно после опции, либо с пробелом между опцией и аргументом: -Ifoo и -I foo имеют одинаковый эффект.
Многие опции имеют многобуквенные имена; поэтому несколько однобуквенных опций не могут быть объединены: -dM сильно отличается от ‘-d -M’.
-
-Dname - Определите name как макрос, с определением
1. -
-Dname=definition - Содержимое definition токенизируется и обрабатывается так, как если бы оно появилось во время третьей фазы трансляции в директиве ‘
#define’. В частности, определение будет усечено символами новой строки.Если вы вызываете препроцессор из командной строки или подобной программы, вам может потребоваться использовать синтаксис экранирования командной строки для защиты таких символов, как пробелы, которые имеют значение в синтаксисе командной строки.
Если вы хотите определить макрос-функцию в командной строке, запишите её список аргументов в скобки перед знаком равенства (если таковой имеется). Скобки имеют значение для большинства оболочек, поэтому вам необходимо экранировать этот параметр. С
shиcsh, -D'name(args...)=definition' работает.Параметры
-Dи-Uобрабатываются в том порядке, в котором они указаны в командной строке. Все параметры -imacros file и -include file обрабатываются после всех параметров-Dи-U. -
-Uname - Отменить любое предыдущее определение name, встроенное или заданное с помощью параметра
-D. -undef- Не определять системные или специфичные для GCC макросы. Стандартные предопределенные макросы остаются определенными. См. Стандартные предопределенные макросы.
-
-Idir - Добавить каталог dir в список каталогов, которые будут просматриваться при поиске заголовочных файлов. См. Путь поиска. Каталоги, указанные с помощью
-I, просматриваются перед стандартными системными каталогами включения. Если каталог dir является стандартным системным каталогом включения, параметр игнорируется, чтобы гарантировать, что порядок поиска системных каталогов по умолчанию и специальное обращение со системными заголовками не нарушаются (см. Системные заголовки). Если dir начинается с=, тогда=будет заменён префиксом sysroot; см.--sysrootи-isysroot. -
-ofile - Записать вывод в 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 и более ранними. -
-MFfile - При использовании с
-Mили-MM, указывает файл для записи зависимостей. Если переключатель-MFне задан, препроцессор отправляет правила в то же место, куда он отправил бы обработанный вывод.При использовании с параметрами драйвера
-MDили-MMD,-MFпереопределяет файл вывода зависимостей по умолчанию. -MG- В сочетании с таким параметром, как
-M, запрашивающим создание зависимостей,-MGпредполагает, что отсутствующие заголовочные файлы являются генерируемыми файлами, и добавляет их в список зависимостей без выдачи ошибки. Имя файла зависимости берётся непосредственно из директивы#includeбез добавления какого-либо пути.-MGтакже подавляет вывод предварительной обработки, поскольку отсутствующий заголовочный файл делает это бесполезным.Эта функция используется в автоматическом обновлении файлов make.
-MP- Этот параметр инструктирует CPP добавить фиктивную цель для каждой зависимости, отличной от основного файла, заставляя каждую зависеть ни от чего. Эти фиктивные правила обходят ошибки, которые
makeдаёт, если вы удаляете заголовочные файлы, не обновивMakefileдля соответствия.Вот типичный вывод:
test.o: test.c test.h test.h:
-
-MTtarget - Изменить цель правила, выданного генерацией зависимостей. По умолчанию CPP берёт имя основного входного файла, удаляет компоненты каталога и любой суффикс файла, например ‘
.c’, и добавляет стандартный суффикс объекта платформы. Результат — цель.Параметр
-MTустановит цель как точно заданную вами строку. Если вам нужны несколько целей, вы можете указать их как один аргумент для-MT, или использовать несколько параметров-MT.Например,
-MT '$(objpfx)foo.o'может дать$(objpfx)foo.o: foo.c
-
-MQtarget - То же, что и
-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++.)
-
-includefile - Обработать file так, как будто
#include "file"появился в первой строке основного файла исходного кода. Однако первый каталог, в котором ищется file, — это рабочая директория препроцессора, а не каталог, содержащий основной файл исходного кода. Если не найдено там, то ищется в остальной части цепочки поиска#include "..."в обычном порядке.Если задано несколько параметров
-include, файлы включаются в порядке их появления в командной строке. -
-imacrosfile - Точно так же, как
-include, за исключением того, что любой вывод, полученный при сканировании file, отбрасывается. Определённые в нём макросы остаются определёнными. Это позволяет вам получить все макросы из заголовка без обработки его объявлений.Все файлы, указанные с параметром
-imacros, обрабатываются до всех файлов, указанных с параметром-include. -
-idirafterdir - Искать dir заголовочные файлы, но делать это после того, как были исчерпаны все каталоги, указанные с
-Iи стандартные системные каталоги. dir обрабатывается как системный каталог включения. Если dir начинается с=, то=будет заменён префиксом sysroot; см.--sysrootи-isysroot. -
-iprefixprefix - Указать prefix в качестве префикса для последующих
-iwithprefixпараметров. Если префикс представляет каталог, вы должны включить завершающий ‘/’. -
-iwithprefixdir-iwithprefixbeforedir - Добавить dir к префиксу, указанному ранее с
-iprefix, и добавить полученный каталог в путь поиска включений.-iwithprefixbeforeпомещает его в то же место, что и-I;-iwithprefixпомещает его туда, где бы находился-idirafter. -
-isysrootdir - Этот параметр похож на параметр
--sysroot, но применяется только к заголовочным файлам (за исключением целевых платформ Darwin, где он применяется как к заголовочным файлам, так и к библиотекам). См. параметр--sysrootдля получения дополнительной информации. -
-imultilibdir - Использовать dir в качестве подкаталога каталога, содержащего целевые заголовочные файлы C++.
-
-isystemdir - Искать dir заголовочные файлы после всех каталогов, указанных с
-I, но перед стандартными системными каталогами. Отметить его как системный каталог, чтобы он получал такое же специальное обращение, как и стандартные системные каталоги. См. Системные заголовки. Если dir начинается с=, то=будет заменён префиксом sysroot; см.--sysrootи-isysroot. -
-iquotedir - Искать 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- Принимать универсальные имена символов в идентификаторах. Этот параметр является экспериментальным; в будущей версии 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 деактивирует эту опцию так же, как если бы на командной строке не было-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. -
-Apredicate=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- Обрабатывать триграф-последовательности. См. Первоначальная обработка.
-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/cpp/Invocation.html