АнглийскийФранцузскийИспанский

Значок OnWorks

aarch64-linux-gnu-g ++ - 4.9 - Интернет в облаке

Запустите aarch64-linux-gnu-g ++ - 4.9 в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

Это команда aarch64-linux-gnu-g ++ - 4.9, которую можно запустить в бесплатном хостинг-провайдере OnWorks с помощью одной из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


gcc - компилятор C и C ++ проекта GNU

СИНТАКСИС


gcc [-c|-S|-E] [-std =стандарт]
[-g] [-пг] [-Oуровень]
[-Wпредупреждать...] [-педантичный]
[-Iдиректория...] [-Lдиректория...]
[-Dмакрос[=определение] ...] [-Uмакрос]
[-fвариант...] [-mмашина-опция...]
[-o Outfile] [@файл] вводить...

Здесь перечислены только самые полезные опции; остаток см. ниже. г ++ принимает
в основном те же варианты, что и GCC.

ОПИСАНИЕ


Когда вы вызываете GCC, он обычно выполняет предварительную обработку, компиляцию, сборку и компоновку.
«Общие параметры» позволяют остановить этот процесс на промежуточном этапе. Для
Например, -c опция говорит не запускать компоновщик. Тогда вывод состоит из объекта
файлы, выводимые ассемблером.

Остальные варианты передаются на одну стадию обработки. Некоторые параметры управляют
препроцессор и др. сам компилятор. Еще другие параметры управляют ассемблером и
компоновщик; большинство из них здесь не задокументировано, так как вам редко приходится использовать какие-либо из них.

Большинство параметров командной строки, которые вы можете использовать с GCC, полезны для программ на языке C; когда
опция полезна только с другим языком (обычно C ++), так говорится в объяснении
явно. Если в описании конкретной опции не упоминается источник
язык, вы можете использовать эту опцию со всеми поддерживаемыми языками.

Команда GCC программа принимает в качестве операндов параметры и имена файлов. Многие варианты имеют многоцелевой
названия букв; поэтому несколько однобуквенных вариантов могут быть сгруппированы: -дв очень
отличается от -d -v.

Вы можете смешивать варианты и другие аргументы. По большей части порядок, который вы используете, не
иметь значение. Порядок имеет значение, когда вы используете несколько вариантов одного и того же типа; например, если
вы указываете -L более одного раза поиск в каталогах выполняется в указанном порядке. Также,
размещение -l вариант значительный.

Многие варианты имеют длинные названия, начинающиеся с -f или с -W---Например,
-fmove-loop-инварианты, -Wформат и так далее. Большинство из них имеют как положительные, так и отрицательные
формы; отрицательная форма -ффу is -фно-фу. В этом руководстве описан только один из них.
две формы, в зависимости от того, какая из них не используется по умолчанию.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


Опция Итого
Вот сводка всех опций, сгруппированных по типу. Пояснения в следующих
раздел.

В общем Опции
-c -S -E -o файл -не-канонические-префиксы -трубка -pass-exit-коды -x язык -v
- ### --Помогите[=класс[, ...]] --target-помощь --версия -обертка @файл -fplugin =файл
-fplugin-аргумент-имя=аргумент -fdump-ада-спецификация[-тонкий] -fada-spec-parent =Ед. изм
-fdump-go-spec =файл

C Язык Опции
-анси -std =стандарт -fgnu89-встроенный -aux-информация имя файла
-fallow-параметры-вариативные-функции -фно-асм -fno-встроенный -fno-встроенный-функция
-fhosted -Отдельные -fopenmp -fopenmp-simd -fms-extension -fplan9-extension
-триграфы -традиционный -традиционный-cpp -fallow-single-precision (одинарная точность) -fcond-несоответствие
-lax-vector-conversions -fsigned-битовые поля -fsigned-char -funsigned-битовые поля
-funsigned-char

C + + Язык Опции
-fabi-version =n -fno-контроль доступа -fcheck-новый -fconstexpr-depth =n
-друг-инъекция -fno-elide-конструкторы -fno-enforce-eh-specs -for-scope
-fno-для-области -fno-gnu-ключевые слова -fno-неявные-шаблоны
-fno-неявные-встроенные шаблоны -fno-реализация-inlines -fms-extension
-fno-nonansi-встроенные -fnothrow-opt -fno-имена-операторов -fno-необязательный-diags
-f разрешающий -fno-красивые-шаблоны -фрепо -фно-ртти -fstats
-ftemplate-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-статика
-предохранитель-cxa-atexit -fno-слабый -nostdinc ++ -fvisibility-встроенные-скрытые
-fvtable-verify =std | preinit | none -fvtv-количество -fvtv-отладка -fvisibility-ms-совместимость
-fext-числовые-литералы -Ваби -Wconversion-нуль -Wctor-dtor-конфиденциальность
-Wdelete-не виртуальный-dtor -Буквенный суффикс -Украшивание -Без исключения -Wnon-виртуальный-dtor
-Замена -Weffc ++ -Wstrict-null-дозорный -Wno-друг-нешаблон - Актерский состав в стиле Уолда
-Woverloaded-виртуальный -Wno-pmf-преобразования -Wsign-Promo

Objective-C и Objective-C ++ Язык Опции
-fconstant-строка-класс =имя класса -fgnu-время выполнения -fnext-время выполнения -fno-nil-приемники
-fobjc-abi-version =n -fobjc-call-cxx-cdtors -fobjc-прямая отправка -fobjc-исключения
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -freplace-objc-классы -fzero-ссылка
-gen-decls -Передача-перехват -Wno-протокол -Wселектор -Wstrict-селектор-соответствие
-Wundeclared-селектор

Язык Независимость Опции
-fmessage-length =n -fdiagnostics-show-location =[консолидировать|повсюду]
-fdiagnostics-color =[автоматический|никогда|всегда] -fno-Diagnostics-show-option
-fno-диагностика-шоу-каретка

Предупреждение Опции
-fsyntax-только -fmax-errors =n -педантичный -педантические-ошибки -w -Векстра -Стена
-адрес -Ваггрегат-возврат -Waggressive-loop-оптимизации -Боевые границы
-Wno-атрибуты -Wno-build-macro-redefined -Wc ++ - совместимость -Wc ++ 11-compat -Wcast-выравнивание
-Wcast-качество -Wchar-индексы -Wразбит -Wкомментарий -W условно поддерживается
-Wконверсия -Wcoverage-несоответствие -Среда-время -W удалить-неполный -Wno-cpp
-Wno-не рекомендуется -Wno-устаревшие-декларации -Wdisabled-оптимизация -Wno-деление на ноль
-Wдвойное продвижение -Пустое тело -Wenum-сравнить -Wno-endif-label -Ошибка -Werror = *
-Wfatal-ошибки -Wfloat-равно -Wформат -Wformat = 2 -Wno-format-содержит-nul
-Wno-format-extra-args -Wformat-небуквенный -Wformat-безопасность -Wformat-y2k
-Wframe-больше-чем =только -Wno-free-nonheap-объект -Wjump-промахи-init
-Проигранные квалификаторы -Неявный -Wimplicit-function-декларация -Wimplicit-int
-Выиграть сам -Винлайн -Wmaybe-неинициализированный -Wno-int-to-указатель-приведение
-Wno-invalid-offsetof -Winvalid-pch -Больше-чем =только -Wunsafe-loop-оптимизации
-Wлогическая операция -Длинно-длинный -Wосновной -Wmaybe-неинициализированный -Wmemset-транспонированные-аргументы
-Wmissing-подтяжки -Wmissing-поля-инициализаторы -Wmissing-include-dirs -Wno-многосимвольный
-Wnonnull -Wno-переполнение -Wopenmp-simd -Woverlength-струны -Упакованный
-Wpacked-битовое-совместимость -Wмягкий -W скобки -Wpedantic-ms-формат
-Wno-pedantic-ms-формат -Wpointer-ариф -Wno-указатель-на-int-cast -Wredundant-декларации
-Wno-return-local-адрес -Обратный тип -W точка-последовательности -Wтень -Wsign-сравнить
-Wsign-конверсия -Wfloat-конверсия -Wsizeof-указатель-доступ к памяти -Wstack-протектор
-Wstack-usage =только -Wstrict-псевдоним -Wstrict-aliasing = n -Wstrict-переполнение
-Wstrict-overflow =n -Wsuggest-attribute =[чистый|Const|без возврата|формат]
-Wmissing-формат-атрибут -Wпереключатель -Wswitch-по умолчанию -Wswitch-перечисление -Wsync-нанд
-Wsystem-заголовки -W батуты -Писания -Wtype-ограничения -Вундеф -Wнеинициализированный
-Wunknown-прагмы -Wno-прагмы -Wunsuffix-float-константы -Wunused
-Wunused-функция -Wunused-метка -Wunused-local-typedefs -Wunused-параметр
-Wno-неиспользованный-результат -Wunused-значение -Wunused-переменная -Wunused-but-set-параметр
-Wunused-но-set-переменная -Бесполезный-литой -Wvariadic-макросы
-Wvector-операция-производительность -Ввла -Wvolatile-регистр-вар -Wwrite-строки
-Wzero-as-null-указатель-константа

C и Только для цели C Предупреждение Опции
-Wbad-функция-приведение -Wmissing-декларации -Wmissing-параметр-тип
-Wmissing-прототипы -Wnested-экстерны -Wold-style-декларация -Декоративный стиль
-Wstrict-прототипы -Wтрадиционный -W традиционное преобразование
-Wобъявление-после-заявления -Wpointer-знак

Отладка Опции
-dписьмена -dumpspecs -самосвал -дампверсия -fsanitize =стиль -fdbg-cnt-список
-fdbg-cnt =список значений счетчика -fdisable-ipa-пароль_имя -fdisable-rtl-пароль_имя
-fdisable-rtl-пароль=список диапазонов -fdisable-дерево-пароль_имя -fdisable-дерево-проходить-
имя=список диапазонов -fdump-ноаддр -fdump-без номера -fdump-ненумерованные-ссылки
-fdump-перевод-единица[-n] -fdump-иерархия классов[-n] -fdump-ipa-все
-fdump-ipa-cgraph -fdump-ipa-встроенный -fdump-проходит -fdump-статистика -fdump-tree-все
-fdump-tree-оригинал[-n] -fdump-дерево-оптимизировано[-n] -fdump-дерево-cfg -fdump-tree-псевдоним
-fdump-дерево-ch -fdump-дерево-ssa[-n] -fdump-дерево-предварительно[-n] -fdump-дерево-ccp[-n]
-fdump-дерево-dce[-n] -fdump-дерево-gimple[-сырой] -fdump-дерево-дом[-n] -fdump-дерево-dse[-n]
-fdump-дерево-phiprop[-n] -fdump-дерево-phiopt[-n] -fdump-дерево-forwprop[-n]
-fdump-tree-copyrename[-n] -fdump-дерево-nrv -fdump-дерево-вектор -fdump-дерево-раковина
-fdump-дерево-сра[-n] -fdump-дерево-forwprop[-n] -fdump-дерево-свободно[-n]
-fdump-tree-vtable-проверить -fdump-дерево-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns =файл -fcompare-отладка[=выбирает] -fcompare-debug-секунда
-felimminate-dwarf2-dups -fno-исключить неиспользуемые-отладочные типы
-feliminate-неиспользуемые-символы-отладки -femit-класс-отладка-всегда -обоснованный-вид-pass
-обоснованный-вид-pass=список диапазонов -fdebug-типы-секция -fmem-отчет-wpa -fmem-отчет
-fpre-ipa-mem-отчет -fpost-ipa-mem-отчет -fprofile-дуги -fopt-информация
-fopt-информация-кредита[=файл] -frandom-seed =string -fsched-verbose =n -fsel-sched-подробный
-fsel-sched-dump-cfg -fsel-sched-pipelining-подробный -fstack-использование -ftest-охват
-ftime-отчет -fvar-отслеживание -fvar-отслеживания-присваивания
-fvar-отслеживания-назначения-переключение -g -gуровень -переключить -gcoff -гном-версия -ggdb
-grecord-gcc-переключатели -gno-record-gcc-переключатели -gstabs -gstabs + -gstrict-карлик
-gno-строгий-карлик -gvms -gxcoff -gxcoff + -fno-merge-debug-строки
-fno-dwarf2-cfi-asm -fdebug-prefix-map =старый=new -femit-struct-debug-только на базе
-femit-struct-debug-уменьшено -femit-struct-debug-подробный[=список спецификаций] -p -пг
-print-file-name =библиотека -print-libgcc-имя-файла -print-мульти-каталог
-print-мультибиблиотека -print-multi-os-каталог -print-prog-name =программа
-print-поиск-директоров -Q -print-sysroot -print-sysroot-заголовки-суффикс -сохранение темпов
-save-temps = cwd -save-temps = obj -время[=файл]

Оптимизация Опции
-faggressive-loop-оптимизации -falign-functions [=n] -falign-jumps [=n]
-falign-labels [=n] -falign-loops [=n] -фассоциативная-математика -fauto-inc-dec
-fbranch-вероятности -fbranch-target-load-оптимизировать -fbranch-target-load-optimize2
-fbtr-bb-эксклюзивный -fcaller-сохраняет -fcheck-data-deps -fcombine-stack-Adjustments
-fconserve-стек -fcompare-элим -fcprop-регистры -fcrossjumping -fcse-следовать-прыжки
-fcse-skip-блоки -fcx-фортран-правила -fcx-ограниченный диапазон -fdata-разделы -fdce
-fdelayed-ветка -fdelete-проверка нулевого указателя -fдевиртуализовать
-fdevirtualize-спекулятивно -fdse опасно встраивание -фипа-сра
-файловые-оптимизации -ffat-lto-объекты -ffast-математика -ffinite-math-only - только математика
-флот-магазин -fexcess-precision =стиль -всегда-распространять -ffp-contract =стиль
-функции-разделы -fgcse -fgcse-после перезагрузки -fgcse-las -fgcse-lm
-fgraphite-идентичность -fgcse-см -fhoist-смежные-нагрузки -fif-преобразование -fif-преобразование2
-findirect-встраивание -finline-функции -finline-функции-вызываемые-один раз -finline-limit =n
-finline-small-функции -fipa-cp -fipa-cp-клон -фипа-пта -fipa-профиль
-fipa-чистый-const -fipa-ссылка -fira-algorithm =алгоритм -fira-region =область
-фира-подъемник-давление -фира-петля-давление -fno-ira-share-save-слоты
-fno-ira-share-spill-слоты -fira-verbose =n -fisolate-ошибочные-пути-разыменование
-fisolate-ошибочные-пути-атрибут -фивопты -fkeep-встроенные функции
-fkeep-статические-константы -прокрутка-усадка -floop-блок -флоп-развязка
-фуп-стрип-мина -floop-гнездо-оптимизировать -floop-parallelize-все -флто
-flto-сжатие-уровень -flto-partition =ALG -flto-отчет -flto-отчет-wpa
-fmerge-все-константы -fmerge-константы -fmodulo-sched -fmodulo-sched-allow-regmoves
-fmove-loop-инварианты -fno-Branch-count-reg -fno-дефер-поп -fno-функция-cse
-fno-guess-branch-вероятность -fno-встроенный -fno-math-errno -фно-глазок -фно-глазок2
-fno-sched-межблок -fno-sched-spec -fno-знак-нули -fno-верхний уровень-переупорядочить
-fno-ловушка-математика -fno-ноль-инициализирован-в-bss -fomit-frame-pointer
-foptimize-sibling-вызовы -fpartial-встраивание -fpeel-петли -fpredictive-обобщение
-fprefetch-loop-массивы -fprofile-отчет -fprofile-Correction -fprofile-dir =путь
-fprofile-генерировать -fprofile-generate =путь -fprofile-использование -fprofile-use =путь
-fprofile-значения -fprofile-reorder-функции -freciprocal-математика -свободно
-frename-регистры -freorder-блоки -freorder-блоки-и-раздел -freorder-функции
-frerun-cse-после-петля -freschedule-по модулю-расписанию-циклов -frounding-математический
-fsched2-использовать-суперблоки -fsched-давление -fsched-спецификация-нагрузка
-fsched-spec-load-опасно -fsched-stalled-insns-dep [=n] -fsched-stalled-insns [=n]
-fsched-group-эвристика -fsched-критический-эвристический путь -fsched-spec-insn-эвристика
-fsched-rank-эвристика -fsched-last-insn-эвристика -fsched-деп-счет-эвристика
-fschedule-insns -fschedule-insns2 -секция-анкеры -fselective-планирование
-fвыборочное-планирование2 -fsel-sched-конвейерная обработка -fsel-sched-pipelining-external-петли
-fshrink-обертка -fsignaling-Nans -fsingle-точность-константа -fsplit-ivs-in-unroller
-fsplit-широкие-типы -fstack-протектор -fstack-протектор-все -fstack-протектор-сильный
-fstrict-псевдоним -fstrict-переполнение -fthread-прыжки -фтрейсер -ftree-bit-ccp
-ftree-встроенный-вызов-dce -ftree-ccp -футри-ч -ftree-coalesce-inline-vars
-ftree-coalesce-vars -ftree-copy-prop -ftree-copyrename -ftree-dce
-ftree-доминатор-opts -ftree-dse -ftree-forwprop -free-fre -ftree-loop-если-преобразовать
-ftree-loop-если-конвертировать-хранит -ftree-loop-им -ftree-phiprop Распределение без петель
-ftree-loop-распространять шаблоны -ftree-loop-ivcanon -бв-петля-линейный
-ftree-loop-оптимизировать -ftree-loop-векторизация -ftree-parallelize-loops =n -free-pre
-ftree-частичный-pre -ftree-pta -ftree-reassoc -дерево-раковина -ftree-slsr -ftree-сра
-бесплатное переключение-преобразование -ftree-tail слияние -дерево-тер -ftree-векторизация -ftree-vrp
-Функция за раз -фунролл-все-петли -фунролл-петли -funsafe-loop-оптимизации
-funsafe-математическая-оптимизация -funswitch-петли -fvariable-extension-in-unroller
-fvect-стоимость-модель -fvpt -fвеб -fwhole-программа -fwpa -fuse-ld =оставил
-fuse-linker-плагин --парам имя=ценностное -O -O0 -O1 -O2 -O3 -Операционные системы -Быстро -Ог

препроцессор Опции
-Aвопрос=ответ -А-вопрос[=ответ] -C -дД -дИ -дМ -дН -Dмакрос[=определение] -E -H
-идирафтер директория -включают файл -имакрос файл -iпрефикс файл -iс префиксом директория
-iwithprefixbefore директория -система директория -имультилиб директория -isysroot директория -M -MM -МГ
-МП -MQ -MT -ностдинк -P -fdebug-cpp -ftrack-macro-extension -рабочий-каталог
-переназначить -триграфы -undef -Uмакрос -Вп,вариант -Xпрепроцессор вариант -но-интегрированный-cpp

Ассемблер Опция
-Ва,вариант -Xассемблер вариант

связи Опции
имя-файла-объекта -lбиблиотека -nostartfiles -nodefaultlibs -nostdlib -пирог -рдинамический -s
-статический -статический-libgcc -статическая-libstdc ++ -статический-libasan -static-libtsan
-static-liblsan -статический-libubsan -общий -shared-libgcc -символический -T скрипт
-Вл,вариант -Xlinker вариант -u символ

Каталог Опции
-Bпрефикс -Iдиректория -iplugindir =директория -я цитируюдиректория -Lдиректория -specs =файл -Я- --sysroot =директория
--no-sysroot-суффикс

Машина Зависимый Опции
AAArch64 Опции -mabi =имя -mbig-endian -с младшим порядком байтов -mgeneral-regs-only
-mcmodel = крошечный -mcmodel = маленький -mcmodel = большой -mstrict-выравнивание -Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра -mtls-dialect = desc -mtls-dialect = традиционный
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -март =имя -mcpu =имя -mtune =имя

Адаптева Богоявление Опции -mhalf-reg-файл -mprefer-короткие-insn-regs -mbranch-cost =Num
-mcmove -mnops =Num -msoft-cmpsf -msplit-лохи -mpost-inc -mpost-изменить
-mstack-offset =Num -круг-ближайший -mlong-вызовы -mshort-звонки -msmall16 -mfp-mode =Режим
-mvect-двойной -max-vect-align =Num -msplit-vecmove-рано -m1reg-Редж

ARC Опции -баррель-перевертыш -mcpu =процессор -мА6 -MARC600 -мА7 -MARC700 -mdpfp
-mdpfp-компактный -mdpfp-быстро -mno-dpfp-lrsr -меа -mno-mpy -mmul32x16 -mmul64 -мнорм
-мспфп -mspfp-компактный -mspfp-быстро -мсимд -msoft-поплавок -mswap -mcrc -mdsp-пакет -mdvbf
-млок -mmac-d16 -ммак-24 -мртск -mswape -мелофония -мкси -неправильный размер -mannotate-выравнивание
-Марклинукс -marclinux_prof -mepilogue-cfi -mlong-вызовы -mmedium-звонки -мсданные
-mucb-mcount -mvolatile-кэш злобный звонок -mauto-modify-reg -mbbit-глазок -mno-brcc
-mcase-вектор-пкрел -mcompact-casei -mno-cond-exec -крупно-ветвистый -mexpand-adddi
-mindexed-load -млра -млра-приоритет-нет -mlra-приоритет-компактный млра-приоритет-
некомпактная -мно-милликод -mixed-code -mq-класс -mRcq -mRcw -msize-level =уровень
-mtune =процессор -mmultcost =Num -munalign-prob-threshold =вероятность

ARM Опции -mapcs-рамка -мно-БТР-рама -mabi =имя -mapcs-проверка стека
-mno-apcs-stack-check -mapcs-поплавок -mno-apcs-поплавок -mapcs-реентерабельный
-mno-apcs-реентерабельный -msched-пролог -mno-sched-пролог -с младшим порядком байтов -mbig-endian
-mwords-little-endian -mfloat-abi =имя -mfp16-format =имя -mthumb-интерворк
-mno-thumb-взаимодействие -mcpu =имя -март =имя -mfpu =имя -m структура-размер-граница =n
-маборт-на-невозврате -mlong-вызовы -мно-долгие звонки -msingle-pic-база
-mno-single-pic-base -mpic-register =Редж -mnop-весело-dllimport -mpoke-имя-функции
-мпалец -мам -мтпкс-рама -мтпкс-створка-рамка -mcaller-супер-взаимодействие
-mcallee-супер-взаимодействие -mtp =имя -mtls-dialect =диалект -mword-перемещений
-mfix-cortex-m3-ldrd -мунифицированный-доступ -mneon-для-64 бит -mslow-flash-данные
-mrestrict-это

AVR Опции -mmcu =БУМ -маккумулировать-аргументы -mbranch-cost =стоят -mcall-прологи -мята8
-мно-прерывания -мелакс -mstrict-X -mtiny-стек -Waddr-space-конвертировать

Blackfin Опции -mcpu =процессор[-видение] -мсим -Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра -mspecld-аномалия -mno-specld-аномалия -mcsync-аномалия
-mno-csync-аномалия -mlow-64k -mno-low64k -mstack-check-l1 -средняя-разделяемая-библиотека
-mno-id-общая-библиотека -mshared-library-id =n -mleaf-id-общая-библиотека
-mno-лист-идентификатор-общая-библиотека -msep-данные -mno-sep-данные -mlong-вызовы -мно-долгие звонки
-mfast-fp -minline-plt многоядерный -мкорея -мкореб -мсдрам -micplb

C6X Опции -mbig-endian -с младшим порядком байтов -март =процессор -мсим -msdata =sdata-тип

КРИС Опции -mcpu =процессор -март =процессор -mtune =процессор -mmax-stack-frame =n
-melinux-stacksize =n -метракс4 -метракс100 -mpdebug -mcc-инициализация -мно-побочные эффекты
-mstack-выравнивание -mdata-align -mconst-выравнивание -m32-бит -m16-бит -m8-бит
-мно-пролог-эпилог -мно-готплт -мелф -маут -мелинукс -млинукс -сим -sim2
-mmul-ошибка-обходной путь -mno-mul-bug-обходной путь

CR16 Опции -ммак -mcr16cplus -mcr16c -мсим -мята32 -мбит-операции -mdata-model =модель

Дарвин Опции -all_load -allowable_client -арх -arch_errors_fatal -arch_only
-bind_at_load -расслоении -bundle_loader -имя клиента -версия_совместимости
-текущая версия -dead_strip -dependency-файл -dylib_file -dylinker_install_name
-динамический -динамическая библиотека -exported_symbols_list -список файлов - Flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -рамка
-image_base -в этом -имя_установки -keep_private_externs -multi_module
-multiply_define -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixпредварительная привязка -nomultidefs -без предварительной привязки
-noseglinkedit -pagezero_size -предварительно связать -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -сектральный -сектобъектысимволы -почему -seg1адрес -sectcreate
-сектобъектысимволы -сектор -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -сегпрот -segs_read_only_addr
-segs_read_write_addr -single_module -статический -под_библиотека -sub_umbrella
-twolevel_namespace -зонтик -неопределенный -unexported_symbols_list
-weak_reference_mismatches -загружено -F угаданный -gполный -mmacosx-version-min =версия
-мядро -моне-байт-бул

Декабрь Альфа Опции -mno-fp-regs -msoft-поплавок -миее -mieee-с-неточным
-mieee-совместимый -mfp-trap-mode =Режим -mfp-режим округления =Режим -mtrap-precision =Режим
-mbuild-константы -mcpu =тип процессора -mtune =тип процессора -mbwx -ммакс -мфикс -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-данные -mlarge-данные -msmall-текст
-mlarge-текст -mmemory-latency =время

FR30 Опции -msmall-модель -мно-льсим

FRV Опции -мгпр-32 -мгпр-64 -мфпр-32 -мфпр-64 -mhard-поплавок -msoft-поплавок
-malloc-cc -mfixed-cc -mdword -мно-слово -mдвойной -мно-дабл -Медиа -мно-медиа
-ммуладд -мно-муладд -мфдпик -minline-plt -mgprel-ро -multilib-библиотека-ПИК
-mlinked-fp -mlong-вызовы -злокачественные ярлыки -mlibrary-pic -макк-4 -макк-8 -мпак
-мно-упаковка -мно-флаги -второй ход -mno-cond-переместить -moptimize -mbar
-mno-optimize -mbar -мскк -mno-scc -mcond-exec -mno-cond-exec -mvliw-филиал
-mno-vliw-филиал -mmmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-вложенный-cond-exec -mtomcat-статистика -мТЛС -мтлс -mcpu =процессор

GNU / Linux Опции -mglibc -муклибк -мбионный -мандроид -tno-android-cc -tno-android-ld

H8 / 300 Опции -мелакс -мч -Миз -мн -мекср -mno-exr -мята32 -злокачественный-300

HPPA Опции -март =архитектурный тип -mdisable-фпреги -mdisable-индексирование
-mfast-непрямые звонки -мгаз -mgnu-ld -mhp-ld -mfixed-range =регистр-диапазон
-mjump-in-задержка -mlinker-opt -mlong-вызовы -mlong-загрузить-магазин -mno-отключить-fpregs
-mno-отключить-индексирование -мно-быстрые-непрямые-звонки -мно-газ -мно-прыжок-в-задержке
-mno-long-load-store -mno-Portable-runtime -мно-мягкий-поплавок -mno-space-regs
-msoft-поплавок -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-время выполнения
-mschedule =тип процессора -mspace-regs -мсио -мвсио -munix =unix-std -нолибдлд -статический
-потоки

i386 и x86-64 Опции -mtune =тип процессора -март =тип процессора -mtune-ctrl =список возможностей
-mdump-tune-особенности -mno-по умолчанию -mfpmath =Ед. изм -masm =диалект -мно-фантазия-математика-387
-mno-fp-рет-в-387 -msoft-поплавок -мно-широкий-умножить -мртд -злокачественный-двойной
-mpreferred-stack-boundary =Num -mincoming-stack-boundary =Num -мклд -mcx16 -мсахф
-ммовбе -mcrc32 -mrecip -mrecip =выбирать -mvzerupper -mprefer-avx128 -мммх -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -мавкс -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -мша -мэйс -mpclmul -mfsgsbase -мрдрнд -mf16c -мфма -mprefetchwt1 -msse4a
-m3dnow -mpopcnt -мабм -мбми -мтбм -мфма4 -mxop -mlzcnt -mbmi2 -mfxsr -mxsave
-mxsaveopt -мртм -mlwp -mthreads -mno-align-stringops -минлайн-все-струнные
-minline-stringops-динамически -mstringop-strategy =ALG -mmemcpy-strategy =стратегия
-mmemset-strategy =стратегия -mpush-аргументы -maccumulate-исходящие-аргументы
-m128bit-длинный-двойной -m96bit-длинный-двойной -млонг-двойной-64 -млонг-двойной-80
-млонг-двойной-128 -mregparm =Num -msseregparm -mveclibabi =напишите -mvect8-ret-in-mem
-mpc32 -mpc64 -mpc80 -mstackrealign -Momit-Leaf-Frame-указатель -мно-красная-зона
-mno-tls-direct-seg-refs -mcmodel =код-модель -mabi =имя -maddress-mode =Режим -м32 -м64
-мх32 -м16 -mlarge-data-threshold =Num -msse2avx -mfentry -m8bit-идив
-mavx256-split-unaligned-load -mavx256-split-unaligned-store
-mstack-протектор-охрана =охрана

i386 и x86-64 Windows Опции -mconsole -мсигвин -mno-cygwin -mdll
-mnop-весело-dllimport -mthread -коммуникод -mwin32 -мокна -fno-set-stack-исполняемый файл

IA-64 Опции -mbig-endian -с младшим порядком байтов -мгну-ас -mgnu-ld -мно-пик
-msolver-asm-stop -mрегистр-имена -мсданные -mno-sdata -mconstant-gp -мауто-пик
-растерянный-безумный -минлайн-поплавок-деление-мин-задержка -minline-float-div-max-пропускная способность
-mno-inline-float-div -минлайн-интервал-разделить-мин-задержка
-minline-int-div-max-пропускная способность -mno-inline-int-div -minline-sqrt-min-задержка
-minline-sqrt-max-пропускная способность -mno-inline-sqrt -mdwarf2-asm -Marly-Stop-биты
-mfixed-range =регистр-диапазон -mtls-size =tls-размер -mtune =тип процессора -milp32 -mlp64
-msched-br-данные-спецификации -msched-ar-данные-спецификации -msched-control-спецификация -msched-br-в-данных-спецификации
-msched-ar-в-спецификации данных -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-предпочитают-не-данные-спецификации-insns
-msched-предпочитают-неконтролируемые-спецификации-insns -msched-стоповые биты после каждого цикла
-msched-count-spec-в-критическом пути -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-нулевой стоимости -msched-max-memory-insns-жесткий-ограничение
-msched-max-memory-insns =макс-инснс

LM32 Опции -mbarrel-shift-включен -mdivide-включен -mmultiply-включен
-msign-extension-включен -muser-включено

M32R / D Опции -м32р2 -m32rx -м32р -mdebug -злокачественные петли -mno-align-loops
-missue-rate =номер -mbranch-cost =номер -mmodel =размер кода модель тип -msdata =сдата-
напишите -mno-flush-func -mflush-func =имя -мно-смыв-ловушка -mflush-trap =номер -G Num

M32C Опции -mcpu =процессор -мсим -memregs =номер

M680x0 Опции -март =арка -mcpu =процессор -mtune =мелодия -м68000 -м68020 -м68020-40
-м68020-60 -м68030 -м68040 -м68060 -mcpu32 -м5200 -m5206e -m528x -м5307 -м5407
-mcfv4e -Мбитфилд -mno-битовое поле -mc68000 -mc68020 -мнобитфилд -мртд -мно-ртд
-мдив -мно-див -msshort -мно-короткий -mhard-поплавок -м68881 -msoft-поплавок -мкрел
-malign-int -mstrict-выравнивание -msep-данные -mno-sep-данные -mshared-library-id = п
-средняя-разделяемая-библиотека -mno-id-общая-библиотека -mxgot -мно-хгот

MCore Опции -мхардлит -мно-жесткий свет -мдив -мно-див -mrelax-немедленно
-мно-расслабиться-немедленно -mwide-битовые поля -mno-wide-битовые поля -m4byte-функции
-mno-4byte-функции -mcallgraph-данные -mno-callgraph-данные -mslow-байты
-мно-медленные байты -мно-льсим -с младшим порядком байтов -mbig-endian -м210 -м340
-mstack-инкремент

член парламента Опции -мабдифф -малл-оптс -среднее -mbased =n -мбитопс -mc =n -мклип
-mconfig =имя -мкоп -mcop32 -mcop64 -мивк2 -мдк -мдив -меб -мель -мио-летучие -ML
-mleadz -mm -ммминмакс -мульт -mno-opts -повторять -Миз -мсатур -мсдрам -мсим -мсимновец
-мтф -mtiny =n

МикроБлейз Опции -msoft-поплавок -mhard-поплавок -msmall-делит -mcpu =процессор -mmemcpy
-mxl-мягкий-мул -mxl-мягкий-дел -mxl-баррель-сдвиг -mxl-шаблон-сравнить -mxl-проверка стека
-mxl-gp-opt -mno-clearbss -mxl-умножить-высокий -mxl-поплавок-конвертировать -mxl-поплавок-sqrt
-mbig-endian -с младшим порядком байтов -mxl-переупорядочить -mxl-режим-модель приложения

MIPS Опции -EL -ЭБ -март =арка -mtune =арка -мипс1 -мипс2 -мипс3 -мипс4
-мипс32 -mips32r2 -мипс64 -mips64r2 -мипс16 -мно-мипс16 -mflip-mips16
-minterlink-сжатый -mno-interlink-сжатый -minterlink-mips16
-mno-интерлинк-mips16 -mabi =аби -мэбиколлс -мно-абикалы -msshared -мно-общий
-мплт -мно-плт -mxgot -мно-хгот -мгп32 -мгп64 -мфп32 -мфп64 -mhard-поплавок
-msoft-поплавок -мно-поплавок -мн-поплавок -mdouble-поплавок -mabs =Режим -mnan =кодирование
-мдсп -мно-дсп -mdspr2 -mno-dspr2 -ммку -ммно-мку -мева -мно-ева -мирт -мно-вирт
-мммикромипс -мно-микромипы -mfpu =тип fpu -msmartmips -mno-smartmips -поврежденный-одиночный
-мно-парный-одиночный -mdmx -mno-mdmx -мипс3д -mno-mips3d -ммт -мно-мт -мллск
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNum -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -мгпопт -мно-гопт -встроенные-данные
-mno-встроенные-данные -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-читаемый =установка -msplit-адреса -мно-разделенные-адреса -mexplicit-relocs
-mno-explicit-relocs -mcheck-нулевое деление -mno-check-нулевое деление -mdivide-ловушки
-mdivide-перерывы -mmemcpy -mno-memcpy -mlong-вызовы -мно-долгие звонки -ммад -мно-безумный
-мимадд -мно-имадд -растерянный-безумный -mno-плавленный-madd -nocpp -mfix-24k -mno-fix-24k
-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000
-mfix-rm7000 -mno-fix-rm7000 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130
-mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 -mflush-func =FUNC -mno-flush-func
-mbranch-cost =Num -мембранно-вероятно -мно-ветвь-вероятно -mfp-исключения
-mno-fp-исключения -mvr4130-выровнять -mno-vr4130-выровнять -мсинци -мно-синки
-мелакс-пик-звонки -мно-релакс-пик-звонки -mmcount-ra-адрес

MMIX Опции -млибфункс -mno-libfuncs -мепсилон -mno-эпсилон -mabi = GNU
-mabi = mmixware -mzero-продлить -мкнутдив -mtoplevel-символы -мелф -мбранч-предсказать
-mno-ветвь-предсказать -базовые-адреса -mno-базовые-адреса -msingle-выход
-мно-одиночный выход

MN10300 Опции -mmult-ошибка -мно-мульт-баг -мно-ам33 -мам33 -мам33-2 -мам34 -mtune =Процессор-
напишите -mreturn-указатель-на-d0 -mno-crt0 -мелакс -млив -msetlb

Дерзость Опции -меб -мель -mno-crt0

MSP430 Опции -мсим -masm-hex -mmcu = -mcpu = -мбольшой -msмаленький -мелакс -mhwmult = -минрт

NDS32 Опции -mbig-endian -с младшим порядком байтов -mrededed-regs -mfull-regs -макмов -мно-смов
-perf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -мно-16бит -mgp-direct
-mno-gp-direct -misr-vector-size =Num -mcache-размер блока =Num -март =арка
-mforce-fp-как-gp -mforbid-fp-as-gp -мекс9 -mctor-dtor -мелакс

Nios II Опции -G Num -мгпопт -mno-gpopt -мель -меб -mno-bypass-кэш -mbypass-кэш
-mno-cache-летучий -mcache-изменчивый -mno-fast-sw-div -mfast-sw-div -mhw-мул
-мно-хв-мул -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-див -mcustom-гостиница=N
-мно-обычай-гостиница -mcustom-fpu-cfg =имя -мхал -msmallc -msys-crt0 =имя -msys-lib =имя

PDP-11 Опции -мфпу -msoft-поплавок -mac0 -mno-ac0 -м40 -м45 -м10 -mbcopy
-mbcopy-встроенный -мята32 -mno-int16 -мята16 -mno-int32 -mfloat32 -mno-поплавок64
-mfloat64 -mno-поплавок32 -мабши -мно-абсши -мембранно-дорого -мембранно-дешево
-munix-asm -mdec-asm

пикочип Опции -mae =ae_type -mvliw-lookahead =N -msymbol-как-адрес
-mno-неэффективные-предупреждения

PowerPC Опции См. «Опции RS / 6000 и PowerPC».

RL78 Опции -мсим -mmul = нет -mmul = g13 -mmul = rl78

RS / 6000 и PowerPC Опции -mcpu =тип процессора -mtune =тип процессора -mcmodel =код-модель
-mpowerpc64 -малтивек -мно-алтивек -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -ммфкрф -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-жесткий-dfp -mfull-toc -mminimal-toc -mno-fp-в-ток -мно-сумма в сумме
-м64 -м32 -mxl-совместимость -mno-xl-совместимость -мпе -злокачественная сила -злокачественно-натуральный
-msoft-поплавок -mhard-поплавок -множественный -мно-кратный -мн-поплавок -mdouble-поплавок
-mssimple-fpu -msstring -mno-строка -обновить -mno-обновление -mavoid-индексированные-адреса
-mno-избегайте-индексированных-адресов -растерянный-безумный -mno-плавленный-madd -mbit-выровнять
-mno-битовое выравнивание -mstrict-выравнивание -mno-строгое выравнивание -мперемещаемый -мно-перемещаемый
-mrelocatable-lib -mno-перемещаемый-lib -mtoc -мно-ток -маленький -с младшим порядком байтов
-мБиг -mbig-endian -mdynamic-без изображения -малтивек -mswdiv -msingle-pic-база
-mprioritize-limited-insns =приоритет -msched-costly-dep =зависимость_тип
-minsert-sched-nops =схема -mcall-sysv -mcall-netbsd -maix-структура-возврат
-msvr4-структура-возврат -mabi =abi-тип -msecure-plt -mbss-plt
-mblock-move-inline-limit =Num -мизель -мно-исель -misel = да -misel = нет -мспе -мно-спе
-mspe = да -mspe = нет -нарушение -mgen-cell-микрокод -mwarn-cell-микрокод -mvrsave
-mno-vrsave -ммулхв -мно-мулхв -мдлмзб -мно-длмзб -mfloat-gprs = да -mfloat-gprs = нет
-mfloat-gprs = одиночный -mfloat-gprs = двойной -mпрототип -мно-прототип -мсим -ммвме
-безумцы -молотный нож член -мсданные -msdata =выбирать -mvxworks -G Num -pthread -mrecip
-mrecip =выбирать -мно-рецип -mrecip-точность -mno-recip-точность -mveclibabi =напишите -мфриз
-мно-фриз -mуказатели-на-вложенные-функции -mno-указатели-на-вложенные-функции
-msave-toc-косвенный -mno-save-toc-косвенный -mpower8-fusion -mno-mpower8-fusion
-mpower8-вектор -mno-power8-вектор -мкрипто -мно-крипто -mdirect-переместить -мно-прямое движение
-mquad-память -mno-quad-память -mquad-memory-атомный -mno-quad-memory-атомарный
-mcompat-align-parm -mno-compat-align-parm

RX Опции -m64bit-удваивается -m32bit-удваивается -фпу -нофпу -mcpu = -mbig-endian-данные
-mlittle-endian-данные -msmall-данные -мсим -мно-сим -mas100-синтаксис -mno-as100-синтаксис
-мелакс -mmax-constant-size = -mint-register = -mpid -mno-warn-множественные быстрые прерывания
-msave-acc-в-прерываниях

S / 390 и zСерия Опции -mtune =тип процессора -март =тип процессора -mhard-поплавок -msoft-поплавок
-mhard-dfp -mno-жесткий-dfp -млонг-двойной-64 -млонг-двойной-128 -mbackchain
-мно-бэкчейн -mpacked-стек -мно-упакованный-стек -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -м64 -м31 -mdebug -мно-отладка -меса -мзарх -mtpf-трассировка
-mno-tpf-трассировка -растерянный-безумный -mno-плавленный-madd -mwarn-framesize -mwarn-динамический стек
-mstack-размер -mstack-охранник -mhotpatch =полуслова,полуслова

Счет Опции -меб -мель -мнхвлуп -мульс -ммак -mscore5 -mscore5u -mscore7 -mscore7d

SH Опции -м1 -м2 -m2e -m2a-нофпу -m2a-только для одного -m2a-сингл -м2а -м3 -m3e
-m4-нофпу -m4-только для одного -m4-одноместный -м4 -m4a-нофпу -m4a-только для одного -m4a-сингл
-м4а -m4al -m5-64медиа -m5-64media-нофпу -m5-32медиа -m5-32media-нофпу -m5-компактный
-m5-компактный-нофпу -мб -ML -mdalign -мелакс -mbigtable -мфмовд -мхитачи -мренеса
-мно-ренеса -mnomacsave -миее -мно-иеее -мбитопс -неправильный размер -minline-ic_invalidate
-mpadstruct -мспейс -мпрефергот -musermode -multcost =номер -mdiv =стратегия
-mdivsi3_libfunc =имя -mfixed-range =регистр-диапазон -mindexed-адресация
-mgettrcost =номер -mpt-фиксированный -maccumulate-исходящие-аргументы -minvalid-символы
-matomic-model =атомная модель -mbranch-cost =Num -mzdcbranch -mno-zdcветка -растерянный-безумный
-mno-плавленный-madd -мфска -мно-фска -мфсрра -мно-фсрра -mpretend-cmove -мтас

Solaris 2 Опции -mclear-hwcap -mno-clear-hwcap -mimpure-текст -mno-нечистый-текст
-pthreads -pthread

SPARC Опции -mcpu =тип процессора -mtune =тип процессора -mcmodel =код-модель -mmemory-model =мем-
модель -м32 -м64 -карта-regs -mno-приложение-regs -mfaster-Structs -mno-более быстрые структуры
-квартира -мно-квартира -мфпу -мно-ФПУ -mhard-поплавок -msoft-поплавок -mhard-quad-поплавок
-msoft-quad-поплавок -mstack-предвзятость -mno-стек-предвзятость -муналиннед-дублеры
-mno-unaligned-doubles -muser-режим -mno-пользовательский режим -mv8plus -mno-v8plus -мвис
-мно-вис -мвис2 -мно-вис2 -мвис3 -мно-вис3 -мкбекунд -mno-cbcond -мфмаф -мно-фмаф
-mpopc -мно-попс -mfix-at697f -mfix-ut699

SPU Опции -mwarn-reloc -merror-reloc -msafe-DMA -мунсафе-дма -mbranch-подсказки
-msmall-мем -mlarge-мем -mstdmain -mfixed-range =регистр-диапазон -mea32 -mea64
-пространство-адрес-преобразование -mno-адрес-пространство-преобразование -mcache-size =размер кэша
-matomic-обновления -mno-атомарные-обновления

Система V Опции -Ку -Qn -ЮП,пути -Ым,директория

ПЛИТКА-Gx Опции -mcpu = ЦП -м32 -м64 -mbig-endian -с младшим порядком байтов -mcmodel =код-модель

ПЛИТКАПро Опции -mcpu =процессор -м32

V850 Опции -mlong-вызовы -мно-долгие звонки -меп -мно-эп -mprolog-функция
-mno-пролог-функция -мспейс -mtda =n -msda =n -mzda =n -карта-regs -mno-приложение-regs
-mdisable-вызов -mno-отключить-вызов -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-мв850 -mv850e3v5 -mloop -мелакс -длинные прыжки -msoft-поплавок -mhard-поплавок -mgcc-аби
-mrh850-аби -mbig-переключатель

VAX Опции -мг -мгну -муникс

ЗИС Опции -mvms-коды-возврата -mdebug-main =префикс -mmalloc64 -mpointer-size =размер

VxWorks Опции -мртп -нестатический -Бстатический -Bдинамический -Xbind-ленивый -Xbind-сейчас

x86-64 Опции См. Параметры i386 и x86-64.

Xstormy16 Опции -мсим

Экстенса Опции -mconst16 -mno-const16 -растерянный-безумный -mno-плавленный-madd -mforce-без изображения
-mserialize-изменчивый -mno-сериализовать-изменчивый -mtext-section-литералы
-mno-текст-раздел-литералы -mtarget-align -mno-target-align -млонгкаллы
-мно-длинные звонки

zСерия Опции См. Параметры S / 390 и zSeries.

Code Поколение Опции
-fcall-сохранено-Редж -fcall-используется-Редж -фиксированный-Редж -fисключения -fnon-call-исключения
-fdelete-мертвые исключения -funwind-столы -фасинхронные-раскрутки-столы -fno-gnu-уникальный
-finhibit-size-директива -finstrument-функции
-finstrument-functions-exclude-function-list =сим,сим, ...
-finstrument-functions-exclude-file-list =файл,файл, ... -fno-общий -fno-идент
-fpcc-структура-возврат -fpic -fPIC -fpie -fPIE -fno-jump-столы -frecord-gcc-переключатели
-freg-структура-возврат -fshort-перечисления -fshort-двойной -fshort-wchar -fverbose-асм
-fpack-struct [=n] -fstack-проверить -fstack-limit-register =Редж -fstack-limit-символ =сим
-fno-лимит стека -fsplit-стек -fleading-подчеркивание -ftls-model =модель
-fstack-reuse =уровень повторного использования -ftrapv -fwrapv -fbounds-проверить -видимость
-fstrict-volatile-битовые поля -fsync-libcalls

Опции Управление Вид of Результат
Компиляция может включать до четырех этапов: предварительная обработка, собственно компиляция, сборка и
связывание всегда в таком порядке. GCC может предварительно обрабатывать и компилировать несколько
файлы либо в несколько входных файлов ассемблера, либо в один входной файл ассемблера; тогда
каждый входной файл ассемблера создает объектный файл, а связывание объединяет все объекты
файлы (недавно скомпилированные и указанные в качестве входных) в исполняемый файл.

Для любого заданного входного файла суффикс имени файла определяет, какой тип компиляции
сделанный:

файл.c
Исходный код C, который необходимо предварительно обработать.

файл.i
Исходный код C, который не должен подвергаться предварительной обработке.

файл.ii
Исходный код C ++, который не должен подвергаться предварительной обработке.

файл.m
Исходный код Objective-C. Обратите внимание, что вы должны указать libobjc библиотека, чтобы сделать
Программа Objective-C работает.

файл.mi
Исходный код Objective-C, который не должен подвергаться предварительной обработке.

файл.mm
файл.M
Исходный код Objective-C ++. Обратите внимание, что вы должны указать libobjc библиотека сделать
Программа Objective-C ++ работает. Обратите внимание, что .M обозначает буквальную заглавную букву М.

файл.мии
Исходный код Objective-C ++, который не должен подвергаться предварительной обработке.

файл.h
Заголовочный файл C, C ++, Objective-C или Objective-C ++ для преобразования в предварительно скомпилированный
заголовок (по умолчанию) или файл заголовка C, C ++, который будет преобразован в спецификацию Ada (через
-fdump-ада-спецификация выключатель).

файл.cc
файл.cp
файл.cxx
файл.cpp
файл.CPP
файл.c ++
файл.C
Исходный код C ++, который необходимо предварительно обработать. Обратите внимание, что в .cxx, последние две буквы
оба должны быть буквально x, Точно так же, .C обозначает буквальную заглавную букву C.

файл.mm
файл.M
Исходный код Objective-C ++, который необходимо предварительно обработать.

файл.мии
Исходный код Objective-C ++, который не должен подвергаться предварительной обработке.

файл.хх
файл.H
файл.л.с.
файл.ххх
файл.hpp
файл.ГЭС
файл.h ++
файл.tcc
Заголовочный файл C ++ для преобразования в предварительно скомпилированный заголовок или спецификацию Ada.

файл.f
файл.для
файл.ftn
Фиксированный исходный код Fortran, который не должен подвергаться предварительной обработке.

файл.F
файл.ДЛЯ
файл.fpp
файл.ФПП
файл.FTN
Исходный код Fortran фиксированной формы, который необходимо предварительно обработать (с традиционным
препроцессор).

файл.f90
файл.f95
файл.f03
файл.f08
Исходный код Fortran в свободной форме, не требующий предварительной обработки.

файл.F90
файл.F95
файл.F03
файл.F08
Исходный код Fortran в свободной форме, который необходимо предварительно обработать (с традиционным
препроцессор).

файл.идти
Исходный код Go.

файл.Объявления
Файл исходного кода Ada, содержащий объявление модуля библиотеки (объявление
пакет, подпрограмма, универсальный или универсальный экземпляр) или библиотечный модуль
объявление переименования (объявление переименования пакета, общего или подпрограммы). Такой
файлы также называются функции.

файл.adb
Файл исходного кода Ada, содержащий тело модуля библиотеки (подпрограмму или тело пакета).
Такие файлы еще называют органов.

файл.d
Файл исходного кода D.

файл.ди
Файл кода интерфейса D.

файл.дд
Файл кода документации D.

файл.s
Код ассемблера.

файл.S
файл.sx
Код ассемблера, который необходимо предварительно обработать.

другими
Объектный файл, который будет загружен прямо в ссылку. Любое имя файла без распознанного
суффикс обрабатывается таким образом.

Вы можете явно указать язык ввода с помощью -x опции:

-x язык
Укажите явно язык для следующих входных файлов (вместо того, чтобы
компилятор выбирает значение по умолчанию на основе суффикса имени файла). Эта опция применима ко всем
следующие входные файлы до следующего -x вариант. Возможные значения для язык составляют:

c c-заголовок cpp-вывод
c ++ c ++ - заголовок c ++ - cpp-output
цель-с, цель-с-заголовок, цель-с-cpp-выход
объектный-c ++ объектный-c ++ - заголовок объектный-c ++ - cpp-output
ассемблер-ассемблер-с-cpp
Ada
d
f77 f77-cpp-ввод f95 f95-cpp-ввод
go
Ява

-x нет
Отключите любую спецификацию языка, чтобы обрабатывать последующие файлы
в соответствии с суффиксами имени файла (как если бы -x вообще не использовался).

-pass-exit-коды
Обычно GCC программа завершается с кодом 1, если какой-либо этап компилятора возвращает
неуспешный код возврата. Если вы укажете -pass-exit-коды, GCC программа вместо
возвращается с наибольшей числовой ошибкой, произведенной любой фазой, возвращающей ошибку
индикация. Внешние интерфейсы C, C ++ и Fortran возвращают 4, если внутренняя ошибка компилятора
встречается.

Если вам нужны только некоторые этапы компиляции, вы можете использовать -x (или суффиксы имени файла)
сказать GCC с чего начать, и один из вариантов -c, -Sили -E сказать где GCC является
останавливаться. Обратите внимание, что некоторые комбинации (например, -x cpp-выход -E) инструктировать GCC делать
ничего.

-c Скомпилируйте или соберите исходные файлы, но не связывайте их. Стадия связывания просто
не сделано. Конечный результат - в виде объектного файла для каждого исходного файла.

По умолчанию имя объектного файла для исходного файла создается путем замены суффикса .c,
.i, .sи т. д., с .o.

Нераспознанные входные файлы, не требующие компиляции или сборки, игнорируются.

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

По умолчанию имя файла ассемблера для исходного файла создается путем замены суффикса
.c, .iи т. д., с .s.

Входные файлы, не требующие компиляции, игнорируются.

-E Остановить после этапа предварительной обработки; не запускайте компилятор должным образом. Вывод находится в
форма предварительно обработанного исходного кода, который отправляется на стандартный вывод.

Входные файлы, не требующие предварительной обработки, игнорируются.

-o файл
Поместить вывод в файл файл. Это применимо к любому производимому продукту,
будь то исполняемый файл, объектный файл, файл ассемблера или предварительно обработанный C
код.

If -o не указан, по умолчанию исполняемый файл помещается в а. выход, объект
файл для источник.суффикс in источник.o, его файл ассемблера в источник.s, предварительно скомпилированный
заголовочный файл в источник.суффикс.gch, и весь предварительно обработанный исходный код C на стандартный вывод.

-v Вывести (в стандартный вывод ошибок) команды, выполняемые для запуска этапов
компиляция. Также выведите номер версии программы драйвера компилятора и
препроцессор и собственно компилятор.

- ###
Подобно -v за исключением того, что команды не выполняются, а аргументы цитируются, если они не
содержат только буквенно-цифровые символы или "./-_". Это полезно для сценариев оболочки, чтобы
захватить командные строки, созданные драйвером.

-трубка
Используйте каналы, а не временные файлы для связи между различными этапами
компиляция. Это не работает в некоторых системах, где ассемблер не может читать
из трубы; но с ассемблером GNU проблем нет.

--Помогите
Распечатайте (на стандартный вывод) описание параметров командной строки, понятных для
GCC, Если -v опция также указывается тогда --Помогите также передается различным
процессы, вызываемые GCC, чтобы они могли отображать параметры командной строки, которые они
принимать. Если -Векстра опция также была указана (до --Помогите вариант),
то параметры командной строки, с которыми не связана документация, также
отображается.

--target-помощь
Распечатать (в стандартном выводе) описание параметров командной строки для конкретной цели.
для каждого инструмента. Для некоторых целей также может быть
распечатаны.

--help = {класс|[^]спецификатор}[, ...]
Распечатайте (на стандартный вывод) описание параметров командной строки, понятных для
компилятор, который подходит для всех указанных классов и квалификаторов. Эти
поддерживаемые классы:

оптимизаторы
Показать все параметры оптимизации, поддерживаемые компилятором.

предупреждение
Отобразить все параметры, управляющие предупреждающими сообщениями, создаваемыми компилятором.

цель
Отобразите параметры, специфичные для цели. в отличие от --target-помощь вариант, однако, цель-
конкретные параметры компоновщика и ассемблера не отображаются. Это потому что
эти инструменты в настоящее время не поддерживают расширенный --help = синтаксис.

PARAMS
Отобразите значения, распознаваемые --парам опцию.

язык
Отобразите параметры, поддерживаемые для язык, Где язык это имя одного из
языки, поддерживаемые в этой версии GCC.

общий
Отобразите параметры, общие для всех языков.

Это поддерживаемые квалификаторы:

незадокументированный
Отображать только те параметры, которые не задокументированы.

присоединился
Параметры отображения, принимающие аргумент, который появляется после знака равенства в том же
непрерывный фрагмент текста, например: --help = цель.

отдельный
Параметры отображения, принимающие аргумент, который отображается в виде отдельного слова после
оригинальный вариант, например: -o выходной файл.

Таким образом, например, чтобы отобразить все недокументированные переключатели для конкретных целей, поддерживаемые
компилятор используйте:

--help = цель, недокументировано

Смысл квалификатора можно инвертировать, поставив перед ним префикс ^ характер, так что для
пример для отображения всех двоичных параметров предупреждений (т. е. тех, которые включены или выключены
и которые не принимают аргумент), у которых есть описание, используйте:

--help = предупреждения, ^ присоединено, ^ недокументировано

Аргумент в пользу --help = не должны состоять исключительно из перевернутых квалификаторов.

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

--help = target, оптимизаторы

Команда --help = параметр можно повторить в командной строке. При каждом последующем использовании отображается
запрошенный класс опций, пропуская те, которые уже были отображены.

Если же линия индикатора -Q опция появляется в командной строке перед --help = вариант, затем
описательный текст отображается --help = изменено. Вместо описания отображаемого
options, указывается, включен ли параметр, отключен или установлен
к определенному значению (при условии, что компилятор знает это в точке, где
--help = вариант).

Вот усеченный пример из порта ARM для GCC:

% gcc -Q -mabi = 2 --help = цель -c
Следующие параметры зависят от цели:
-mabi = 2
-mabort-on-noreturn [отключено]
-mapcs [отключено]

Вывод чувствителен к эффектам предыдущих параметров командной строки, поэтому для
пример можно узнать, какие оптимизации включены в -O2 используя:

-Q -O2 --help = оптимизаторы

В качестве альтернативы вы можете узнать, какие бинарные оптимизации включены -O3 используя:

gcc -c -Q -O3 --help = optimizers> / tmp / O3-opts
gcc -c -Q -O2 --help = optimizers> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | grep включен

-не-канонические-префиксы
Не разворачивайте символьные ссылки, разрешите ссылки на /../ or /./, или проложи путь
абсолютный при генерации относительного префикса.

--версия
Показать номер версии и авторские права запущенного GCC.

-обертка
Вызов всех подкоманд в программе-оболочке. Имя программы-оболочки и
его параметры передаются в виде списка, разделенного запятыми.

gcc -c tc -wrapper gdb, - аргументы

Это вызывает все подпрограммы GCC недооценивают ее GDB --args, таким образом, призыв cc1 is
GDB --args cc1 ....

-fplugin =имя.так
Загрузите код плагина в файл имя.so, предполагается, что это общий объект, который должен быть открыт
компилятор. Базовое имя файла общих объектов используется для идентификации плагина.
для анализа аргументов (см. -fplugin-аргумент-имя-ключ=ценностное ниже). Каждый
плагин должен определять функции обратного вызова, указанные в API плагинов.

-fplugin-аргумент-имя-ключ=ценностное
Определите аргумент под названием ключ со стоимостью ценностное для плагина под названием имя.

-fdump-ада-спецификация[-тонкий]
Для исходных и включаемых файлов C и C ++ сгенерируйте соответствующие спецификации Ada.

-fada-spec-parent =Ед. изм
В сочетании с -fdump-ада-спецификация[-тонкий] выше, сгенерируйте спецификации Ada как дочерние блоки
родителя Ед. изм.

-fdump-go-spec =файл
Для входных файлов на любом языке сгенерируйте соответствующие объявления Go в файл. Это
генерирует объявления Go "const", "type", "var" и "func", которые могут быть полезны
чтобы начать писать интерфейс Go для кода, написанного на каком-то другом языке.

@файл
Прочтите параметры командной строки из файл. Прочитанные параметры вставляются вместо
оригинал @файл вариант. Если файл не существует или не может быть прочитан, то опция
будут трактоваться буквально, а не удаляться.

Варианты в файл разделены пробелом. Может быть включен пробельный символ
в опции, заключив весь вариант в одинарные или двойные кавычки. Любой
символ (включая обратную косую черту) может быть включен путем добавления префикса к символу, который будет
включены с обратной косой чертой. В файл сам может содержать дополнительные @файл параметры; любой
такие параметры будут обрабатываться рекурсивно.

составление C + + Программы
Исходные файлы C ++ обычно используют один из суффиксов .C, .cc, .cpp, .CPP, .c ++, .cpили
.cxx; Заголовочные файлы C ++ часто используют .хх, .hpp, .H, или (для общего кода шаблона) .tccи
предварительно обработанные файлы C ++ используют суффикс .ii. GCC распознает файлы с этими именами и
компилирует их как программы C ++, даже если вы вызываете компилятор так же, как для компиляции
Программы на C (обычно с названием GCC).

Тем не менее, использование GCC не добавляет библиотеку C ++. г ++ это программа, которая вызывает GCC и
автоматически определяет связывание с библиотекой C ++. Лечит .c, .h и .i файлы как
Исходные файлы C ++ вместо исходных файлов C, если только -x используется. Эта программа тоже полезна
при предварительной компиляции файла заголовка C с .h расширение для использования в компиляциях C ++. На
многие системы, г ++ также устанавливается с именем C ++.

При компиляции программ на C ++ можно указать многие из тех же параметров командной строки, что и
вы используете для компиляции программ на любом языке; или параметры командной строки, значимые для C
и родственные языки; или параметры, имеющие значение только для программ на C ++.

Опции Управление C говор
Следующие параметры управляют диалектом C (или языков, производных от C, например C ++,
Objective-C и Objective-C ++), которые компилятор принимает:

-анси
В режиме C это эквивалентно -std = C90. В режиме C ++ это эквивалентно
-std = c ++ 98.

Это отключает некоторые функции GCC, несовместимые с ISO C90 (когда
компиляция кода C) или стандартного C ++ (при компиляции кода C ++), например, "asm" и
ключевые слова typeof и предопределенные макросы, такие как unix и vax, которые определяют
тип используемой системы. Это также позволяет нежелательные и редко используемые ISO
функция триграфа. Для компилятора C отключает распознавание стиля C ++ //
комментарии, а также ключевое слово inline.

Альтернативные ключевые слова «__asm__», «__extension__», «__inline__» и «__typeof__»
продолжать работать несмотря на -анси. Вы бы не хотели использовать их в программе ISO C,
конечно, но полезно поместить их в файлы заголовков, которые могут быть включены в
компиляции сделаны с -анси. Альтернативные предопределенные макросы, такие как «__unix__» и
«__vax__» также доступны, с или без -анси.

Команда -анси опция не приводит к бесплатному отклонению программ, не относящихся к ISO. Для
что, -педантичный требуется в дополнение к -анси.

Макрос «__STRICT_ANSI__» предопределен, когда -анси опция используется. Какой-то заголовок
файлы могут заметить этот макрос и воздерживаться от объявления определенных функций или определения
определенные макросы, которые стандарт ISO не требует; это чтобы не мешать
с любыми программами, которые могут использовать эти имена для других целей.

Функции, которые обычно встроены, но не имеют семантики, определенной ISO C (например,
поскольку "alloca" и "ffs") не являются встроенными функциями, когда -анси используется.

-std =
Определите языковой стандарт. Эта опция в настоящее время поддерживается только тогда, когда
компиляция C или C ++.

Компилятор может принимать несколько базовых стандартов, например c90 or c ++ 98, и диалекты GNU
этих стандартов, таких как GNU90 or гну ++ 98. Когда указан базовый стандарт,
компилятор принимает все программы, соответствующие этому стандарту, а также те, которые используют расширения GNU
что не противоречит этому. Например, -std = C90 отключает некоторые функции GCC
несовместимые с ISO C90, такие как ключевые слова "asm" и "typeof", но не
другие расширения GNU, не имеющие значения в ISO C90, например, исключение
средний член выражения "?:". С другой стороны, когда диалект GNU стандарта
указан, все функции, поддерживаемые компилятором, включены, даже если те
функции меняют смысл базового стандарта. В результате некоторые строго соответствующие
программы могут быть отклонены. Конкретный стандарт используется -педантичный для выявления
какие функции являются расширениями GNU с учетом этой версии стандарта. Например
-std = gnu90 -педантичный предупреждает о стиле C ++ // комментарии, а -std = gnu99 -педантичный
не.

Необходимо указать значение для этой опции; возможные значения

c90
c89
iso9899: 1990
Поддержка всех программ ISO C90 (некоторые расширения GNU, конфликтующие с ISO C90
отключены). Такой же как -анси для кода C.

iso9899: 199409
ISO C90 с изменениями, внесенными в поправку 1.

c99
c9x
iso9899: 1999
iso9899: 199x
ISO C99. Этот стандарт практически полностью поддерживается по модулю ошибок,
расширенные идентификаторы (поддерживаются за исключением крайних случаев, когда
-fextended-идентификаторы используется) и проблемы с плавающей точкой (в основном, но не полностью
относящиеся к дополнительным функциям C99 из приложений F и G). Видеть
<http://gcc.gnu.org/c99status.html> для получения дополнительной информации. Имена c9x и
iso9899: 199x устарели.

c11
c1x
iso9899: 2011
ISO C11, редакция 2011 года стандарта ISO C. Этот стандарт существенно
полностью поддерживается, ошибки по модулю, расширенные идентификаторы (поддерживаются, кроме
угловые случаи, когда -fextended-идентификаторы используется), проблемы с плавающей запятой (в основном
но не полностью относится к дополнительным функциям C11 из Приложений F и G) и
дополнительные приложения K (интерфейсы для проверки границ) и L (анализируемость). Имя
c1x устарел.

GNU90
GNU89
GNU-диалект ISO C90 (включая некоторые функции C99). Это значение по умолчанию для C
код.

GNU99
gnu9x
GNU-диалект ISO C99. Имя gnu9x устарел.

GNU11
gnu1x
GNU-диалект ISO C11. Предполагается, что в будущем это станет значением по умолчанию.
выпуск GCC. Имя gnu1x устарел.

c ++ 98
c ++ 03
Стандарт ISO C ++ 1998 г. плюс техническое исправление 2003 г. и некоторые дополнительные
отчеты о дефектах. Такой же как -анси для кода C ++.

гну ++ 98
гну ++ 03
Диалект GNU -std = c ++ 98. Это значение по умолчанию для кода C ++.

c ++ 11
c ++ 0x
Стандарт ISO C ++ 2011 года плюс поправки. Имя c ++ 0x устарел.

гну ++ 11
GNU ++ 0x
Диалект GNU -std = c ++ 11, Имя GNU ++ 0x устарел.

c ++ 1y
Следующая версия стандарта ISO C ++ ориентировочно запланирована на 2014 год. Поддержка
является в высшей степени экспериментальным и почти наверняка изменится несовместимым образом в
будущие выпуски.

GNU ++ 1y
Диалект GNU -std = c ++ 1y. Поддержка носит экспериментальный характер и почти
обязательно изменятся несовместимыми способами в будущих выпусках.

-fgnu89-встроенный
Опция -fgnu89-встроенный сообщает GCC использовать традиционную семантику GNU для "inline"
работает в режиме C99.
Эта опция принимается и игнорируется версиями GCC 4.1.3 до, но не включая
4.3. В версиях GCC 4.3 и более поздних он изменяет поведение GCC в режиме C99. С использованием
эта опция примерно эквивалентна добавлению атрибута функции "gnu_inline" ко всем
встроенные функции.

Опция -fno-gnu89-встроенный явно указывает GCC использовать семантику C99 для
"встроенный" в режиме C99 или gnu99 (т. е. определяет поведение по умолчанию). Этот
опция впервые была поддержана в GCC 4.3. Эта опция не поддерживается в -std = C90 or
-std = gnu90 Режим.

Можно использовать макросы препроцессора «__GNUC_GNU_INLINE__» и «__GNUC_STDC_INLINE__»
чтобы проверить, какая семантика действует для «встроенных» функций.

-aux-информация имя файла
Вывод в заданное имя файла прототипов деклараций для всех объявленных функций и / или
определены в единицах перевода, в том числе в файлах заголовков. Этот вариант
молча игнорируется на любом языке, кроме C.

Помимо объявлений, файл в комментариях указывает происхождение каждого объявления.
(исходный файл и строка), было ли объявление неявным, прототипом или
незапрототипированный (I, N для новых или O для старых, соответственно, в первом символе после
номер строки и двоеточие), и было ли оно получено из объявления или определения
(C or Fсоответственно в следующем персонаже). В случае функции
определений, список аргументов в стиле K&R, за которым следуют их объявления, также
при условии, внутри комментариев, после объявления.

-fallow-параметры-вариативные-функции
Принимайте вариативные функции без именованных параметров.

Хотя можно определить такую ​​функцию, это не очень полезно, поскольку
невозможно прочитать аргументы. Это поддерживается только для C, так как эта конструкция
разрешено C ++.

-фно-асм
Не распознавайте "asm", "inline" или "typeof" как ключевые слова, чтобы код мог их использовать
слова как идентификаторы. Вы можете использовать ключевые слова «__asm__», «__inline__» и
Вместо этого "__typeof__". -анси подразумевает -фно-асм.

В C ++ этот переключатель влияет только на ключевое слово typeof, поскольку asm и inline являются
стандартные ключевые слова. Вы можете использовать -fno-gnu-ключевые слова вместо этого флаг, который имеет
тот же эффект. В режиме C99 (-std = C99 or -std = gnu99), этот переключатель влияет только на
Ключевые слова asm и typeof, поскольку inline является стандартным ключевым словом в ISO C99.

-fno-встроенный
-fno-встроенный-функция
Не распознавайте встроенные функции, которые начинаются не с __встроенный_ как префикс.

GCC обычно генерирует специальный код для обработки определенных встроенных функций.
эффективно; например, вызовы "alloca" могут стать отдельными инструкциями, которые
настроить стек напрямую, и вызовы «memcpy» могут стать встроенными циклами копирования. В
результирующий код часто меньше и быстрее, но поскольку функция не вызывает
больше не отображаются как таковые, вы не можете установить точку останова для этих вызовов или изменить
поведение функций при связывании с другой библиотекой. Кроме того, когда
функция распознается как встроенная функция, GCC может использовать информацию об этом
функция для предупреждения о проблемах с вызовами этой функции или для генерации дополнительных
эффективный код, даже если полученный код все еще содержит вызовы этой функции. Для
например, предупреждения даются с -Wформат для плохих вызовов "printf", когда "printf"
встроенный и "strlen", как известно, не изменяют глобальную память.

Для -fno-встроенный-функция опция только встроенная функция функция выключен.
функция не должно начинаться с __встроенный_. Если названа функция, которая не является встроенной
в этой версии GCC этот параметр игнорируется. Нет соответствующего
-fbuiltin-функция вариант; если вы хотите включить встроенные функции выборочно, когда
через -fno-встроенный or -Отдельные, вы можете определять такие макросы, как:

#define abs (n) __builtin_abs ((n))
# определить strcpy (d, s) __builtin_strcpy ((d), (s))

-fhosted
Утверждают, что компиляция нацелена на размещенную среду. Из этого следует -fbuiltin,
размещенная среда - это среда, в которой доступна вся стандартная библиотека, а в
который "main" имеет тип возвращаемого значения "int". Примеры почти все, кроме
ядро. Это эквивалентно -fno-отдельно стоящий.

-Отдельные
Утверждают, что компиляция нацелена на автономную среду. Из этого следует
-fno-встроенный. Автономная среда - это среда, в которой стандартная библиотека не может
существуют, и запуск программы не обязательно должен быть в «главном». Самый очевидный пример
это ядро ​​ОС. Это эквивалентно -fno-хостинг.

-fopenmp
Включите обработку директив OpenMP "#pragma omp" в C / C ++ и "! $ Omp" в Fortran.
После появления -fopenmp указан, компилятор генерирует параллельный код в соответствии с
Интерфейс прикладных программ OpenMP v4.0http://www.openmp.org/>. Этот вариант
подразумевает -pthread, и поэтому поддерживается только для целей, которые поддерживают
-pthread. -fopenmp подразумевает -fopenmp-simd.

-fopenmp-simd
Включите обработку директив SIMD OpenMP с помощью "#pragma omp" в C / C ++ и "! $ Omp" в
Фортран. Другие директивы OpenMP игнорируются.

-fcilkplus
Включите использование функций расширения языка Cilk Plus для C / C ++. Когда вариант
-fcilkplus указан, включите использование функций расширения Cilk Plus Language
для C / C ++. Настоящая реализация следует за ABI версии 1.2. Это
экспериментальная функция, которая завершена только частично, интерфейс которой может измениться
в будущих версиях GCC по мере изменения официальной спецификации. В настоящее время все
функции, кроме "_Cilk_for", были реализованы.

-fgnu-тм
Когда вариант -fgnu-тм указан, компилятор генерирует код для Linux
вариант текущей спецификации Intel Transactional Memory ABI (Revision
1.1, 6 мая 2009 г.). Это экспериментальная функция, интерфейс которой может измениться в
будущие версии GCC по мере изменения официальной спецификации. Обратите внимание, что не
для этой функции поддерживаются все архитектуры.

Для получения дополнительной информации о поддержке GCC транзакционной памяти,

Обратите внимание, что функция транзакционной памяти не поддерживается с исключениями, не связанными с вызовом.
(-fnon-call-исключения).

-fms-extension
Примите некоторые нестандартные конструкции, используемые в файлах заголовков Microsoft.

В коде C ++ это позволяет именам членов в структурах быть похожими на предыдущие типы.
деклараций.

определение типа int UOW;
структура ABC {
УОВ УОВ;
};

Некоторые случаи безымянных полей в структурах и объединениях принимаются только с этим
опцию.

Обратите внимание, что этот параметр отключен для всех целей, кроме целей i? 86 и x86_64, использующих ms-abi.

-fplan9-extension
Примите некоторые нестандартные конструкции, используемые в коде Plan 9.

Это позволяет -fms-extension, позволяет передавать указатели на структуры с анонимным
поля к функциям, которые ожидают указатели на элементы типа поля, и
позволяет ссылаться на анонимные поля, объявленные с использованием typedef. Это только
поддерживается для C, а не C ++.

-триграфы
Поддержка триграфов ISO C. В -анси вариант (и -стандарт варианты строгого ISO C
соответствие) подразумевает -триграфы.

-традиционный
-традиционный-cpp
Раньше эти параметры заставляли GCC пытаться эмулировать предстандартный компилятор C.
Теперь они поддерживаются только -E выключатель. Препроцессор продолжает поддерживать
предстандартный режим. См. Подробности в руководстве GNU CPP.

-fcond-несоответствие
Разрешить условные выражения с несовпадающими типами во втором и третьем аргументах.
Значение такого выражения недействительно. Этот параметр не поддерживается для C ++.

-lax-vector-conversions
Разрешить неявное преобразование между векторами с разным количеством элементов и / или
несовместимые типы элементов. Этот параметр не следует использовать для нового кода.

-funsigned-char
Пусть тип «char» будет беззнаковым, как «unsigned char».

Каждый тип машины имеет значение по умолчанию для char. Это либо похоже на
"unsigned char" по умолчанию или как "signed char" по умолчанию.

В идеале переносимая программа всегда должна использовать "signed char" или "unsigned char", когда она
зависит от подписи объекта. Но многие программы написаны для использования
обычный "char" и ожидайте, что он будет подписан, или ожидайте, что он будет без подписи, в зависимости от
машины, для которых они были написаны. Этот вариант и его обратный позволяют сделать такой
программа работает с обратным по умолчанию.

Тип "char" всегда отличается от типа "signed char" или "unsigned".
char ", хотя его поведение всегда такое же, как у одного из этих двух.

-fsigned-char
Пусть тип "char" будет подписан, как "signed char".

Обратите внимание, что это эквивалентно -fno-без знака-char, что является отрицательной формой
-funsigned-char. Точно так же вариант -fno-подписанный-символ эквивалентна
-funsigned-char.

-fsigned-битовые поля
-funsigned-битовые поля
-fno-знаковые-битовые поля
-fno-беззнаковые битовые поля
Эти параметры определяют, является ли битовое поле подписанным или беззнаковым, когда объявление
не использует ни «подписанный», ни «беззнаковый». По умолчанию такое битовое поле подписано,
потому что это согласовано: основные целочисленные типы, такие как int, являются типами со знаком.

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

g ++ -g -frepo -O -c firstClass.C

В этом примере только -фрепо опция, предназначенная только для программ на C ++; вы можете использовать
другие варианты на любом языке, поддерживаемом GCC.

Вот список опций, которые Важно для компиляции программ на C ++:

-fabi-version =n
Использовать версию n C ++ ABI. По умолчанию - версия 2.

Версия 0 относится к версии, наиболее точно соответствующей спецификации C ++ ABI.
Следовательно, ABI, полученный с использованием версии 0, будет изменяться в разных версиях G ++.
по мере исправления ошибок ABI.

Версия 1 - это версия C ++ ABI, которая впервые появилась в G ++ 3.2.

Версия 2 - это версия C ++ ABI, которая впервые появилась в G ++ 3.4.

Версия 3 исправляет ошибку при обработке постоянного адреса как аргумента шаблона.

Версия 4, впервые появившаяся в G ++ 4.5, реализует стандартную обработку векторных изображений.
типы.

Версия 5, которая впервые появилась в G ++ 4.6, исправляет искажение атрибутов.
const / volatile для типов указателей на функции, decltype простого декларации и использование
параметр функции в объявлении другого параметра.

Версия 6, впервые появившаяся в G ++ 4.7, исправляет продвижение C ++ 11.
перечисления с областью видимости и изменение пакетов аргументов шаблона, const / static_cast, prefix ++
и -, и функция области видимости класса, используемая в качестве аргумента шаблона.

Смотрите также -Ваби.

-fno-контроль доступа
Отключите все проверки доступа. Этот переключатель в основном полезен для работы с ошибками в
код контроля доступа.

-fcheck-новый
Убедитесь, что указатель, возвращаемый оператором new, не равен нулю, прежде чем пытаться
изменить выделенное хранилище. В этой проверке обычно нет необходимости, поскольку C ++
стандарт указывает, что «оператор новый» возвращает 0, только если он объявлен бросать() и отправлять адресату
в этом случае компилятор всегда проверяет возвращаемое значение даже без этой опции. В
во всех остальных случаях, когда "operator new" имеет непустую спецификацию исключения, память
об истощении сигнализирует бросок "std :: bad_alloc". Смотрите также new (не стрелка).

-fconstexpr-depth =n
Установите максимальную глубину вложенной оценки для функций constexpr C ++ 11 на n. Предел
необходим для обнаружения бесконечной рекурсии во время вычисления константного выражения. В
минимум, установленный стандартом, - 512.

-fdeduce-init-список
Включите вывод параметра типа шаблона как "std :: initializer_list" из фигурной скобки-
вложенный список инициализаторов, т.е.

шаблон автоматическая пересылка (T t) -> decltype (realfn (t))
{
вернуть realfn (t);
}

пусто f ()
{
вперед ({1,2}); // переадресация вызова >
}

Этот вычет был реализован как возможное расширение первоначально предложенного
семантика для стандарта C ++ 11, но не была частью окончательного стандарта, поэтому
по умолчанию отключено. Эта опция устарела и может быть удалена в будущем.
версия G ++.

-друг-инъекция
Внедрить дружественные функции во внутреннее пространство имен, чтобы они были видны снаружи.
область действия класса, в котором они объявлены. Были задокументированы дружественные функции
чтобы работать таким образом в старом Справочном руководстве по C ++ с аннотациями и более ранних версиях G ++
4.1 всегда так работала. Однако в ISO C ++ дружественная функция, которая не
объявленные во включающей области видимости можно найти только с помощью поиска, зависящего от аргументов.
Эта опция заставляет друзей вводиться так же, как и в более ранних версиях.

Этот параметр предназначен для обеспечения совместимости и может быть удален в будущем выпуске G ++.

-fno-elide-конструкторы
Стандарт C ++ позволяет реализации опускать создание временного файла, который только
используется для инициализации другого объекта того же типа. Указание этого параметра отключает
эта оптимизация и заставляет G ++ вызывать конструктор копирования во всех случаях.

-fno-enforce-eh-specs
Не создавайте код для проверки нарушения спецификаций исключений во время выполнения.
Этот параметр нарушает стандарт C ++, но может быть полезен для уменьшения размера кода в
производственные сборки, что очень похоже на определение ОТЛАДКА. Это не дает права доступа к пользовательскому коду
генерировать исключения в нарушение спецификаций исключений; компилятор все еще
оптимизируется на основе спецификаций, поэтому выдача неожиданного исключения приводит к
неопределенное поведение во время выполнения.

-fextern-tls-инит
-fno-extern-tls-инит
Стандарты C ++ 11 и OpenMP позволяют thread_local и потокчастный переменные иметь
динамическая (во время выполнения) инициализация. Чтобы поддержать это, любое использование такой переменной идет
через функцию-оболочку, которая выполняет любую необходимую инициализацию. Когда использование
и определение переменной находятся в той же единице перевода, эти накладные расходы могут быть
оптимизирован, но когда используется другая единица перевода, есть
значительные накладные расходы, даже если переменная на самом деле не нуждается в динамическом
инициализация. Если программист может быть уверен, что нельзя использовать переменную в не-
определение TU должно запускать динамическую инициализацию (либо потому, что переменная
статически инициализирован, или будет выполнено использование переменной в определяющем TU
перед любым использованием в другом TU), они могут избежать этих накладных расходов с помощью
-fno-extern-tls-инит опцию.

Для целей, поддерживающих псевдонимы символов, значение по умолчанию -fextern-tls-инит. По мишеням
которые не поддерживают псевдонимы символов, по умолчанию -fno-extern-tls-инит.

-for-scope
-fno-для-области
If -for-scope указан, объем переменных, объявленных в for-init-оператор
ограничивается для сам цикл, как указано в стандарте C ++. Если
-fno-для-области указан, объем переменных, объявленных в for-init-оператор
распространяется до конца охватывающей области, как это было в старых версиях G ++, и
другие (традиционные) реализации C ++.

Если ни один из флагов не задан, по умолчанию используется стандарт, но разрешается и предоставляется
предупреждение для кода старого стиля, который в противном случае был бы недействительным или имел другой
поведение.

-fno-gnu-ключевые слова
Не распознавайте "typeof" как ключевое слово, чтобы код мог использовать это слово как
идентификатор. Вместо этого вы можете использовать ключевое слово «__typeof__». -анси подразумевает
-fno-gnu-ключевые слова.

-fno-неявные-шаблоны
Никогда не создавайте код для не встроенных шаблонов, экземпляры которых создаются неявно (т. Е.
использовать); испускать код только для явных экземпляров.

-fno-неявные-встроенные шаблоны
Также не создавайте код для неявных экземпляров встроенных шаблонов. По умолчанию
по-разному обрабатывать встроенные строки, чтобы компилировать с необходимостью оптимизации и без нее.
тот же набор явных экземпляров.

-fno-реализация-inlines
Чтобы сэкономить место, не выделяйте автономные копии встроенных функций, управляемых
#прагма реализация. Это вызывает ошибки компоновщика, если эти функции не встроены.
везде они называются.

-fms-extension
Отключите предупреждения Wpedantic о конструкциях, используемых в MFC, таких как неявные int и
получение указателя на функцию-член с помощью нестандартного синтаксиса.

-fno-nonansi-встроенные
Отключите встроенные объявления функций, которые не требуются ANSI / ISO C.
включать "ffs", "alloca", "_exit", "index", "bzero", "conf" и другие связанные
функции.

-fnothrow-opt
Относитесь к спецификации исключения "throw ()" так, как если бы это была спецификация "noexcept" для
уменьшить или устранить накладные расходы на размер текста относительно функции без исключения
Технические характеристики. Если функция имеет локальные переменные типов с нетривиальными
деструкторы, спецификация исключения фактически делает функцию меньше, потому что
очистку EH для этих переменных можно оптимизировать. Смысловой эффект
что исключение выброшено из функции с такой спецификацией исключения
приводит к вызову «завершить», а не «неожиданно».

-fno-имена-операторов
Не обрабатывать ключевые слова имени оператора "и", "битанд", "битор", "компл", "не", "или"
и «xor» как синонимы как ключевые слова.

-fno-необязательный-diags
Отключите диагностику, которая, по стандарту, компилятору не требуется.
В настоящее время G ++ выдаёт только такую ​​диагностику для имени, имеющего
несколько значений внутри класса.

-f разрешающий
Понизьте диагностику несоответствующего кода с ошибок до предупреждений. Таким образом,
через -f разрешающий позволяет компилировать несоответствующий код.

-fno-красивые-шаблоны
Когда сообщение об ошибке относится к специализации шаблона функции, компилятор
обычно печатает подпись шаблона, за которой следуют аргументы шаблона и
любые определения типов или имена типов в сигнатуре (например, "void f (T) [with T = int]" скорее
чем "void f (int)"), чтобы было ясно, какой шаблон задействован. Когда ошибка
сообщение относится к специализации шаблона класса, компилятор пропускает любые
аргументы шаблона, которые соответствуют аргументам шаблона по умолчанию для этого шаблона. Если
любое из этих действий затрудняет понимание сообщения об ошибке, а не
проще, вы можете использовать -fno-красивые-шаблоны чтобы отключить их.

-фрепо
Включите автоматическое создание шаблона во время связывания. Этот вариант также подразумевает
-fno-неявные-шаблоны.

-фно-ртти
Отключить генерацию информации о каждом классе с виртуальными функциями для использования
функции идентификации типа времени выполнения C ++ (динамический_cast и TypeId). Если вы этого не сделаете
используйте эти части языка, вы можете сэкономить место, используя этот флаг. Примечание
эта обработка исключений использует ту же информацию, но G ++ генерирует ее по мере необходимости. В
динамический_cast оператор по-прежнему может использоваться для приведения типов, которые не требуют типа времени выполнения
информация, т.е. преобразуется в "void *" или в однозначные базовые классы.

-fstats
Выдача статистики о внешней обработке в конце компиляции. Этот
информация обычно полезна только для команды разработчиков G ++.

-fstrict-перечисления
Разрешить компилятору оптимизировать, используя предположение, что значение перечислимого типа
может быть только одно из значений перечисления (как определено в стандарте C ++;
в основном, значение, которое может быть представлено в минимальном количестве битов, необходимых для
представляют все счетчики). Это предположение может быть неверным, если программа использует
приведение для преобразования произвольного целочисленного значения в перечислимый тип.

-ftemplate-backtrace-limit =n
Установите максимальное количество примечаний по созданию экземпляров шаблона для одного предупреждения или ошибки
в n. Значение по умолчанию - 10.

-ftemplate-depth =n
Установите максимальную глубину создания экземпляров для классов шаблонов на n. Ограничение на
глубина создания экземпляра шаблона необходима для обнаружения бесконечных рекурсий во время шаблона
создание экземпляра класса. Программы, соответствующие ANSI / ISO C ++, не должны полагаться на максимум
глубина больше 17 (изменена на 1024 в C ++ 11). Значение по умолчанию - 900, так как
В некоторых ситуациях компилятору может не хватить места в стеке, прежде чем он достигнет значения 1024.

-fno-threadsafe-статика
Не используйте дополнительный код для использования подпрограмм, указанных в C ++ ABI для потоковой передачи.
безопасная инициализация локальной статики. Вы можете использовать эту опцию, чтобы уменьшить размер кода
немного в коде, который не обязательно должен быть потокобезопасным.

-предохранитель-cxa-atexit
Зарегистрируйте деструкторы для объектов со статической продолжительностью хранения с помощью «__cxa_atexit»
вместо функции "atexit". Эта опция необходима для полного
совместимая со стандартами обработка статических деструкторов, но работает только в том случае, если ваша библиотека C
поддерживает «__cxa_atexit».

-fno-use-cxa-получить-исключение-указатель
Не используйте подпрограмму времени выполнения «__cxa_get_exception_ptr». Это вызывает
"std :: uncaught_exception" неверно, но необходимо, если подпрограмма времени выполнения
не доступны.

-fvisibility-встроенные-скрытые
Этот переключатель заявляет, что пользователь не пытается сравнивать указатели со встроенными
функции или методы, в которых адреса двух функций взяты в разных
общие объекты.

В результате GCC может помечать встроенные методы с помощью
"__attribute__ ((visibility (" hidden ")))", чтобы они не отображались в экспорте
таблицы DSO и не требуют косвенного обращения к PLT при использовании в DSO.
Включение этой опции может существенно повлиять на время загрузки и соединения DSO, поскольку
значительно уменьшает размер таблицы динамического экспорта, когда библиотека делает тяжелые
использование шаблонов.

Поведение этого переключателя не совсем то же, что и отметка методов как скрытых.
напрямую, потому что он не влияет на статические переменные, локальные для функции или причины
компилятор, чтобы сделать вывод, что функция определена только в одном общем объекте.

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

Явно созданные экземпляры встроенных методов не затрагиваются этой опцией, поскольку их связь
в противном случае может пересечь границу разделяемой библиотеки.

-fvisibility-ms-совместимость
Этот флаг пытается использовать настройки видимости для создания модели связывания GCC C ++.
совместим с Microsoft Visual Studio.

Флаг вносит следующие изменения в модель связывания GCC:

1. По умолчанию устанавливается видимость "скрытая", например -fvisibility = скрытый.

2. Типы, но не их члены, по умолчанию не скрываются.

3. Правило одного определения ослаблено для типов без явной видимости.
спецификации, которые определены более чем в одном общем объекте: эти объявления
разрешены, если они разрешены, когда эта опция не используется.

В новом коде лучше использовать -fvisibility = скрытый и экспортировать те классы, которые
предназначен для внешнего вида. К сожалению, код может полагаться,
возможно, случайно, из-за поведения Visual Studio.

Среди последствий этих изменений - статические элементы данных одного типа.
с тем же именем, но определенные в разных общих объектах, различаются, поэтому изменение
одно не меняет другого; и указатели на функции-члены, определенные в
разные общие объекты могут не сравниваться одинаково. Когда установлен этот флаг, это
нарушение ODR по разному определению типов с одним и тем же именем.

-fvtable-verify =std | preinit | none
Включите (или выключите, если используете -fvtable-verify = нет) функция безопасности, которая проверяется на
во время выполнения для каждого виртуального вызова указатель vtable, через который
сделанный вызов действителен для данного типа объекта, не был поврежден или
перезаписан. Если обнаружен недопустимый указатель vtable (во время выполнения), возникает ошибка
сообщается, и выполнение программы немедленно останавливается.

Эта опция вызывает создание структур данных времени выполнения при запуске программы для
проверка указателей vtable. Параметры "std" и "preinit" управляют временем
когда построены эти структуры данных. В обоих случаях строятся структуры данных.
до того, как выполнение достигнет «основного». В -fvtable-verify = std вызывает эту структуру данных
для сборки после загрузки и инициализации разделяемых библиотек.
-fvtable-verify = preinit заставляет их быть построенными до того, как общие библиотеки будут
загружен и инициализирован.

Если этот параметр появляется в строке компилятора несколько раз с разными значениями
указано, «none» будет иметь наивысший приоритет перед «std» и «preinit»; 'preinit'
будет иметь приоритет над 'std'.

-fvtv-отладка
Вызывает отладочные версии функций времени выполнения для функции проверки vtable к
называться. Это предполагает -fvtable-verify = std or -fvtable-verify = preinit было
использовал. Этот флаг также заставит компилятор отслеживать, какие указатели vtable
он нашел для каждого класса и записал эту информацию в файл
"vtv_set_ptr_data.log" в каталоге файла дампа на компьютере пользователя.

Примечание. Эта функция ДОБАВЛЯЕТ данные в файл журнала. Если вам нужен свежий файл журнала,
обязательно удалите все существующие.

-fvtv-количество
Это флаг отладки. При использовании вместе с -fvtable-verify = std or
-fvtable-verify = preinit, это заставляет компилятор отслеживать общее количество
виртуальные вызовы, с которыми он столкнулся, и количество вставленных проверок. Это также
подсчитывает количество вызовов определенных функций библиотеки времени выполнения, которые он вставляет. Этот
информация для каждой единицы компиляции записывается в файл с именем
"vtv_count_data.log" в каталоге dump_file на компьютере пользователя. Это также
подсчитывает размер наборов указателей vtable для каждого класса и записывает эту информацию
в "vtv_class_set_sizes.log" в том же каталоге.

Примечание. Эта функция ДОБАВЛЯЕТ данные в файлы журнала. Чтобы получить свежие файлы журнала, убедитесь, что
удалить все существующие.

-fno-слабый
Не используйте слабую поддержку символов, даже если она предоставляется компоновщиком. По умолчанию G ++
использует слабые символы, если они доступны. Эта опция существует только для тестирования, и
не должны использоваться конечными пользователями; это приводит к неполноценному коду и не дает никаких преимуществ.
Эта опция может быть удалена в будущем выпуске G ++.

-nostdinc ++
Не ищите файлы заголовков в стандартных каталогах, характерных для C ++, но выполняйте
по-прежнему ищите в других стандартных каталогах. (Эта опция используется при построении
Библиотека C ++.)

Кроме того, эти параметры оптимизации, предупреждения и генерации кода имеют только значение.
для программ на C ++:

-Ваби (Только C, Objective-C, C ++ и Objective-C ++)
Предупреждать, когда G ++ генерирует код, который, вероятно, несовместим с независимым от производителя
C ++ ABI. Хотя были предприняты усилия, чтобы предупредить обо всех таких случаях, есть
возможно, в некоторых случаях, о которых не было предупреждений, даже если G ++ генерирует
несовместимый код. Также могут быть случаи, когда предупреждения выдаются, даже если
генерируемый код совместим.

Вам следует переписать свой код, чтобы избежать этих предупреждений, если вас беспокоит
тот факт, что код, сгенерированный G ++, может быть двоично несовместим с кодом, сгенерированным
другие компиляторы.

Известные несовместимости в -fabi-version = 2 (по умолчанию) включают:

· Шаблон с параметром шаблона, не являющимся типом, ссылочного типа искажен
неправильно:

внешний интервал N;
шаблон struct S {};
void n (S ) {2}

Это исправлено в -fabi-version = 3.

· Типы векторов SIMD, объявленные с использованием "__attribute ((vector_size))", искажаются в
нестандартный способ, не допускающий перегрузки функций, принимающих векторы
разных размеров.

Изменено искажение в -fabi-version = 4.

Известные несовместимости в -fabi-version = 1 следующие:

· Некорректная обработка хвостового заполнения для битовых полей. G ++ может попытаться упаковать данные
в тот же байт, что и базовый класс. Например:

struct A {виртуальная пустота f (); int f1: 1; };
структура B: общедоступная A {int f2: 1; };

В этом случае G ++ помещает «B :: f2» в тот же байт, что и «A :: f1»; другие компиляторы делают
нет. Вы можете избежать этой проблемы, явно дополнив букву "A" так, чтобы ее размер был равен
кратный размеру байта на вашей платформе; что заставляет G ++ и другие компиляторы
"Б" выкладываю тождественно.

· Неправильная обработка хвостовой обивки для виртуальных баз. G ++ не использует хвост
отступы при раскладке виртуальных баз. Например:

struct A {виртуальная пустота f (); char c1; };
структура B {B (); char c2; };
структура C: общедоступный A, общедоступный виртуальный B {};

В этом случае G ++ не помещает «B» в хвостовое дополнение для «A»; Другие
компиляторы делают. Вы можете избежать этой проблемы, явно добавив букву "A", чтобы ее
размер кратен его выравниванию (без учета виртуальных базовых классов); что вызывает
G ++ и другие компиляторы выкладывают "C" одинаково.

· Некорректная обработка битовых полей с заявленной шириной больше, чем их
базовые типы, когда битовые поля появляются в объединении. Например:

объединение U {int i: 4096; };

Предполагая, что int не имеет 4096 бит, G ++ делает объединение слишком маленьким на
количество бит в "int".

· Пустые классы могут быть размещены в неправильных смещениях. Например:

структура А {};

структура Б {
А а;
виртуальная пустота f ();
};

структура C: общедоступная B, общедоступная A {};

G ++ помещает базовый класс «A» в «C» с ненулевым смещением; он должен быть размещен в
смещение нуля. G ++ ошибочно полагает, что член данных "A" в "B" уже
при нулевом смещении.

· Имена шаблонных функций, типы которых включают "typename" или шаблон шаблона.
параметры могут быть изменены неправильно.

шаблон
void f (typename Q :: X) {}

шаблон класс Q>
void f (имя типа Q ::ИКС) {}

Экземпляры этих шаблонов могут быть искажены некорректно.

Он также предупреждает об изменениях, связанных с psABI. Известный psABI изменяется на этом этапе
следующие:

· Для SysV / x86-64 объединения с членами типа long double передаются в память как
указано в psABI. Например:

союз U {
длинный двойной ld;
инт я;
};

"union U" всегда передается в памяти.

-Wctor-dtor-конфиденциальность (Только C ++ и Objective-C ++)
Предупреждать, когда класс кажется непригодным для использования, потому что все конструкторы или деструкторы в этом
class являются частными, и у него нет ни друзей, ни общедоступных статических функций-членов.
Также предупредите, если нет неприкосновенных методов, и есть хотя бы один закрытый член
функция, которая не является конструктором или деструктором.

-Wdelete-не виртуальный-dtor (Только C ++ и Objective-C ++)
Предупредить, когда удалять используется для уничтожения экземпляра класса, который имеет виртуальные функции
и не виртуальный деструктор. Удалять экземпляр производного класса небезопасно.
через указатель на базовый класс, если базовый класс не имеет виртуального
деструктор. Это предупреждение включено -Стена.

-Буквенный суффикс (Только C ++ и Objective-C ++)
Предупреждать, если за строковым или символьным литералом следует ud-суффикс, который не соответствует
начинаются с подчеркивания. В качестве соответствующего расширения GCC обрабатывает такие суффиксы как
отдельные токены предварительной обработки для обеспечения обратной совместимости с кодом
который использует макросы форматирования из " ". Например:

#define __STDC_FORMAT_MACROS
#включают
#включает в себя

int main () {
int64_t i64 = 123;
printf ("Мой int64:%" PRId64 "\ n", i64);
}

В этом случае «PRId64» рассматривается как отдельный токен предварительной обработки.

Это предупреждение включено по умолчанию.

-Украшивание (Только C ++ и Objective-C ++)
Предупреждать, когда сужающее преобразование, запрещенное C ++ 11, происходит внутри { }, например

int i = {2.2}; // ошибка: сужение с double до int

Этот флаг включен в -Стена и -Wc ++ 11-compat.

В -std = c ++ 11, -Без сужения подавляет диагностику, требуемую стандартом.
Обратите внимание, что это не влияет на смысл правильно сформированного кода; сужение конверсий
все еще считаются плохо сформированными в контексте SFINAE.

-Без исключения (Только C ++ и Objective-C ++)
Предупреждать, когда выражение noexcept оценивается как ложное из-за вызова функции
который не имеет спецификации исключения, не вызывающего выброса (т. е. бросать() or нет кроме)
но компилятор знает, что никогда не генерирует исключение.

-Wnon-виртуальный-dtor (Только C ++ и Objective-C ++)
Предупреждать, когда у класса есть виртуальные функции и доступный невиртуальный деструктор
сам или в доступном полиморфном базовом классе, и в этом случае это возможно, но
небезопасно удалять экземпляр производного класса через указатель на сам класс
или базовый класс. Это предупреждение активируется автоматически, если -Weffc ++ указан.

-Замена (Только C ++ и Objective-C ++)
Предупреждать, когда порядок инициализаторов членов, указанный в коде, не соответствует порядку
в котором они должны быть выполнены. Например:

структура А {
инт я;
интервал j;
A (): j (0), i (1) {}
};

Компилятор перестраивает инициализаторы членов для i и j соответствовать декларации
порядок членов с предупреждением об этом. Это предупреждение включено
-Стена.

-fext-числовые-литералы (Только C ++ и Objective-C ++)
Принимать суффиксы мнимых букв, букв с фиксированной точкой или машинно-определяемые числа как GNU
расширения. Когда этот параметр выключен, эти суффиксы обрабатываются как пользователь C ++ 11 -
определенные буквальные числовые суффиксы. По умолчанию это включено для всех диалектов до C ++ 11.
и все диалекты GNU: -std = c ++ 98, -std = GNU ++ 98, -std = GNU ++ 11, -std = GNU ++ 1y. Это
опция выключена по умолчанию для ISO C ++ 11 и более поздних версий (-std = c ++ 11...).

Следующие -W ... параметры не зависят от -Стена.

-Weffc ++ (Только C ++ и Objective-C ++)
Предупреждать о нарушениях следующих рекомендаций по стилю от Скотта Мейерса: Эффективный
C + + серия книг:

· Определите конструктор копирования и оператор присваивания для классов с динамически-
выделенная память.

· Предпочитайте инициализацию присваиванию в конструкторах.

· Сделайте так, чтобы оператор "operator =" возвращал ссылку на * this.

· Не пытайтесь вернуть ссылку, если вы должны вернуть объект.

· Различать префиксную и постфиксную формы операторов инкремента и декремента.

· Никогда не перегружайте "&&", "||" или ",".

Эта опция также включает -Wnon-виртуальный-dtor, который также является одним из эффективных C ++
рекомендации. Однако проверка расширена, чтобы предупредить об отсутствии виртуальных
деструктор в доступных неполиморфных базовых классах.

Выбирая эту опцию, имейте в виду, что заголовки стандартной библиотеки не подчиняются всем
этих руководящих принципов; использовать GREP -v чтобы отфильтровать эти предупреждения.

-Wstrict-null-дозорный (Только C ++ и Objective-C ++)
Предупредить об использовании в качестве контрольного значения "NULL" без преобразования. При компиляции только с GCC
это действительный дозорный, поскольку «NULL» определяется как «__null». Хотя это нуль
константа указателя, а не нулевой указатель, гарантированно будет иметь тот же размер
как указатель. Но это использование не переносимо между разными компиляторами.

-Wno-друг-нешаблон (Только C ++ и Objective-C ++)
Отключите предупреждения, когда в шаблоне объявляются нешаблонные дружественные функции.
С появлением явной поддержки спецификации шаблонов в G ++, если имя
друг - это неквалифицированный идентификатор (т. е. друг foo (число)), спецификация языка C ++
требует, чтобы друг объявил или определил обычную, не шаблонную функцию. (Раздел
14.5.3). До того, как G ++ реализовал явную спецификацию, неквалифицированные идентификаторы могли быть
интерпретируется как конкретная специализация шаблонной функции. Потому что это
несоответствующее поведение больше не является поведением по умолчанию для G ++,
-Без-шаблон-друг позволяет компилятору проверять существующий код на предмет потенциальных проблем
пятна и по умолчанию включен. Это новое поведение компилятора можно отключить с помощью
-Wno-друг-нешаблон, который сохраняет соответствующий код компилятора, но отключает
полезное предупреждение.

- Актерский состав в стиле Уолда (Только C ++ и Objective-C ++)
Предупреждать, если в программе на C ++ используется приведение старого стиля (стиля C) к непустому типу.
Приведения нового стиля (динамический_cast, static_cast, переинтерпретировать_castи const_cast) находятся
менее уязвимы для непреднамеренных эффектов и их намного проще искать.

-Woverloaded-виртуальный (Только C ++ и Objective-C ++)
Предупреждать, когда объявление функции скрывает виртуальные функции от базового класса. Для
например, в:

структура А {
виртуальная пустота f ();
};

структура B: общественность A {
void f (int);
};

версия "f" класса "A" скрыта в "B", и код вроде:

B * b;
b-> f ();

не компилируется.

-Wno-pmf-преобразования (Только C ++ и Objective-C ++)
Отключите диагностику для преобразования привязанного указателя на функцию-член в простой
указатель.

-Wsign-Promo (Только C ++ и Objective-C ++)
Предупреждать, когда при разрешении перегрузки выбирается повышение с беззнакового или перечислимого типа на
знаковый тип по сравнению с преобразованием в беззнаковый тип того же размера. Предыдущий
версии G ++ пытались сохранить неподписанность, но стандарт требует текущих
поведение.

Опции Управление Objective-C и Objective-C ++ Диалекты
(ПРИМЕЧАНИЕ: это руководство не описывает языки Objective-C и Objective-C ++.
самих себя.

В этом разделе описаны параметры командной строки, которые имеют значение только для Objective-C.
и программы Objective-C ++. Вы также можете использовать большую часть независимого от языка GNU
параметры компилятора. Например, вы можете скомпилировать файл some_class.m следующим образом:

gcc -g -fgnu-runtime -O -c some_class.m

В этом примере -fgnu-время выполнения это опция, предназначенная только для Objective-C и Objective-C ++
программы; вы можете использовать другие параметры с любым языком, поддерживаемым GCC.

Обратите внимание, что поскольку Objective-C является расширением языка C, компиляции Objective-C
может также использовать параметры, специфичные для интерфейса C (например, -Wтрадиционный). Точно так же,
Компиляции Objective-C ++ могут использовать специфические для C ++ параметры (например, -Ваби).

Вот список опций, которые Важно для компиляции Objective-C и Objective-C ++
программы:

-fconstant-строка-класс =имя класса
Используйте имя класса как имя класса для создания экземпляра для каждой литеральной строки
указано с синтаксисом "@" ... "". Имя класса по умолчанию - "NXConstantString", если
используется среда выполнения GNU и "NSConstantString", если среда выполнения NeXT
используется (см. ниже). В -fconstant-cfstrings опция, если она также присутствует, отменяет
-fconstant-string-класс устанавливает и заставляет литералы "@" ... "" располагаться как константы
Строки CoreFoundation.

-fgnu-время выполнения
Сгенерируйте объектный код, совместимый со стандартной средой выполнения GNU Objective-C. Это
значение по умолчанию для большинства типов систем.

-fnext-время выполнения
Сгенерируйте вывод, совместимый со средой выполнения NeXT. Это значение по умолчанию для NeXT-based.
систем, включая Darwin и Mac OS X. Макрос «__NEXT_RUNTIME__» предопределен, если
(и только если) эта опция используется.

-fno-nil-приемники
Предположим, что все отправления сообщений Objective-C ("[сообщение получателя: arg]") в этом
единица перевода гарантирует, что получатель не равен нулю. Это позволяет больше
эффективные точки входа в среду выполнения. Эта опция доступна только в
в сочетании со средой выполнения NeXT и ABI версии 0 или 1.

-fobjc-abi-version =n
Использовать версию n ABI Objective-C для выбранной среды выполнения. Этот вариант
в настоящее время поддерживается только для среды выполнения NeXT. В этом случае версия 0 является
традиционный (32-битный) ABI без поддержки свойств и прочего Objective-C 2.0
дополнения. Версия 1 - это традиционный (32-битный) ABI с поддержкой свойств и
другие дополнения Objective-C 2.0. Версия 2 - это современный (64-битный) ABI. Если ничего нет
указано, по умолчанию используется версия 0 на 32-разрядных целевых машинах и версия 2 на 64-разрядных
целевые машины.

-fobjc-call-cxx-cdtors
Для каждого класса Objective-C проверьте, является ли какая-либо из его переменных экземпляра объектом C ++.
с нетривиальным конструктором по умолчанию. Если да, синтезируйте специальный "- (id)
.cxx_construct "метод экземпляра, который запускает нетривиальные конструкторы по умолчанию на любом
такие переменные экземпляра по порядку, а затем возвращают "self". Точно так же проверьте, есть ли
переменная экземпляра - это объект C ++ с нетривиальным деструктором, и если это так, синтезируйте
специальный метод "- (void) .cxx_destruct", который запускает все такие деструкторы по умолчанию, в
обратный порядок.

Таким образом, генерируются только методы "- (id) .cxx_construct" и "- (void) .cxx_destruct"
работают с переменными экземпляра, объявленными в текущем классе Objective-C, а не с теми
унаследован от суперклассов. Среда выполнения Objective-C отвечает за
вызывать все такие методы в иерархии наследования объекта. Значок "- (id)"
.cxx_construct "методы вызываются средой выполнения сразу после нового объекта.
экземпляр выделен; методы "- (void) .cxx_destruct" вызываются немедленно
до того, как среда выполнения освободит экземпляр объекта.

На момент написания этой статьи только среда выполнения NeXT в Mac OS X 10.4 и более поздних версиях поддерживает
вызов методов "- (id) .cxx_construct" и "- (void) .cxx_destruct".

-fobjc-прямая отправка
Разрешить быстрый переход к диспетчеру сообщений. На Дарвине это достигается через
Комм. страница.

-fobjc-исключения
Включите синтаксическую поддержку для структурированной обработки исключений в Objective-C, аналогично
что предлагают C ++ и Java. Эта опция необходима для использования Objective-C
ключевые слова @try, @throw, @catch, @finally и @synchronized. Эта опция доступна
как со средой выполнения GNU, так и со средой выполнения NeXT (но недоступно в сочетании с
среда выполнения NeXT в Mac OS X 10.2 и ранее).

-fobjc-gc
Включите сборку мусора (GC) в программах Objective-C и Objective-C ++. Этот вариант
доступно только в среде исполнения NeXT; среда выполнения GNU имеет другой мусор
реализация коллекции, не требующая специальных флагов компилятора.

-fobjc-nilcheck
Для среды выполнения NeXT с версией 2 ABI проверьте наличие нулевого получателя в методе
вызовы перед выполнением фактического вызова метода. Это значение по умолчанию и может быть
отключен с помощью -fno-objc-nilcheck. Методы класса и супервызовы никогда не проверяются
для nil таким образом, независимо от того, что этот флаг установлен. В настоящее время этот флаг
ничего, когда используется среда выполнения GNU или более старая версия ABI среды выполнения NeXT.

-fobjc-std = objc1
Соответствует синтаксису языка Objective-C 1.0, языка, признанного GCC 4.0.
Это влияет только на дополнения Objective-C к языку C / C ++; это не влияет
соответствие стандартам C / C ++, что контролируется отдельным диалектом C / C ++
флаги опций. Когда этот параметр используется с Objective-C или Objective-C ++
компилятор, любой синтаксис Objective-C, который не распознается GCC 4.0, отклоняется. Этот
полезно, если вам нужно убедиться, что ваш код Objective-C может быть скомпилирован с помощью
старые версии GCC.

-freplace-objc-классы
Выделите специальный маркер, инструктирующий ld(1) не связывать статически полученный объект
файл и разрешить дильд(1) вместо этого загрузить его во время выполнения. Это используется в
в сочетании с режимом отладки Fix-and-Continue, где объектный файл в
вопрос может быть перекомпилирован и динамически перезагружен в процессе работы программы
выполнение, без необходимости перезапускать саму программу. В настоящее время Fix-and-
Функция продолжения доступна только в сочетании со средой выполнения NeXT на Mac.
OS X 10.3 и новее.

-fzero-ссылка
При компиляции для среды выполнения NeXT компилятор обычно заменяет вызовы
"objc_getClass (" ... ")" (когда имя класса известно во время компиляции) с
ссылки на статические классы, которые инициализируются во время загрузки, что улучшает время выполнения
представление. Указание -fzero-ссылка флаг подавляет это поведение и вызывает
вызовы "objc_getClass (" ... ")" для сохранения. Это полезно в Zero-Link
режим отладки, поскольку он позволяет изменять реализации отдельных классов
во время выполнения программы. В настоящее время среда выполнения GNU всегда сохраняет вызовы
"objc_get_class (" ... ")" независимо от параметров командной строки.

-gen-decls
Дамп деклараций интерфейса для всех классов, отображаемых в исходном файле, в файл с именем
имя источника.decl.

-Передача-перехват (Только Objective-C и Objective-C ++)
Предупреждать всякий раз, когда назначение Objective-C перехватывается сборщиком мусора.

-Wno-протокол (Только Objective-C и Objective-C ++)
Если объявлен класс для реализации протокола, для каждого метода выдается предупреждение.
в протоколе, который не реализован классом. По умолчанию
выдает предупреждение для каждого метода, явно не реализованного в классе, даже если
реализация метода наследуется от суперкласса. Если вы используете -Wno-протокол
вариант, то методы, унаследованные от суперкласса, считаются реализованными,
и им не выносится никаких предупреждений.

-Wселектор (Только Objective-C и Objective-C ++)
Предупреждать, если во время
компиляция. Проверка выполняется по списку методов на завершающем этапе
компиляция. Кроме того, проверка выполняется для каждого селектора, появляющегося в
Выражение "@selector (...)", и соответствующий метод для этого селектора был
найдено во время компиляции. Потому что эти проверки сканируют таблицу методов только в конце
компиляции, эти предупреждения не выдаются, если последняя стадия компиляции
не достигнут, например, из-за того, что во время компиляции обнаружена ошибка, или из-за того, что
-fsyntax-только вариант уже используется.

-Wstrict-селектор-соответствие (Только Objective-C и Objective-C ++)
Предупреждать, если обнаружено несколько методов с разными аргументами и / или возвращаемыми типами
данный селектор при попытке отправить сообщение с использованием этого селектора получателю
введите «идентификатор» или «класс». Когда этот флаг выключен (что является поведением по умолчанию),
компилятор пропускает такие предупреждения, если какие-либо обнаруженные различия ограничиваются типами, которые разделяют
того же размера и выравнивания.

-Wundeclared-селектор (Только Objective-C и Objective-C ++)
Предупреждать, если найдено выражение «@selector (...)», относящееся к необъявленному селектору. А
селектор считается необъявленным, если до этого не было объявлено ни одного метода с таким именем
выражение «@selector (...)» либо явно в @interface, либо в @protocol
объявление или неявно в разделе @implementation. Эта опция всегда работает
он проверяет, как только будет найдено выражение "@selector (...)", а -Wселектор Важно
выполняет свои проверки на заключительном этапе компиляции. Это также приводит к тому, что кодирование
соглашение о стилях, согласно которому методы и селекторы должны быть объявлены перед использованием.

-print-objc-runtime-информация
Сгенерируйте заголовок C, описывающий самую большую структуру, которая передается по значению, если таковая имеется.

Опции в Control диагностический Сообщения форматирование
Традиционно диагностические сообщения форматируются независимо от устройства вывода.
аспект (например, его ширина, ...). Вы можете использовать параметры, описанные ниже, для управления
алгоритм форматирования диагностических сообщений, например, сколько символов в строке, как часто
следует сообщить информацию о местонахождении источника. Обратите внимание, что некоторые языковые интерфейсы могут
не соблюдаю эти варианты.

-fmessage-length =n
Постарайтесь отформатировать сообщения об ошибках так, чтобы они умещались в строках примерно n символы. В
по умолчанию 72 символа для г ++ и 0 для остальных интерфейсов, поддерживаемых
GCC. Если n равен нулю, перенос строки не выполняется; каждое сообщение об ошибке появляется на
одна линия.

-fdiagnostics-show-location = один раз
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
передавать информацию о местонахождении источника консолидировать; то есть в случае, если сообщение слишком длинное, чтобы уместиться
на одной физической строке и должен быть обернут, исходное местоположение не будет отправлено
(как префикс) снова и снова, в последующих строках продолжения. Это
поведение по умолчанию.

-fdiagnostics-show-location = каждая строка
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
выдавать ту же информацию о местоположении источника (в виде префикса) для физических линий, которые приводят к
от процесса разбиения сообщения, которое слишком длинное, чтобы поместиться в одной строке.

-fdiagnostics-color [=КОГДА]
-fno-Diagnostics-цвет
Используйте цвет в диагностике. КОГДА is никогда, всегдаили автоматический, По умолчанию никогда if
GCC_COLORS переменная среды отсутствует в среде, и автоматический в противном случае.
автоматический означает использовать цвет только тогда, когда стандартная ошибка - это терминал. Формы
-fdiagnostics-цвет и -fno-Diagnostics-цвет псевдонимы для
-fdiagnostics-color = всегда и -fdiagnostics-color = никогда, Соответственно.

Цвета определяются переменной окружения. GCC_COLORS. Его значение - двоеточие.
разделенный список возможностей и подстроки Select Graphic Rendition (SGR). SGR
команды интерпретируются терминалом или эмулятором терминала. (См. Раздел в
документация вашего текстового терминала для допустимых значений и их значений как
атрибуты символов.) Эти значения подстроки являются целыми числами в десятичном представлении.
и могут быть объединены точкой с запятой. Общие значения для объединения включают 1 для
смелый, 4 для подчеркивания, 5 для моргания, 7 для обратного, 39 для цвета переднего плана по умолчанию, 30
в 37 для цветов переднего плана, 90 в 97 для 16-цветного режима цвета переднего плана, 38; 5; 0 в
38; 5; 255 для 88-цветного и 256-цветного режимов цвета переднего плана, 49 для фона по умолчанию
цвет, 40 в 47 для цветов фона, 100 в 107 для 16-цветного режима фоновых цветов,
и 48; 5; 0 в 48; 5; 255 для 88-цветного и 256-цветного режимов цвета фона.

По умолчанию GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01 в котором 01, 31 жирный
rouge, 01, 35 жирный пурпурный, 01, 36 жирный голубой, 01, 32 жирный зеленый и 01 жирный.
настройка GCC_COLORS к пустой строке отключает цвета. Поддерживаемые возможности:
следующим образом.

"error ="
Подстрока SGR для ошибки: маркеры.

"предупреждение ="
Подстрока SGR для предупреждения: маркеры.

"примечание ="
Подстрока SGR для заметки: маркеры.

"каретка ="
Подстрока SGR для строки каретки.

"locus ="
Подстрока SGR для информации о местоположении, файл: строка or файл: строка: столбец и так далее

"quote ="
Подстрока SGR для информации, напечатанной в кавычках.

-fno-Diagnostics-show-option
По умолчанию каждая отправляемая диагностика включает текст, указывающий параметр командной строки.
который непосредственно управляет диагностикой (если такая опция известна диагностическому
машины). Указание -fno-Diagnostics-show-option флаг подавляет это
поведение.

-fno-диагностика-шоу-каретка
По умолчанию каждое выдаваемое диагностическое сообщение включает исходную строку исходного кода и знак вставки '^'.
с указанием столбца. Эта опция подавляет эту информацию.

Опции в Запрос or Подавить Предупреждения
Предупреждения - это диагностические сообщения, которые сообщают о конструкциях, которые не являются
ошибочные, но опасные или предполагающие, что могла быть ошибка.

Следующие не зависящие от языка параметры не включают конкретные предупреждения, но управляют
виды диагностики, производимые GCC.

-fsyntax-только
Проверьте код на наличие синтаксических ошибок, но не делайте ничего, кроме этого.

-fmax-errors =n
Ограничивает максимальное количество сообщений об ошибках до n, в этот момент GCC выручает скорее
чем пытаться продолжить обработку исходного кода. Если n равно 0 (по умолчанию),
количество создаваемых сообщений об ошибках не ограничено. Если -Wfatal-ошибки Также
указано, тогда -Wfatal-ошибки имеет приоритет перед этой опцией.

-w Запретить все предупреждающие сообщения.

-Ошибка
Превратите все предупреждения в ошибки.

-Werror =
Превратить указанное предупреждение в ошибку. Добавляется спецификатор предупреждения;
например -Werror = переключатель поворачивает предупреждения, контролируемые -Wпереключатель на ошибки.
Этот переключатель принимает отрицательную форму и используется для отрицания -Ошибка для конкретных предупреждений;
например -Wno-error = переключатель создает -Wпереключатель предупреждения не являются ошибками, даже если -Ошибка
действует.

Предупреждающее сообщение для каждого управляемого предупреждения включает параметр, который управляет
предупреждение. Затем эту опцию можно использовать с -Werror = и -Wno-error = как описано
выше. (Печать опции в предупреждающем сообщении можно отключить с помощью
-fno-Diagnostics-show-option флаг.)

Обратите внимание, что указание -Werror =Foo автоматически подразумевает -WFoo. Тем не менее, -Wno-error =Foo
ничего не подразумевает.

-Wfatal-ошибки
Эта опция заставляет компилятор прерывать компиляцию при первой возникшей ошибке.
вместо того, чтобы пытаться продолжать и печатать дальнейшие сообщения об ошибках.

Вы можете запросить множество конкретных предупреждений с параметрами, начинающимися с -W, например
-Неявный для запроса предупреждений о неявных объявлениях. Каждое из этих предупреждений
варианты также имеют начало отрицательной формы -Нет- отключить предупреждения; Например,
-Wno-неявный. В этом руководстве приведена только одна из двух форм, которая не используется по умолчанию.
Для получения дополнительных сведений о параметрах для конкретного языка см. C + + говор Опции и Objective-C
и Objective-C ++ говор Опции.

Когда запрашивается опция нераспознанного предупреждения (например, -Wunknown-предупреждение), GCC испускает
диагностическое сообщение о том, что опция не распознана. Однако если -Нет- форма используется,
поведение немного другое: для -Wno-неизвестно-предупреждение
если не производится другая диагностика. Это позволяет использовать новые -Нет- кредита
со старыми компиляторами, но если что-то пойдет не так, компилятор предупреждает, что нераспознанный
вариант присутствует.

-педантичный
-педантический
Выдавать все предупреждения, требуемые строгими стандартами ISO C и ISO C ++; отклонить все программы, которые
использовать запрещенные расширения и некоторые другие программы, не соответствующие ISO C и ISO
C ++. Для ISO C следует версии стандарта ISO C, установленной любым -стандарт
вариант использованный.

Допустимые программы ISO C и ISO C ++ должны правильно компилироваться с этой опцией или без нее.
(хотя некоторые из них требуют -анси или -стандарт опция с указанием необходимой версии
ISO C). Однако без этой опции некоторые расширения GNU и традиционные C и
Также поддерживаются функции C ++. При таком варианте они отклоняются.

-педантичный не вызывает предупреждающих сообщений об использовании альтернативных ключевых слов, чьи
имена начинаются и заканчиваются на __. Педантические предупреждения также отключены в выражении
следующее за «__extension__». Однако только системные файлы заголовков должны использовать эти
пути эвакуации; прикладные программы должны избегать их.

Некоторые пользователи пытаются использовать -педантичный проверять программы на строгое соответствие ISO C. Они
вскоре обнаруживают, что он не делает то, что они хотят: он находит некоторые методы, отличные от ISO,
но не все --- только те, для которых ISO C требуется диагностика и некоторые другие для
какие диагностики добавлены.

В некоторых случаях может быть полезна функция сообщения о любом несоответствии ISO C,
но потребует значительной дополнительной работы и будет сильно отличаться от
-педантичный. У нас нет планов поддерживать такую ​​функцию в ближайшем будущем.

Если стандарт указан с -стандарт представляет собой расширенный диалект языка C GNU, например
GNU90 or GNU99, есть соответствующий Использование темпера с изогнутым основанием стандарт, версия ISO C, на которой
основан расширенный диалект GNU. Предупреждения от -педантичный даны, где они
требуется базовым стандартом. (Нет смысла давать такие предупреждения
только для функций, не относящихся к указанному диалекту GNU C, поскольку по определению GNU
диалекты C включают все функции, которые компилятор поддерживает с данной опцией, и
было бы не о чем предупреждать.)

-педантические-ошибки
Подобно -педантичный, за исключением того, что генерируются ошибки, а не предупреждения.

-Стена
Это включает все предупреждения о конструкциях, которые некоторые пользователи считают
сомнительны, и их легко избежать (или изменить, чтобы предотвратить предупреждение), даже в
в сочетании с макросами. Это также включает некоторые описанные предупреждения для конкретного языка
in C + + говор Опции и Objective-C и Objective-C ++ говор Опции.

-Стена включает следующие предупреждающие флаги:

-адрес -Боевые границы (только с -O2) -Wc ++ 11-compat -Wchar-индексы
-Wenum-сравнить (в C / ObjC; в C ++ это по умолчанию включено) -Wimplicit-int (C и
Только Objective-C) -Wimplicit-function-декларация (Только C и Objective-C) -Wкомментарий
-Wформат -Wосновной (только для C / ObjC и если -Отдельные) -Wmaybe-неинициализированный
-Wmissing-подтяжки (только для C / ObjC) -Wnonnull -Wopenmp-simd -W скобки
-Wpointer-знак -Замена -Обратный тип -W точка-последовательности -Wsign-сравнить (только в C ++)
-Wstrict-псевдоним -Wstrict-overflow = 1 -Wпереключатель -Писания -Wнеинициализированный
-Wunknown-прагмы -Wunused-функция -Wunused-метка -Wunused-значение -Wunused-переменная
-Wvolatile-регистр-вар

Обратите внимание, что некоторые предупреждающие флаги не подразумеваются -Стена. Некоторые из них предупреждают о
конструкции, которые пользователи обычно не считают сомнительными, но которые
иногда вы можете захотеть проверить; другие предупреждают о конструкциях, которые
необходимо или трудно избежать в некоторых случаях, и нет простого способа изменить
код для подавления предупреждения. Некоторые из них включены -Векстра но многие из них
должны быть включены индивидуально.

-Векстра
Это включает некоторые дополнительные предупреждающие флаги, которые не включены -Стена. (Эта опция использовалась
быть позванным -W. Старое имя по-прежнему поддерживается, но новое имя более
описательный.)

-Wразбит -Пустое тело -Проигранные квалификаторы -Wmissing-поля-инициализаторы
-Wmissing-параметр-тип (Только C) -Wold-style-декларация (Только C) -Woverride-инициализация
-Wsign-сравнить -Wtype-ограничения -Wнеинициализированный -Wunused-параметр (только с -Wunused or
-Стена) -Wunused-but-set-параметр (только с -Wunused or -Стена)

Опция -Векстра также печатает предупреждающие сообщения для следующих случаев:

· Указатель сравнивается с целым нулем с <, <=, >или >=.

· (Только C ++) И перечислитель, и не перечислитель появляются в условном
выражение.

· (Только C ++) Неоднозначные виртуальные базы.

· (Только C ++) Индексирование объявленного массива зарегистрироваться.

· (Только C ++) Получение адреса объявленной переменной зарегистрироваться.

· (Только C ++) Базовый класс не инициализируется в конструкторе копирования производного класса.

-Wchar-индексы
Предупреждать, если индекс массива имеет тип "char". Это частая причина ошибок, так как
программисты часто забывают, что этот тип подписан на некоторых машинах. Это предупреждение
включен -Стена.

-Wкомментарий
Предупреждать всякий раз, когда начинается последовательность комментариев /* появляется в /* комментарий, или всякий раз, когда
Обратная косая черта-новая строка появляется в // комментарий. Это предупреждение включено -Стена.

-Wno-охват-несоответствие
Предупреждать, если профили обратной связи не совпадают при использовании -fprofile-использование вариант. Если
исходный файл изменяется между компиляцией с -fprofile-gen и -fprofile-использование,
файлы с отзывами профиля могут не соответствовать исходному файлу, а GCC не может
используйте информацию обратной связи профиля. По умолчанию это предупреждение включено и отображается
рассматривается как ошибка. -Wno-охват-несоответствие может использоваться для отключения предупреждения или
-Wno-error = несоответствие покрытия может использоваться для отключения ошибки. Отключение ошибки
это предупреждение может привести к плохо оптимизированному коду и полезно только в случае
очень незначительные изменения, такие как исправления ошибок в существующей кодовой базе. Полное отключение
предупреждение не рекомендуется.

-Wno-cpp
(Только C, Objective-C, C ++, Objective-C ++ и Fortran)

Подавить предупреждающие сообщения, отправленные директивами "#warning".

-Wдвойное продвижение (Только C, C ++, Objective-C и Objective-C ++)
Выдает предупреждение, когда значение типа "float" неявно повышается до "double". Процессоры
с 32-битным модулем с плавающей запятой "одинарной точности" аппаратно реализует "float",
но имитируйте "двойник" в программном обеспечении. На такой машине выполнение вычислений с использованием
"двойные" значения намного дороже из-за накладных расходов, необходимых для программного обеспечения.
эмуляция.

Легко случайно выполнить вычисления с "double", потому что числа с плавающей запятой
литералы неявно имеют тип double. Например, в:

площадь плавания (радиус поплавка)
{
вернуть 3.14159 * радиус * радиус;
}

компилятор выполняет все вычисления с "двойным", потому что с плавающей запятой
буквальный - это «двойник».

-Wформат
-Wformat =n
Проверьте вызовы printf и scanf и т. Д., Чтобы убедиться, что предоставленные аргументы
имеют типы, соответствующие указанной строке формата, и что преобразования
указанные в строке формата имеют смысл. Сюда входят стандартные функции и
другие, указанные в атрибутах формата, в "printf", "scanf", "strftime" и
"strfmon" (расширение X / Open, не входит в стандарт C) семейства (или другие целевые-
конкретные семейства). Какие функции проверяются без атрибутов формата
указанное зависит от выбранной стандартной версии, и такие проверки функций
без указанного атрибута отключены -Отдельные or -fno-встроенный.

Форматы проверяются на соответствие функциям формата, поддерживаемым GNU libc версии 2.2.
К ним относятся все функции ISO C90 и C99, а также функции Single Unix.
Спецификация и некоторые расширения BSD и GNU. Другие реализации библиотеки не могут
поддерживать все эти функции; GCC не поддерживает предупреждения о функциях, выходящих за рамки
ограничения конкретной библиотеки. Однако если -педантичный используется с -Wформат,
выдаются предупреждения об особенностях формата, которых нет в выбранной стандартной версии (но не
для форматов "strfmon", поскольку их нет ни в одной версии стандарта C).

-Wformat = 1
-Wформат
Опция -Wформат эквивалентна -Wformat = 1и -Wno-формат эквивалентна
-Wformat = 0. С -Wформат также проверяет аргументы нулевого формата для нескольких
функции, -Wформат также подразумевает -Wnonnull. Некоторые аспекты этого уровня формата
проверку можно отключить с помощью опций: -Wno-format-содержит-nul,
-Wno-format-extra-argsи -Wno-format-нулевой длины. -Wформат включен
-Стена.

-Wno-format-содержит-nul
If -Wформат указано, не предупреждать о строках формата, содержащих байты NUL.

-Wno-format-extra-args
If -Wформат указан, не предупреждать о лишних аргументах для "printf" или
Функция формата "scanf". Стандарт C определяет, что такие аргументы
игнорируются.

Если неиспользуемые аргументы находятся между использованными аргументами, которые указаны с помощью $
спецификации номера операнда, обычно предупреждения по-прежнему выдаются, так как
реализация не могла знать, какой тип передать в "va_arg", чтобы пропустить неиспользуемые
аргументы. Однако в случае форматов "scanf" этот параметр подавляет
предупреждение, если все неиспользуемые аргументы являются указателями, поскольку Single Unix
В спецификации сказано, что такие неиспользуемые аргументы допустимы.

-Wno-format-нулевой длины
If -Wформат указано, не предупреждать о форматах нулевой длины. Стандарт C
указывает, что разрешены форматы нулевой длины.

-Wformat = 2
Включите -Wформат плюс дополнительные проверки формата. В настоящее время эквивалентно -Wформат
-Wformat-небуквенный -Wformat-безопасность -Wformat-y2k.

-Wformat-небуквенный
If -Wформат указано, также предупредить, если строка формата не является строковым литералом
и поэтому не может быть проверен, если функция форматирования не принимает свои аргументы формата как
"va_list".

-Wformat-безопасность
If -Wформат указан, также предупреждать об использовании функций форматирования, которые представляют
возможные проблемы с безопасностью. В настоящее время это предупреждает о вызовах "printf" и
функции "scanf", в которых строка формата не является строковым литералом и нет
аргументы формата, как в "printf (foo);". Это может быть дыра в безопасности, если
строка формата пришла из ненадежного ввода и содержит %n. (В настоящее время это
подмножество того, что -Wformat-небуквенный предупреждает, но в будущем предупреждения могут быть
добавлено -Wformat-безопасность которые не включены в -Wformat-небуквенный.)

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях этот параметр включен по умолчанию для C,
C ++, ObjC, ObjC ++. Чтобы отключить, используйте -Wno-формат-безопасность, или отключить весь формат
предупреждения с -Wformat = 0. Чтобы сделать предупреждения безопасности формата фатальными, укажите
-Werror = безопасность формата.

-Wformat-y2k
If -Wформат указан, также предупредить о форматах "strftime", которые могут давать только
двузначный год.

-Wnonnull
Предупреждать о передаче нулевого указателя для аргументов, помеченных как требующие ненулевого значения
атрибутом функции "ненулевой".

-Wnonnull входит в -Стена и -Wформат. Его можно отключить с помощью -Wno-nonnull
опцию.

-Выиграть сам (Только C, C ++, Objective-C и Objective-C ++)
Предупреждать о неинициализированных переменных, которые инициализируются сами собой. Обратите внимание на это
опция может использоваться только с -Wнеинициализированный опцию.

Например, GCC предупреждает о неинициализации "i" только в следующем фрагменте.
когда -Выиграть сам было указано:

int f ()
{
int я = я;
вернуть я;
}

Это предупреждение включено -Стена в C ++.

-Wimplicit-int (Только C и Objective-C)
Предупреждать, если в объявлении не указан тип. Это предупреждение включено -Стена.

-Wimplicit-function-декларация (Только C и Objective-C)
Предупреждать всякий раз, когда функция используется перед объявлением. В режиме C99
(-std = C99 or -std = gnu99), это предупреждение включено по умолчанию и преобразовано в
ошибка -педантические-ошибки. Это предупреждение также активируется -Стена.

-Неявный (Только C и Objective-C)
Такой же как -Wimplicit-int и -Wimplicit-function-декларация. Это предупреждение включено
by -Стена.

-Проигранные квалификаторы (Только C и C ++)
Предупреждать, если тип возвращаемого значения функции имеет квалификатор типа, такой как «const». Для ISO C
такой квалификатор типа не имеет никакого эффекта, поскольку значение, возвращаемое функцией, не является
lvalue. Для C ++ предупреждение выдается только для скалярных типов или «void». ISO C
запрещает квалифицированные возвращаемые типы "void" в определениях функций, поэтому такие возвращаемые типы
всегда получать предупреждение, даже без этой опции.

Это предупреждение также активируется -Векстра.

-Wосновной
Предупредить, если тип main подозрительно. main должна быть функцией с внешним
linkage, возвращая int, принимая либо нулевые аргументы, либо два, либо три аргумента
соответствующие типы. Это предупреждение включено по умолчанию в C ++ и включается либо
-Стена or -педантичный.

-Wmissing-подтяжки
Предупреждать, если инициализатор агрегата или объединения не полностью заключен в квадратные скобки. В следующих
например, инициализатор для a не заключен в квадратные скобки, но это для b полностью
заключены в скобки. Это предупреждение включено -Стена в С.

int a [2] [2] = {0, 1, 2, 3};
int b [2] [2] = {{0, 1}, {2, 3}};

Это предупреждение включено -Стена.

-Wmissing-include-dirs (Только C, C ++, Objective-C и Objective-C ++)
Предупреждать, если указанный пользователем каталог include не существует.

-W скобки
Предупреждать, если скобки опущены в определенных контекстах, например, когда есть
присваивание в контексте, где ожидается значение истинности, или когда операторы вложены
чей приоритет люди часто путают.

Также предупредите, если сравнение вроде х <= у <= г появляется; это эквивалентно (х <= у ? 1 : 0)
<= z, что отличается от интерпретации обычных математических обозначений.

Также предупредите о конструкциях, в которых может возникнуть путаница, для которой выражение «если»
принадлежит ветка "else". Вот пример такого случая:

{
если)
если (б)
Фу ();
еще
бар ();
}

В C / C ++ каждая ветвь else принадлежит самому внутреннему возможному выражению if, которое
в этом примере - «если (б)». Часто это не то, чего ожидал программист, поскольку
проиллюстрировано в приведенном выше примере отступом, выбранным программистом. Когда есть
из-за возможной путаницы GCC выдает предупреждение, когда указывается этот флаг.
Чтобы исключить предупреждение, добавьте явные фигурные скобки вокруг самого внутреннего оператора if, чтобы
«else» никак не может принадлежать включающему «if». Полученный код выглядит
как это:

{
если)
{
если (б)
Фу ();
еще
бар ();
}
}

Также предупредите об опасном использовании расширения GNU для "?:" С опущенным средним операндом.
Когда условие в операторе "?": Является логическим выражением, пропущенное значение равно
всегда 1. Часто программисты ожидают, что это будет значение, вычисленное внутри условного
выражение вместо этого.

Это предупреждение включено -Стена.

-W точка-последовательности
Предупреждать о коде, который может иметь неопределенную семантику из-за нарушения последовательности
точечные правила в стандартах C и C ++.

Стандарты C и C ++ определяют порядок, в котором выражения в программе C / C ++
оценивается с точки зрения последовательность пунктов, которые представляют собой частичное упорядочение между
выполнение частей программы: те, которые выполняются до точки последовательности, и те,
исполняется после него. Это происходит после вычисления полного выражения (которое
не является частью большего выражения), после вычисления первого операнда
«&&», «||», «?:» или «,» (запятая) оператор перед вызовом функции (но после
оценка его аргументов и выражения, обозначающего вызываемую функцию), а в
некоторые другие места. За исключением случаев, указанных в правилах точки последовательности, порядок
вычисления подвыражений выражения не указано. Все эти правила
описывать только частичный порядок, а не полный, поскольку, например, если два
функции вызываются в одном выражении без точки последовательности между ними,
порядок вызова функций не указан. Однако стандарты
комитет постановил, что вызовы функций не перекрываются.

Не указано, когда между точками последовательности изменения значений
объекты вступают в силу. Программы, поведение которых зависит от этого, имеют неопределенное поведение;
стандарты C и C ++ определяют, что «Между предыдущей и следующей точкой последовательности
объект должен иметь свое сохраненное значение, измененное не более одного раза при оценке
выражение. Кроме того, предыдущее значение должно читаться только для определения значения для
храниться. ". Если программа нарушает эти правила, результаты на любом конкретном
реализация совершенно непредсказуема.

Примеры кода с неопределенным поведением: «a = a ++;», «a [n] = b [n ++]» и «a [i ++] =
i; ". Этот параметр не позволяет диагностировать более сложные случаи, и это может
случайный ложноположительный результат, но в целом он оказался достаточно эффективным при
обнаружение такого рода проблем в программах.

Стандарт сформулирован запутанно, поэтому ведутся споры о точном
смысл правил точки следования в тонких случаях. Ссылки на обсуждения
проблему, включая предлагаемые формальные определения, можно найти на странице чтения GCC,
вhttp://gcc.gnu.org/readings.html>.

Это предупреждение включено -Стена для C и C ++.

-Wno-return-local-адрес
Не предупреждать о возврате указателя (или в C ++ ссылки) на переменную, которая идет
вне области видимости после возврата из функции.

-Обратный тип
Предупреждать всякий раз, когда функция определена с возвращаемым типом, который по умолчанию имеет значение «int». Также
предупреждать о любом операторе "return" без возвращаемого значения в функции, тип возвращаемого значения
не является "пустым" (падение с конца тела функции считается возвращением
без значения), и об операторе "return" с выражением в функции
чей возвращаемый тип - void.

Для C ++ функция без типа возврата всегда выдает диагностическое сообщение, даже
когда -Без возврата типа указан. Единственные исключения: main и функции
определяется в системных заголовках.

Это предупреждение включено -Стена.

-Wпереключатель
Предупреждать всякий раз, когда оператор switch имеет индекс перечислимого типа и не имеет значения case.
для одного или нескольких названных кодов этого перечисления. (Наличие «дефолтного»
метка предотвращает это предупреждение.) метки "case" вне диапазона перечисления также
вызывать предупреждения при использовании этой опции (даже если есть метка "по умолчанию"). Этот
предупреждение включено -Стена.

-Wswitch-по умолчанию
Предупреждать всякий раз, когда в инструкции switch не указан регистр по умолчанию.

-Wswitch-перечисление
Предупреждать всякий раз, когда оператор switch имеет индекс перечислимого типа и не имеет значения case.
для одного или нескольких названных кодов этого перечисления. ярлыки "case" за пределами
диапазон перечисления также вызывает предупреждения при использовании этой опции. Единственная разница
между -Wпереключатель и эта опция заключается в том, что эта опция выдает предупреждение об пропущенном
код перечисления, даже если есть метка "по умолчанию".

-Wsync-нанд (Только C и C ++)
Предупреждать, когда встроенные функции «__sync_fetch_and_nand» и «__sync_nand_and_fetch»
использовал. Эти функции изменили семантику в GCC 4.4.

-Писания
Предупреждать, если встречаются какие-либо триграфы, которые могут изменить смысл программы
(триграфы в комментариях не предупреждаются). Это предупреждение включено -Стена.

-Wunused-but-set-параметр
Предупреждать всякий раз, когда параметр функции назначен, но в остальном не используется (кроме
его декларация).

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

Это предупреждение также активируется -Wunused вместе с -Векстра.

-Wunused-но-set-переменная
Предупреждать всякий раз, когда локальная переменная назначена, но в остальном не используется (кроме
декларация). Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

Это предупреждение также активируется -Wunused, что обеспечивается -Стена.

-Wunused-функция
Предупреждать всякий раз, когда статическая функция объявлена, но не определена, или не встроенная статическая функция
функция не используется. Это предупреждение включено -Стена.

-Wunused-метка
Предупреждать всякий раз, когда метка объявлена, но не используется. Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wunused-local-typedefs (Только C, Objective-C, C ++ и Objective-C ++)
Предупреждать, когда определение типа, локально определенное в функции, не используется. Это предупреждение
включен -Стена.

-Wunused-параметр
Предупреждать всякий раз, когда параметр функции не используется, за исключением его объявления.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wno-неиспользованный-результат
Не предупреждать, если вызывающий объект функции, отмеченной атрибутом "warn_unused_result",
не использовать его возвращаемое значение. По умолчанию -Wunused-результат.

-Wunused-переменная
Предупреждать всякий раз, когда локальная переменная или непостоянная статическая переменная не используется, кроме
его декларация. Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wunused-значение
Предупреждать всякий раз, когда инструкция вычисляет результат, который явно не используется. Подавить
это предупреждение приводит неиспользуемое выражение к аннулировать. Это включает выражение-оператор
или левая часть выражения запятой, которое не содержит побочных эффектов. Для
Например, выражение, такое как х [i, j] вызывает предупреждение, а x [(void) i, j] не.

Это предупреждение включено -Стена.

-Wunused
Все выше -Wunused варианты комбинированные.

Чтобы получить предупреждение о неиспользуемом параметре функции, необходимо либо указать
-Векстра -Wunused (Обратите внимание, что -Стена подразумевает -Wunused), либо отдельно указать
-Wunused-параметр.

-Wнеинициализированный
Предупреждать, если автоматическая переменная используется без предварительной инициализации или если переменная
может быть заблокирован вызовом "setjmp". В C ++ предупреждать о нестатической ссылке или нестатической ссылке.
статический Const член появляется в классе без конструкторов.

Если вы хотите предупредить о коде, который использует неинициализированное значение переменной в
собственный инициализатор, используйте -Выиграть сам опцию.

Эти предупреждения возникают для отдельных неинициализированных или поврежденных элементов конструкции,
объединение или переменные массива, а также для неинициализированных или затертых переменных
в целом. Они не встречаются для переменных или элементов, объявленных «изменчивыми». Потому что
эти предупреждения зависят от оптимизации, точных переменных или элементов, для которых есть
Количество предупреждений зависит от конкретных параметров оптимизации и используемой версии GCC.

Обратите внимание, что может не быть предупреждения о переменной, которая используется только для вычисления
значение, которое само по себе никогда не используется, потому что такие вычисления могут быть удалены потоком данных
анализ перед печатью предупреждений.

-Wmaybe-неинициализированный
Для автоматической переменной, если существует путь от записи функции до использования
инициализированная переменная, но существуют другие пути, для которых
переменная не инициализирована, компилятор выдает предупреждение, если не может доказать
неинициализированные пути не выполняются во время выполнения. Эти предупреждения сделаны необязательными
потому что GCC недостаточно умен, чтобы увидеть все причины, по которым код может быть правильным
несмотря на кажущуюся ошибку. Вот один из примеров того, как это может произойти:

{
int x;
переключатель (у)
{
случай 1: x = 1;
перерыва;
случай 2: x = 4;
перерыва;
случай 3: x = 5;
}
фу (х);
}

Если значение «y» всегда равно 1, 2 или 3, то «x» всегда инициализируется, но GCC
не знает этого. Чтобы подавить предупреждение, вам необходимо указать случай по умолчанию с
утверждать(0) или аналогичный код.

Эта опция также предупреждает, когда энергонезависимая автоматическая переменная может быть изменена
вызов "longjmp". Эти предупреждения тоже возможны только при оптимизации
сборник.

Компилятор видит только вызовы "setjmp". Он не может знать, где будет "longjmp"
называется; фактически, обработчик сигнала может вызвать его в любой точке кода. Как
в результате вы можете получить предупреждение, даже если на самом деле проблем нет, потому что "longjmp"
фактически не может быть вызван по месту, которое могло бы вызвать проблемы.

Некоторых ложных предупреждений можно избежать, если объявить все функции, которые вы используете,
никогда не возвращайся как "noreturn".

Это предупреждение включено -Стена or -Векстра.

-Wunknown-прагмы
Предупреждать, когда встречается директива "#pragma", которая не понимается GCC. Если это
используется опция командной строки, предупреждения выдаются даже для неизвестных прагм в системе
заголовочные файлы. Это не тот случай, если предупреждения включены только -Стена
параметр командной строки.

-Wno-прагмы
Не предупреждать о неправильном использовании прагм, например о неправильных параметрах, недопустимом синтаксисе или
конфликты между прагмами. Смотрите также -Wunknown-прагмы.

-Wstrict-псевдоним
Эта опция активна только когда -fstrict-псевдоним активен. Предупреждает о коде, который
может нарушить строгие правила псевдонима, которые компилятор использует для оптимизации.
Предупреждение охватывает не все случаи, но пытается выявить наиболее распространенные.
подводные камни. Он включен в -Стена, Это эквивалентно -Wstrict-aliasing = 3

-Wstrict-aliasing = n
Эта опция активна только когда -fstrict-псевдоним активен. Предупреждает о коде, который
может нарушить строгие правила псевдонима, которые компилятор использует для оптимизации.
Чем выше уровень, тем выше точность (меньше ложных срабатываний). Высшие уровни
также соответствуют большему усилию, аналогично способу -O работ. -Wstrict-псевдоним is
что эквивалентно -Wstrict-aliasing = 3.

Уровень 1: Самый агрессивный, быстрый, наименее точный. Возможно полезно при более высоких уровнях
не предупреждаю но -fstrict-псевдоним по-прежнему нарушает код, так как в нем очень мало ложных
негативы. Однако у него много ложных срабатываний. Предупреждает обо всех преобразованиях указателя
между возможно несовместимыми типами, даже если никогда не разыменовывался. Бежит впереди
только конец.

Уровень 2: агрессивный, быстрый, не слишком точный. Может по-прежнему иметь много ложных срабатываний (не
столько же, сколько уровень 1), и несколько ложноотрицательных результатов (но, возможно, больше, чем уровень 1).
В отличие от уровня 1, он только предупреждает, когда адрес занят. Предупреждает о неполных типах.
Работает только в передней части.

Уровень 3 (по умолчанию для -Wstrict-псевдоним): Должно быть очень мало ложных срабатываний и мало
ложные негативы. Немного медленнее, чем на уровнях 1 или 2, когда включена оптимизация.
Позаботится об общем шаблоне каламбура + разыменования во внешнем интерфейсе:
"* (int *) & some_float". Если оптимизация включена, она также выполняется в серверной части, где
он имеет дело с несколькими случаями операторов, используя чувствительную к потоку информацию о точках.
Предупреждает только при разыменовании преобразованного указателя. Не предупреждает о неполном
типы.

-Wstrict-переполнение
-Wstrict-overflow =n
Эта опция активна только когда -fstrict-переполнение активен. Предупреждает о случаях
где компилятор оптимизирует на основе предположения, что подписанное переполнение не
происходить. Обратите внимание, что он не предупреждает обо всех случаях, когда код может быть переполнен: он
предупреждает только о тех случаях, когда компилятор реализует некоторую оптимизацию. Таким образом, это
предупреждение зависит от уровня оптимизации.

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

-Wstrict-overflow = 1
Предупреждайте о случаях, которые одновременно сомнительны и которых легко избежать. Например, с
-fstrict-переполнение, компилятор упрощает "x + 1> x" до 1. Этот уровень
-Wstrict-переполнение включен -Стена; более высокие уровни не являются и должны быть
явно запрошен.

-Wstrict-overflow = 2
Также предупредите о других случаях, когда сравнение упрощено до константы. Для
пример: «abs (x)> = 0». Это можно упростить, только если -fstrict-переполнение В
эффект, потому что «abs (INT_MIN)» переполняется до «INT_MIN», которое меньше нуля.
-Wstrict-переполнение (без уровня) совпадает с -Wstrict-overflow = 2.

-Wstrict-overflow = 3
Также предупредите о других случаях, когда сравнение упрощено. Например: "x + 1
> 1 упрощается до «x> 0».

-Wstrict-overflow = 4
Также предупредите о других упрощениях, не предусмотренных вышеупомянутыми случаями. Для
пример: «(x * 10) / 5» упрощается до «x * 2».

-Wstrict-overflow = 5
Также предупреждаем о случаях, когда компилятор уменьшает величину константы.
участвует в сравнении. Например: «x + 2> y» упрощается до «x + 1> = y».
Об этом сообщается только на самом высоком уровне предупреждения, потому что это упрощение
применяется ко многим сравнениям, поэтому этот уровень предупреждения дает очень большое количество
ложные срабатывания.

-Wsuggest-attribute =[чистый|Const|без возврата|формат]
Предупреждать о случаях, когда добавление атрибута может быть полезным. Атрибуты в настоящее время
поддерживаемые перечислены ниже.

-Wsuggest-attribute = чистый
-Wsuggest-attribute = const
-Wsuggest-attribute = noreturn
Предупреждать о функциях, которые могут быть кандидатами на атрибуты "pure", "const" или
"без возврата". Компилятор предупреждает только о функциях, видимых в другой компиляции.
единиц или (в случае "чистый" и "константный"), если он не может доказать, что функция
возвращается нормально. Функция возвращается нормально, если она не содержит бесконечного
цикл или возврат ненормально, бросая, вызывая «abort ()» или захватывая. Этот
анализ требует выбора -fipa-чистый-const, который по умолчанию включен в -O и
выше. Более высокие уровни оптимизации повышают точность анализа.

-Wsuggest-attribute = формат
-Wmissing-формат-атрибут
Предупреждать об указателях функций, которые могут быть кандидатами на атрибуты «форматирования».
Обратите внимание, что это только возможные кандидаты, а не абсолютные. GCC предполагает, что
указатели на функции с атрибутами формата, которые используются при присваивании,
операторы инициализации, передачи параметров или возврата должны иметь соответствующие
Атрибут "формат" в результирующем типе. Т.е. левая часть
присвоение или инициализация, тип переменной параметра или возвращаемый результат
тип содержащей функции, соответственно, также должен иметь атрибут "формат"
чтобы избежать предупреждения.

GCC также предупреждает об определениях функций, которые могут быть кандидатами на «формат».
атрибуты. Опять же, это только возможные кандидаты. GCC предполагает, что "формат"
атрибуты могут подходить для любой функции, которая вызывает такую ​​функцию, как
"vprintf" или "vscanf", но это может быть не всегда так, и некоторые функции
для каких атрибутов "формат" подходят, может не быть обнаружено.

-Боевые границы
Эта опция активна только когда -ftree-vrp активен (по умолчанию для -O2 и выше). Это
предупреждает об индексах массивов, которые всегда выходят за границы. Это предупреждение
включен -Стена.

-Wno-деление на ноль
Не предупреждать о целочисленном делении на ноль во время компиляции. Деление с плавающей запятой на
о нуле не предупреждают, так как это может быть законный способ получения бесконечностей и
NaN.

-Wsystem-заголовки
Распечатать предупреждающие сообщения для конструкций, обнаруженных в файлах системных заголовков. Предупреждения от
системные заголовки обычно подавляются при условии, что они обычно не
указывают на реальные проблемы и только затрудняют чтение вывода компилятора. С использованием
этот параметр командной строки указывает GCC выдавать предупреждения из системных заголовков, как если бы они
произошло в пользовательском коде. Однако обратите внимание, что использование -Стена в сочетании с этой опцией
приносит предупреждать о неизвестных прагмах в системных заголовках --- для этого, -Wunknown-прагмы
также необходимо использовать.

-W батуты
Предупреждать о трамплинах, генерируемых для указателей на вложенные функции.

Батут - это небольшой фрагмент данных или кода, который создается во время бега.
время в стеке, когда берется адрес вложенной функции, и
используется для косвенного вызова вложенной функции. Для некоторых целей это
состоит только из данных и поэтому не требует специальной обработки. Но,
для большинства целей он состоит из кода и, следовательно, требует стека
быть исполняемым для правильной работы программы.

-Wfloat-равно
Предупреждать, если при сравнении равенства используются значения с плавающей запятой.

Идея заключается в том, что иногда (для программиста) удобно
рассматривать значения с плавающей запятой как приближения к бесконечно точным действительным числам.
Если вы это делаете, то вам нужно вычислить (анализируя код или
другой способ) максимальная или вероятная максимальная ошибка, которую вносит вычисление, и
учитывайте это при выполнении сравнений (и при выводе результатов, но это
другая проблема). В частности, вместо проверки на равенство вы должны проверить
чтобы увидеть, имеют ли два значения перекрывающиеся диапазоны; и это делается с
реляционные операторы, поэтому сравнения на равенство, вероятно, ошибочны.

-Wтрадиционный (Только C и Objective-C)
Предупреждать об определенных конструкциях, которые ведут себя по-разному в традиционном и ISO C. Также
предупреждать о конструкциях ISO C, у которых нет традиционного эквивалента C, и / или о проблемных
конструкции, которых следует избегать.

· Параметры макроса, которые появляются в строковых литералах в теле макроса. В
традиционная замена макросов C происходит внутри строковых литералов, но в ISO C
Это не.

· В традиционном C не существовало некоторых директив препроцессора. Традиционный
препроцессоры считали строку директивой только в том случае, если # появился в колонке
1 на линии. Следовательно -Wтрадиционный предупреждает о директивах, которые традиционный C
понимает, но игнорирует, потому что # не появляется первым символом на
линия. Также предлагается скрыть такие директивы, как #прагма не понимается
традиционный C, сделав для них отступ. Некоторые традиционные реализации не
признавать #элиф, поэтому этот вариант предполагает его вообще избегать.

· Функциональный макрос, который появляется без аргументов.

· Оператор унарного плюса.

· The U целочисленный постоянный суффикс или F or L суффиксы констант с плавающей запятой.
(Традиционный C поддерживает L суффикс для целочисленных констант.) Обратите внимание, что эти
суффиксы появляются в макросах, определенных в системных заголовках большинства современных систем,
например _МИН/_МАКСИМУМ макросы в " ". Использование этих макросов в пользовательском коде может
обычно приводят к ложным предупреждениям, однако встроенный препроцессор GCC имеет
достаточно контекста, чтобы избежать предупреждения в этих случаях.

· Функция, объявленная внешней в одном блоке, а затем используется после окончания
блок.

· Оператор switch имеет операнд типа long.

· Объявление нестатической функции следует за "статической" функцией. Эта конструкция не
принят некоторыми традиционными компиляторами C.

· Тип ISO целочисленной константы имеет другую ширину или знак, чем его
традиционный тип. Это предупреждение выдается только в том случае, если основание константы равно десяти.
Т.е. шестнадцатеричные или восьмеричные значения, которые обычно представляют битовые комбинации, не являются
предупреждал о.

· Обнаружено использование конкатенации строк ISO.

· Инициализация автоматических агрегатов.

· Идентификатор конфликтует с ярлыками. В традиционном C отсутствует отдельное пространство имен для
этикетки.

· Инициализация союзов. Если инициализатор равен нулю, предупреждение не выводится.
Это делается в предположении, что в пользовательском коде появляется нулевой инициализатор.
обусловлено, например, "__STDC__", чтобы не пропустить предупреждения инициализатора, и полагается на
инициализация по умолчанию равной нулю в традиционном случае C.

· Преобразования по прототипам между значениями с фиксированной / плавающей запятой и наоборот. В
отсутствие этих прототипов при компиляции с традиционным C вызывает серьезные
проблемы. Это подмножество возможных предупреждений о преобразовании; за полный комплект
использование -W традиционное преобразование.

· Использование определений функций в стиле ISO C. Это предупреждение намеренно обратился
для деклараций прототипов или вариативных функций, потому что эти особенности ISO C
появляются в вашем коде при использовании традиционных макросов совместимости C libiberty,
«ПАРАМЕТРЫ» и «ВПАРАМЫ». Это предупреждение также игнорируется для вложенных функций.
потому что эта функция уже является расширением GCC и поэтому не имеет отношения к
традиционная совместимость с C.

-W традиционное преобразование (Только C и Objective-C)
Предупреждать, если прототип вызывает преобразование типа, отличное от того, что произошло бы
к тому же аргументу при отсутствии прототипа. Сюда входят преобразования
фиксированная точка в плавающую и наоборот, а преобразования, изменяющие ширину или
подписанность аргумента с фиксированной запятой, кроме случаев, когда это то же самое, что и продвижение по умолчанию.

-Wобъявление-после-заявления (Только C и Objective-C)
Предупреждать, если объявление находится после оператора в блоке. Эта конструкция, известная
из C ++, был введен в ISO C99 и по умолчанию разрешен в GCC. Нет
поддерживался ISO C90 и не поддерживался версиями GCC до GCC 3.0.

-Вундеф
Предупреждать, если неопределенный идентификатор оценивается в #если Директивы.

-Wno-endif-label
Не предупреждать, когда #еще или #endif следуют текст.

-Wтень
Предупреждать всякий раз, когда локальная переменная или объявление типа затеняет другую переменную,
параметр, тип или член класса (в C ++), или когда встроенная функция
затененный. Обратите внимание, что в C ++ компилятор предупреждает, если локальная переменная затеняет явный
typedef, но не если он затеняет структуру / класс / перечисление.

-Больше-чем =только
Предупреждать всякий раз, когда объект больше, чем только байтов определено.

-Wframe-больше-чем =только
Предупреждать, если размер функционального фрейма больше, чем только байтов. Расчет выполнен
определение размера кадра стека является приблизительным и не консервативным. Настоящий
требования могут быть несколько больше, чем только даже если вы не получите предупреждения. В
кроме того, любое пространство, выделенное с помощью "alloca", массивов переменной длины или связанных
конструкции не включаются компилятором при определении того, следует ли выдавать
предупреждение.

-Wno-free-nonheap-объект
Не предупреждать при попытке освободить объект, который не был размещен в куче.

-Wstack-usage =только
Предупреждать, если использование стека функцией может быть больше, чем только байтов. Расчет
сделано для определения консервативности использования стека. Любое пространство, выделенное через "alloca",
массивы переменной длины или связанные конструкции включаются компилятором, когда
определение того, выдавать ли предупреждение.

Сообщение соответствует выводу -fstack-использование.

· Если использование стека полностью статично, но превышает указанное количество, оно:

предупреждение: использование стека составляет 1120 байт

· Если использование стека (частично) динамическое, но ограниченное, оно:

предупреждение: использование стека может составлять 1648 байт

· Если использование стека (частично) динамическое и неограниченное, оно:

предупреждение: использование стека может быть неограниченным

-Wunsafe-loop-оптимизации
Предупредить, если цикл не может быть оптимизирован, потому что компилятор не может ничего предположить на
границы индексов цикла. С участием -funsafe-loop-оптимизации предупредить, если компилятор
делает такие предположения.

-Wno-pedantic-ms-формат (Только цели MinGW)
При использовании в сочетании с -Wформат и -педантический без расширений GNU это
опция отключает предупреждения о спецификаторах ширины формата "printf" / "scanf", отличных от ISO
«I32», «I64» и «I» используются в целях Windows, которые зависят от среды выполнения MS.

-Wpointer-ариф
Предупреждать обо всем, что зависит от «размера» типа функции или «пустоты». GNU C
присваивает этим типам размер 1 для удобства вычислений с помощью "void *"
указатели и указатели на функции. В C ++ предупреждать также при выполнении арифметической операции
включает "NULL". Это предупреждение также активируется -педантичный.

-Wtype-ограничения
Предупреждать, если сравнение всегда верно или всегда неверно из-за ограниченного диапазона
тип данных, но не предупреждать о постоянных выражениях. Например, предупредить, если беззнаковый
переменная сравнивается с нулем с < or >=. Это предупреждение также активируется
-Векстра.

-Wbad-функция-приведение (Только C и Objective-C)
Предупреждать всякий раз, когда вызов функции приводится к несовпадающему типу. Например, предупредить, если
«int malloc ()» приводится к «чему угодно *».

-Wc ++ - совместимость (Только C и Objective-C)
Предупреждать о конструкциях ISO C, которые не входят в общее подмножество ISO C и ISO
C ++, например, запрос на неявное преобразование из «void *» в указатель на не «void»
тип.

-Wc ++ 11-compat (Только C ++ и Objective-C ++)
Предупреждать о конструкциях C ++, значение которых отличается в ISO C ++ 1998 и ISO C ++ 2011,
например, идентификаторы в ISO C ++ 1998, которые являются ключевыми словами в ISO C ++ 2011. Это предупреждение
включается -Украшивание и включен -Стена.

-Wcast-качество
Предупреждать всякий раз при приведении указателя, чтобы удалить квалификатор типа из целевого типа.
Например, предупредить, если "const char *" приведено к обычному "char *".

Также предупреждайте при выполнении приведения, которое небезопасно вводит квалификатор типа. Для
Например, приведение "char **" к "const char **" небезопасно, как в этом примере:

/ * p - значение char **. * /
const char ** q = (const char **) p;
/ * Присвоение const char * строки только для чтения * в порядке. * /
* q = "строка";
/ * Теперь указатель char ** указывает на постоянную память. * /
** p = 'b';

-Wcast-выравнивание
Предупреждать всякий раз, когда указатель приводится так, что требуется выравнивание цели.
повысился. Например, предупреждать, если "char *" приведено к "int *" на машинах, где
Доступ к целым числам возможен только на двух- или четырехбайтовых границах.

-Wwrite-строки
При компиляции C присвойте строковым константам тип «const char [длина]" так что копирование
адрес единицы в указателе «char *», отличном от «const», выдает предупреждение. Эти
предупреждения помогают найти во время компиляции код, который может попытаться записать в строку
константа, но только если вы очень осторожно использовали "const" в объявлениях.
и прототипы. В остальном это просто неприятность. Вот почему мы не сделали -Стена
запросить эти предупреждения.

При компиляции C ++ предупредите об устаревшем преобразовании строковых литералов в "char
* ". Это предупреждение включено по умолчанию для программ на C ++.

-Wразбит
Предупреждать о переменных, которые могут быть изменены лонгджмп or вилка. Это предупреждение также
включен -Векстра.

-W условно поддерживается (Только C ++ и Objective-C ++)
Предупреждать об условно поддерживаемых конструкциях (C ++ 11 [intro.defs]).

-Wконверсия
Предупреждать о неявных преобразованиях, которые могут изменить значение. Сюда входят конверсии
между действительным и целым числом, например «abs (x)», когда «x» равно «double»; конверсии между
знаковый и беззнаковый, например «unsigned ui = -1»; и преобразование в более мелкие типы, например
"sqrtf (M_PI)". Не предупреждать о явных приведениях типа «abs ((int) x)» и «ui =
(беззнаковый) -1 », или если значение не изменилось в результате преобразования, как в« abs (2.0) ».
Предупреждения о преобразованиях между целыми числами со знаком и без знака можно отключить с помощью
через -Wno-sign-преобразование.

Для C ++ также предупреждайте о путанице при разрешении перегрузки для пользовательских преобразований; а также
преобразования, которые никогда не используют оператор преобразования типа: преобразования в "void", то же самое
тип, базовый класс или ссылку на них. Предупреждения о преобразованиях между подписанными
и целые числа без знака по умолчанию отключены в C ++, если только -Wsign-конверсия is
явно включен.

-Wno-преобразование-нуль (Только C ++ и Objective-C ++)
Не предупреждать о преобразованиях между типами "NULL" и типами, не являющимися указателями. -Wconversion-нуль is
по умолчанию включен.

-Wzero-as-null-указатель-константа (Только C ++ и Objective-C ++)
Предупреждать, когда в качестве константы нулевого указателя используется литерал «0». Это может быть полезно
облегчить преобразование в "nullptr" в C ++ 11.

-Среда-время
Предупреждать, когда встречаются макросы «__TIME__», «__DATE__» или «__TIMESTAMP__», поскольку они
может предотвратить побитно-идентичные воспроизводимые компиляции.

-W удалить-неполный (Только C ++ и Objective-C ++)
Предупреждать при удалении указателя на неполный тип, что может привести к неопределенному поведению в
время выполнения. Это предупреждение включено по умолчанию.

-Бесполезный-литой (Только C ++ и Objective-C ++)
Предупреждать, когда выражение приводится к собственному типу.

-Пустое тело
Предупредить, если в if, еще or do в то время как утверждение. Это предупреждение
также поддерживается -Векстра.

-Wenum-сравнить
Предупредить о сравнении значений разных перечислимых типов. В C ++ перечисление
несоответствия в условных выражениях также диагностируются, и предупреждение включается
дефолт. В C это предупреждение включено -Стена.

-Wjump-промахи-init (Только C, Objective-C)
Предупреждать, если инструкция "goto" или "switch" перескакивает вперед через
инициализация переменной или переход назад к метке после того, как переменная была
инициализирован. Это только предупреждает о переменных, которые инициализируются, когда они
заявил. Это предупреждение поддерживается только для C и Objective-C; в C ++ такого рода
ветка - это ошибка в любом случае.

-Wjump-промахи-init входит в -Wc ++ - совместимость. Его можно отключить с помощью
-Wno-прыжок-пропускает-инициализацию опцию.

-Wsign-сравнить
Предупреждать, если сравнение значений со знаком и без знака может привести к неверному результату.
результат, когда значение со знаком преобразовано в беззнаковое. Это предупреждение также включено
by -Векстра; чтобы получить другие предупреждения -Векстра без этого предупреждения используйте -Векстра
-Wno-знак-сравнить.

-Wsign-конверсия
Предупреждать о неявных преобразованиях, которые могут изменить знак целочисленного значения, например
присвоение знакового целочисленного выражения беззнаковой целочисленной переменной. Явный
бросок заглушает предупреждение. В C эта опция также включена -Wконверсия.

-Wfloat-конверсия
Предупреждать о неявных преобразованиях, снижающих точность реального значения. Этот
включает преобразование действительного числа в целое число и преобразования действительного числа более высокой точности в более низкое
точность реальных значений. Эта опция также включена -Wконверсия.

-Wsizeof-указатель-доступ к памяти
Предупреждать о параметрах подозрительной длины для определенных строковых и встроенных функций памяти
если в аргументе используется "sizeof". Это предупреждение предупреждает, например, о "memset (ptr, 0, sizeof
(ptr)); "если" ptr "не массив, а указатель и предлагает возможное исправление, или
о "memcpy (& foo, ptr, sizeof (& foo));". Это предупреждение включено -Стена.

-Wmemset-транспонированные-аргументы
Предупреждать о подозрительных вызовах встроенной функции "memset", если вторым аргументом является
не ноль, а третий аргумент равен нулю. Это предупреждает, например, @ о "memset (buf, sizeof
buf, 0) », где, скорее всего, имелось в виду« memset (buf, 0, sizeof buf) ».
диагностика выдается только в том случае, если третий аргумент буквально равен нулю, если это какой-то
выражение, свернутое до нуля, или, например, приведение нуля к какому-либо типу и т. д., это далеко
менее вероятно, что пользователь по ошибке обменялся аргументами, и предупреждение не
испускается. Это предупреждение включено -Стена.

-адрес
Предупреждать о подозрительном использовании адресов памяти. К ним относятся использование адреса
функция в условном выражении, например "void func (void); if (func)" и
сравнения с адресом памяти строкового литерала, например "if (x ==" abc ")".
Такое использование обычно указывает на ошибку программиста: адрес функции всегда
оценивается как истина, поэтому их использование в условном выражении обычно указывает на то, что программист
забыл круглые скобки в вызове функции; и сравнения со строковыми литералами
приводят к неопределенному поведению и не переносятся в C, поэтому обычно указывают
что программист намеревался использовать "strcmp". Это предупреждение включено -Стена.

-Wлогическая операция
Предупреждать о подозрительном использовании логических операторов в выражениях. Это включает использование
логические операторы в контекстах, где, вероятно, ожидается побитовый оператор.

-Ваггрегат-возврат
Предупреждать, если определены или вызваны какие-либо функции, возвращающие структуры или объединения. (В
языков, где вы можете вернуть массив, это также вызывает предупреждение.)

-Wno-агрессивные-циклические оптимизации
Предупредить, если в цикле с постоянным количеством итераций компилятор обнаружит undefined
поведение в некотором операторе во время одной или нескольких итераций.

-Wno-атрибуты
Не предупреждать, если используется неожиданный атрибут «__attribute__», например нераспознанные атрибуты,
атрибуты функций, применяемые к переменным и т. д. Это не останавливает ошибки для
некорректное использование поддерживаемых атрибутов.

-Wno-build-macro-redefined
Не предупреждать, если некоторые встроенные макросы переопределяются. Это подавляет предупреждения для
переопределение «__TIMESTAMP__», «__TIME__», «__DATE__», «__FILE__» и
«__BASE_FILE__».

-Wstrict-прототипы (Только C и Objective-C)
Предупреждать, если функция объявлена ​​или определена без указания типов аргументов. (An
определение функции в старом стиле разрешено без предупреждения, если ему предшествует
объявление, указывающее типы аргументов.)

-Wold-style-декларация (Только C и Objective-C)
Предупреждать об устаревшем использовании в соответствии со стандартом C. Для
Например, предупредите, если спецификаторы класса хранилища, такие как "static", не являются первыми в
декларация. Это предупреждение также активируется -Векстра.

-Декоративный стиль (Только C и Objective-C)
Предупредить, если используется определение функции в старом стиле. Предупреждение выдается, даже если есть
предыдущий прототип.

-Wmissing-параметр-тип (Только C и Objective-C)
Параметр функции объявляется без спецификатора типа в функциях стиля K & R:

void foo (bar) {}

Это предупреждение также активируется -Векстра.

-Wmissing-прототипы (Только C и Objective-C)
Предупреждать, если глобальная функция определена без предварительного объявления прототипа. Этот
предупреждение выдается, даже если само определение предоставляет прототип. Используйте эту опцию
для обнаружения глобальных функций, у которых нет соответствующего объявления прототипа в
заголовочный файл. Этот параметр недопустим для C ++, потому что все объявления функций
предоставить прототипы, и в объявлении несоответствия будет объявлена ​​перегрузка, а не
противоречит более раннему заявлению. Использовать -Wmissing-декларации для обнаружения пропавших без вести
объявления в C ++.

-Wmissing-декларации
Предупреждать, если глобальная функция определена без предварительного объявления. Сделай так, даже если
само определение представляет собой прототип. Используйте эту опцию для определения глобального
функции, которые не объявлены в файлах заголовков. В C не выдаются предупреждения для
функции с предыдущими объявлениями, не являющимися прототипами; использовать -Wmissing-прототип для обнаружения
отсутствующие прототипы. В C ++ не выдаются предупреждения для шаблонов функций или для
встроенные функции или для функций в анонимных пространствах имен.

-Wmissing-поля-инициализаторы
Предупреждать, если в инициализаторе структуры отсутствуют некоторые поля. Например, следующие
код вызывает такое предупреждение, потому что "xh" неявно равно нулю:

структура s {int f, g, h; };
struct sx = {3, 4};

Эта опция не предупреждает о назначенных инициализаторах, поэтому следующая модификация
не вызывает предупреждения:

структура s {int f, g, h; };
struct sx = {.f = 3, .g = 4};

Это предупреждение включено в -Векстра. Чтобы получить другие -Векстра предупреждения без этого,
использование -Векстра -Wno-отсутствующие-поля-инициализаторы.

-Wno-многосимвольный
Не предупреждать, если многозначная константа ('ФУФ') используется. Обычно они указывают
опечатка в коде пользователя, так как они имеют значения, определяемые реализацией, и не должны
используется в переносимом коде.

-Wnormalized =
В ISO C и ISO C ++ два идентификатора различаются, если они представляют собой разные последовательности
символы. Однако иногда, когда символы вне базового набора символов ASCII
используются, у вас могут быть две разные последовательности символов, которые выглядят одинаково. Избегать
путаница, стандарт ISO 10646 устанавливает некоторые нормализация условиями, который при применении
убедитесь, что две одинаковые последовательности превращаются в одну и ту же последовательность. GCC
может предупредить вас, если вы используете идентификаторы, которые не были нормализованы; этот вариант
контролирует это предупреждение.

GCC поддерживает четыре уровня предупреждений. По умолчанию -Wnormalized = nfc,
который предупреждает о любом идентификаторе, который не находится в нормализованной форме ISO 10646 "C",
NFC. NFC - это рекомендуемая форма для большинства случаев использования.

К сожалению, в идентификаторах ISO C и ISO C ++ разрешены некоторые символы.
которые при преобразовании в NFC не допускаются в идентификаторах. То есть пути нет
использовать эти символы в переносимых ISO C или C ++ и иметь все ваши идентификаторы в NFC.
-Wnormalized = id подавляет предупреждение для этих символов. Есть надежда, что будущее
версии соответствующих стандартов исправят это, поэтому этот вариант не
по умолчанию.

Вы можете отключить предупреждение для всех символов, написав -Wnormalized = нет. Вы
следует делать это только в том случае, если вы используете другую схему нормализации (например, "D"),
потому что в противном случае вы можете легко создать ошибки, которые буквально невозможно увидеть.

Некоторые символы в ISO 10646 имеют разные значения, но выглядят одинаково в некоторых шрифтах.
или методы отображения, особенно после применения форматирования. Например
"\ u207F", "СТРОЧНАЯ ЛАТИНСКАЯ БУКВА N" отображается точно так же, как обычное "n",
был помещен в верхний индекс. ISO 10646 определяет НФКК схема нормализации
конвертировать все это в стандартную форму, и GCC предупреждает, если ваш код не в
NFKC, если вы используете -Wnormalized = nfkc. Это предупреждение можно сравнить с предупреждением о каждом
идентификатор, содержащий букву O, потому что ее можно спутать с цифрой 0,
и поэтому не используется по умолчанию, но может быть полезен в качестве локального соглашения о кодировании, если
среда программирования не может быть настроена для четкого отображения этих символов.

-Wno-не рекомендуется
Не предупреждать об использовании устаревших функций.

-Wno-устаревшие-декларации
Не предупреждать об использовании функций, переменных и типов, отмеченных как устаревшие
с использованием атрибута "устаревший".

-Wno-переполнение
Не предупреждать о переполнении во время компиляции в постоянных выражениях.

-Wopenmp-simd
Предупреждать, если модель стоимости векторизатора переопределяет директиву OpenMP или Cilk Plus simd
устанавливается пользователем. В -fsimd-cost-model = без ограничений можно использовать для ослабления модели затрат.

-Woverride-инициализация (Только C и Objective-C)
Предупреждать, если инициализированное поле без побочных эффектов отменяется при использовании назначенного
инициализаторы.

Это предупреждение включено в -Векстра. Чтобы получить другие -Векстра предупреждения без этого,
использование -Векстра -Wno-override-init.

-Упакованный
Предупреждать, если структуре задан упакованный атрибут, но упакованный атрибут не имеет
влияние на планировку или размер конструкции. Такие структуры могут быть неправильно выровнены для
мало пользы. Например, в этом коде переменная «fx» в «struct bar» равна
смещено, даже если "struct bar" сама по себе не имеет упакованного атрибута:

структура фу {
int x;
символы а, б, в, г;
} __attribute __ ((упаковано));
структурная полоса {
символ г;
структура foo f;
};

-Wpacked-битовое-совместимость
GCC серии 4.1, 4.2 и 4.3 игнорируют атрибут "упакованный" в битовых полях типа
«чар». Это было исправлено в GCC 4.4, но изменение может привести к различиям в
макет структуры. GCC сообщает вам, когда смещение такого поля изменилось в GCC.
4.4. Например, в этом поле больше нет 4-битного заполнения между полями «a» и «b».
состав:

структура foo
{
char a: 4;
char b: 8;
} __attribute__ ((упаковано));

Это предупреждение включено по умолчанию. Использовать -Wno-pack-bitfield-compat отключить это
предупреждение.

-Wмягкий
Предупреждать, если в структуру включено заполнение, либо для выравнивания элемента
конструкции или выровнять всю конструкцию. Иногда, когда это происходит, это возможно
чтобы переставить поля структуры, чтобы уменьшить отступы и, таким образом, сделать
структура меньше.

-Wredundant-декларации
Предупреждать, если что-либо объявлено более одного раза в одной и той же области, даже в тех случаях, когда
множественное объявление действительно и ничего не меняет.

-Wnested-экстерны (Только C и Objective-C)
Предупреждать, если в функции встречается объявление "extern".

-Wno-наследуемый-вариативный-ctor
Подавить предупреждения об использовании конструкторов-наследников C ++ 11, когда базовый класс
унаследованный от имеет вариативный конструктор C; предупреждение включено по умолчанию, потому что
многоточие не передается по наследству.

-Винлайн
Предупреждать, если функция, объявленная как встроенная, не может быть встроена. Даже с этим
опция, компилятор не предупреждает о сбоях встроенных функций, объявленных в
системные заголовки.

Компилятор использует различные эвристики, чтобы определить, нужно ли встраивать
функция. Например, компилятор учитывает размер выполняемой функции.
inline и количество встраиваемых файлов, которые уже были выполнены в текущей функции.
Поэтому, казалось бы, незначительные изменения в исходной программе могут вызвать
предупреждения, сделанные -Винлайн появиться или исчезнуть.

-Wno-invalid-offsetof (Только C ++ и Objective-C ++)
Подавить предупреждения от применения смещение макрос к типу, не относящемуся к POD. В соответствии с
стандарт ISO C ++ 1998 г., применяющий смещение к типу, не относящемуся к POD, не определено. В
существующие реализации C ++, однако, смещение обычно дает значимые результаты
даже когда применяется к определенным типам типов, не относящихся к POD (например, простой структура который
не может быть типом POD только в силу наличия конструктора). Этот флаг предназначен для
пользователи, которые знают, что они пишут непереносимый код, и которые намеренно
выбрал игнорировать предупреждение об этом.

Ограничения на смещение может быть ослаблен в будущей версии стандарта C ++.

-Wno-int-to-указатель-приведение
Подавить предупреждения от приведений к типу указателя целого числа другого размера. В
В C ++ приведение к типу указателя меньшего размера является ошибкой. Wint-to-указатель-приведение is
по умолчанию включен.

-Wno-указатель-на-int-cast (Только C и Objective-C)
Подавить предупреждения от приведения указателя к целочисленному типу другого размера.

-Winvalid-pch
Предупреждать, если предварительно скомпилированный заголовок найден в пути поиска, но не может быть использован.

-Длинно-длинный
Предупредить, если длинной длинной тип используется. Это обеспечивается либо -педантичный or -Wтрадиционный
в режимах ISO C90 и C ++ 98. Чтобы подавить предупреждающие сообщения, используйте -Wno-длинный-длинный.

-Wvariadic-макросы
Предупреждать, если вариативные макросы используются в педантичном режиме ISO C90 или альтернативном синтаксисе GNU
в педантичном режиме ISO C99. Это по умолчанию. Чтобы подавить предупреждающие сообщения, используйте
-Wno-вариационные-макросы.

-Ввараргс
Предупреждать о сомнительном использовании макросов, используемых для обработки переменных аргументов, таких как
va_start. Это по умолчанию. Чтобы подавить предупреждающие сообщения, используйте -Wno-варарги.

-Wvector-операция-производительность
Предупреждать, если векторные операции не реализованы через SIMD-возможности архитектуры.
В основном полезно для настройки производительности. Возможна реализация векторной операции
"кусочно", что означает, что скалярная операция выполняется для каждого вектора
элемент; "параллельно", что означает, что векторная операция реализована с использованием
скаляры более широкого типа, которые обычно более эффективны по производительности; и "как сингл
скаляр », что означает, что вектор соответствует скалярному типу.

-Wno-виртуальное-переместить-назначить
Подавить предупреждения о наследовании от виртуальной базы нетривиальным ходом C ++ 11
оператор присваивания. Это опасно, потому что если виртуальная база доступна по
более одного пути, он будет перемещен несколько раз, что может означать, что оба объекта заканчиваются
вверх в перемещенном состоянии. Если оператор присваивания перемещения написан так, чтобы избежать
при перемещении от перемещаемого объекта это предупреждение можно отключить.

-Ввла
Предупреждать, если в коде используется массив переменной длины. -Вно-вла предотвращает -педантичный
предупреждение о массиве переменной длины.

-Wvolatile-регистр-вар
Предупреждать, если регистровая переменная объявлена ​​изменчивой. Модификатор volatile не
запретить все оптимизации, которые могут исключить чтение и / или запись для регистрации
переменные. Это предупреждение включено -Стена.

-Wdisabled-оптимизация
Предупреждать, если запрошенный проход оптимизации отключен. Это предупреждение обычно не
указать, что с вашим кодом что-то не так; это просто указывает на то, что GCC
оптимизаторы не могут эффективно обрабатывать код. Часто проблема в том, что ваш
код слишком большой или слишком сложный; GCC отказывается оптимизировать программы, когда оптимизация
само по себе, вероятно, займет чрезмерное количество времени.

-Wpointer-знак (Только C и Objective-C)
Предупреждать о передаче или присвоении аргументов указателя с другой подписью. Этот
опция поддерживается только для C и Objective-C. Это подразумевается -Стена и
-педантичный, который можно отключить с помощью -Wno-указатель-знак.

-Wstack-протектор
Эта опция активна только когда -fstack-протектор активен. Предупреждает о функциях
которые не защищены от разрушения стопки.

-Woverlength-струны
Предупреждать о строковых константах, длина которых превышает "минимальную максимальную" длину.
указано в стандарте C. Современные компиляторы обычно допускают строковые константы, которые
намного длиннее стандартного минимального лимита, но очень переносимые программы должны
избегайте использования более длинных струн.

Лимит применяется после конкатенация строковых констант и не учитывает конечные
NUL. В C90 ограничение составляло 509 символов; в C99 он был увеличен до 4095. C ++ 98 делает
не указывать нормативный минимальный максимум, поэтому мы не диагностируем слишком длинные строки в
C ++.

Этот вариант подразумевается -педантичный, и может быть отключен с помощью
-Wno-длинные строки.

-Wunsuffix-float-константы (Только C и Objective-C)
Выдавать предупреждение для любой плавающей константы, не имеющей суффикса. При использовании
вместе с -Wsystem-заголовки он предупреждает о таких константах в файлах системных заголовков.
Это может быть полезно при подготовке кода для использования с прагмой "FLOAT_CONST_DECIMAL64".
от десятичного расширения с плавающей запятой до C99.

Опции для Отладка ВАШЕ Программа or НКУ
GCC имеет различные специальные параметры, которые используются для отладки вашей программы или GCC:

-g Создавать отладочную информацию в собственном формате операционной системы (stabs, COFF,
XCOFF или DWARF 2). GDB может работать с этой отладочной информацией.

В большинстве систем, использующих формат stabs, -g позволяет использовать дополнительную отладочную информацию
что может использовать только GDB; эта дополнительная информация улучшает работу отладки в GDB, но
вероятно, вызывает сбой других отладчиков или отказ от чтения программы. Если хотите
определите, нужно ли генерировать дополнительную информацию, используйте -gstabs +, -gstabs,
-gxcoff +, -gxcoffили -gvms (Смотри ниже).

GCC позволяет использовать -g -O. Ярлыки, используемые оптимизированным кодом, могут
иногда дают удивительные результаты: некоторые объявленные вами переменные могут не существовать в
все; поток управления может ненадолго переместиться туда, где вы этого не ожидали; некоторые заявления могут
не выполняться, потому что они вычисляют постоянные результаты или их значения уже равны
рука; некоторые операторы могут выполняться в разных местах, потому что они были перемещены
петель.

Тем не менее, отладка оптимизированного вывода оказывается возможной. Это делает разумным
использовать оптимизатор для программ, в которых могут быть ошибки.

Следующие параметры полезны, когда GCC создается с возможностью дополнительных
чем один формат отладки.

-gsplit-карлик
Разделите как можно больше отладочной информации о карликах в отдельный выходной файл
с расширением .dwo. Эта опция позволяет системе сборки избегать связывания файлов
с отладочной информацией. Чтобы быть полезным, этот параметр требует отладчика, способного
чтение файлов .dwo.

-ggdb
Создавать отладочную информацию для использования GDB. Это значит использовать наиболее выразительные
доступный формат (DWARF 2, stabs или собственный формат, если ни один из них не
поддерживается), включая расширения GDB, если это возможно.

-gpubnames
Создайте карликовые разделы .debug_pubnames и .debug_pubtypes.

-ggnu-пабназвания
Создайте разделы .debug_pubnames и .debug_pubtypes в формате, подходящем для
преобразование в индекс ГБД. Эта опция полезна только с компоновщиком, который может
создать индекс GDB версии 7.

-gstabs
Создавать отладочную информацию в формате stabs (если он поддерживается), без GDB
расширения. Это формат, используемый DBX в большинстве систем BSD. На MIPS, Alpha и
В системах System V Release 4 этот параметр создает выходные данные отладки stabs, которые не
понимается DBX или SDB. В системах System V Release 4 для этой опции требуется GNU
ассемблер.

-feliminate-неиспользуемые-символы-отладки
Создавать отладочную информацию в формате stabs (если он поддерживается) только для символов
которые действительно используются.

-femit-класс-отладка-всегда
Вместо того, чтобы выдавать отладочную информацию для класса C ++ только в одном объектном файле,
испустить его во всех объектных файлах с помощью класса. Эту опцию следует использовать только с
отладчики, которые не могут обработать способ, которым GCC обычно передает отладочную информацию
для классов, потому что использование этой опции увеличивает размер отладочной информации на
аж в два раза.

-fdebug-типы-секция
При использовании DWARF версии 4 или выше, типы DIE могут быть помещены в свои собственные
".debug_types" вместо того, чтобы делать их частью ".debug_info". Это
более эффективно помещать их в отдельные разделы comdat, поскольку компоновщик может
удалить дубликаты. Но не все потребители DWARF пока поддерживают разделы ".debug_types".
а на некоторых объектах ".debug_types" производит большую, а не меньшую отладку
Информация.

-gstabs +
Создавать отладочную информацию в формате stabs (если он поддерживается), используя GNU
расширения понимаются только отладчиком GNU (GDB). Использование этих расширений
может привести к сбою других отладчиков или отказу от чтения программы.

-gcoff
Создавайте отладочную информацию в формате COFF (если он поддерживается). Это
формат, используемый SDB в большинстве систем System V до System V Release 4.

-gxcoff
Создавать отладочную информацию в формате XCOFF (если он поддерживается). Это
формат, используемый отладчиком DBX в системах IBM RS / 6000.

-gxcoff +
Создавать отладочную информацию в формате XCOFF (если он поддерживается), используя GNU
расширения понимаются только отладчиком GNU (GDB). Использование этих расширений
может привести к сбою других отладчиков или отказу от чтения программы, а также может вызвать
ассемблеры, отличные от ассемблера GNU (GAS), вывести из строя ошибку.

-гном-версия
Создавайте отладочную информацию в формате DWARF (если он поддерживается). Значение
версия может быть 2, 3 или 4; версия по умолчанию для большинства целей - 4.

Обратите внимание, что в DWARF версии 2 некоторые порты требуют и всегда используют неконфликтующие
Расширения DWARF 3 в разматывающих столах.

Версия 4 может потребовать GDB 7.0 и -fvar-отслеживания-присваивания для максимальной пользы.

-grecord-gcc-переключатели
Этот переключатель вызывает параметры командной строки, используемые для вызова компилятора, который может
влияет на генерацию кода, добавляемого к атрибуту DW_AT_producer в DWARF
отладочная информация. Параметры объединены пробелами, отделяющими их от
друг друга и из версии компилятора. Смотрите также -frecord-gcc-переключатели для другого
способ сохранения параметров компилятора в объектном файле. Это значение по умолчанию.

-gno-record-gcc-переключатели
Запретить добавление параметров командной строки к атрибуту DW_AT_producer в DWARF
отладочная информация.

-gstrict-карлик
Запретить использование расширений более поздней стандартной версии DWARF, чем выбрано с помощью
-гном-версия. На большинстве целей, использующих неконфликтующие расширения DWARF из более поздних версий
стандартные версии разрешены.

-gno-строгий-карлик
Разрешить использование расширений более поздней стандартной версии DWARF, чем выбрано с помощью
-гном-версия.

-gvms
Создавать отладочную информацию в формате отладки Alpha / VMS (если он поддерживается). Этот
формат, используемый DEBUG в системах Alpha / VMS.

-gуровень
-ggdbуровень
-gstabsуровень
-gcoffуровень
-gxcoffуровень
-gvmsуровень
Запросите отладочную информацию, а также используйте уровень указать сколько информации. В
уровень по умолчанию - 2.

Уровень 0 не дает никакой отладочной информации. Таким образом, -g0 отрицает -g.

Уровень 1 дает минимальную информацию, достаточную для прослеживания некоторых частей
программа, которую вы не планируете отлаживать. Сюда входят описания функций и
внешние переменные и таблицы номеров строк, но нет информации о локальных переменных.

Уровень 3 включает дополнительную информацию, такую ​​как все определения макросов, присутствующие в
программа. Некоторые отладчики поддерживают расширение макроса при использовании -g3.

-гдварф-2 не принимает конкатенированный уровень отладки, потому что GCC использовался для поддержки
вариант -гном это означало генерировать отладочную информацию в версии 1 DWARF
формат (который сильно отличается от версии 2), и это было бы слишком запутанно.
Этот формат отладки давно устарел, но сейчас его нельзя изменить. Вместо этого используйте
Вдобавок -gуровень возможность изменить уровень отладки для DWARF.

-переключить
Отключите генерацию отладочной информации, если игнорирование этой опции генерирует ее, или включите ее.
на уровне 2 в противном случае. Положение этого аргумента в командной строке не
иметь значение; он вступает в силу после обработки всех остальных параметров, и только
один раз, сколько бы раз он ни давался. Это в основном предназначено для использования с
-fcompare-отладка.

-fsanitize = адрес
Включите AddressSanitizer, быстрый детектор ошибок памяти. Инструкции по доступу к памяти
будут оснащены инструментами для обнаружения ошибок вне пределов и использования после освобождения. Видеть
<http://code.google.com/p/address-sanitizer/> подробнее. Поведение во время выполнения
можно повлиять с помощью ASAN_OPTIONS переменная окружения; видеть
<https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags> для списка
поддерживаемые варианты.

-fsanitize = адрес-ядра
Включите AddressSanitizer для ядра Linux. Видеть
<http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel> больше


-fsanitize = поток
Включите ThreadSanitizer, быстрый детектор гонки данных. Инструкции по доступу к памяти будут
инструмент для обнаружения ошибок гонки данных. Видеть
<http://code.google.com/p/thread-sanitizer/> подробнее. Поведение во время выполнения
можно повлиять с помощью TSAN_OPTIONS переменная окружения; видеть
<https://code.google.com/p/thread-sanitizer/wiki/Flags> для списка поддерживаемых
настройки.

-fsanitize = утечка
Включите LeakSanitizer, детектор утечек памяти. Эта опция актуальна только для связывания
исполняемые файлы, и если ни то, ни другое -fsanitize = адрес ни -fsanitize = поток используется. В этом
если он свяжет исполняемый файл с библиотекой, которая переопределяет "malloc" и другие
функции распределителя. Видеть
<https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer> подробнее.
На поведение во время выполнения можно влиять с помощью LSAN_OPTIONS переменная среды.

-fsanitize = undefined
Включите UndefinedBehaviorSanitizer, быстрый детектор неопределенного поведения. Различный
вычисления будут оснащены инструментами для обнаружения неопределенного поведения во время выполнения. Текущий
подопции:

-fsanitize = сдвиг
Эта опция позволяет проверить, что результат операции смены
неопределенный. Обратите внимание: то, что именно считается неопределенным, немного отличается
между C и C ++, а также между ISO C90 и C99 и т. д.

-fsanitize = целое деление на ноль
Обнаружение целочисленного деления на ноль, а также деления "INT_MIN / -1".

-fsanitize = недоступен
С этой опцией компилятор превратит вызов «__builtin_unreachable» в
вместо этого вызовите диагностическое сообщение. При достижении вызова "__builtin_unreachable"
поведение не определено.

-fsanitize = vla-граница
Этот параметр указывает компилятору проверить, что размер переменной длины
массив положительный. Эта опция не действует в -std = c ++ 1y режим, как
стандарт требует, чтобы вместо этого было выброшено исключение.

-fsanitize = нуль
Эта опция включает проверку указателя. В частности, приложение, построенное на
эта опция будет выдавать сообщение об ошибке при попытке разыменовать
Указатель NULL, или если ссылка (возможно, ссылка rvalue) привязана к NULL
указатель.

-fsanitize = возврат
Эта опция включает проверку оператора возврата. Программы, построенные с этой опцией
при включении будет выдавать сообщение об ошибке, когда конец непустой функции
достигнуто без фактического возврата значения. Эта опция работает только в C ++.

-fsanitize = целочисленное переполнение со знаком
Эта опция включает проверку переполнения целого числа со знаком. Проверяем, что результат
«+», «*», а также унарные и двоичные символы «-» не переполняются в подписанном
арифметика. Обратите внимание, что необходимо учитывать правила целочисленного продвижения. То есть,
следующее не является переполнением:

знаковый символ a = SCHAR_MAX;
а ++;

В то время как -ftrapv вызывает выдачу ловушек для подписанных переполнений, -fsanitize = undefined
выдает диагностическое сообщение. В настоящее время это работает только для семейства языков C.

-fdump-final-insns[=файл]
Выгрузите окончательное внутреннее представление (RTL) в файл. Если необязательный аргумент
опущено (или если файл равно "."), имя файла дампа определяется добавлением
".gkd" к имени выходного файла компиляции.

-fcompare-отладка[=выбирает]
Если во время компиляции ошибок не возникает, запустите компилятор второй раз, добавив выбирает и
-fcompare-debug-секунда аргументам, переданным во вторую компиляцию. Сбросьте
окончательное внутреннее представление в обеих компиляциях и вывести ошибку, если они различаются.

Если знак равенства опущен, по умолчанию -переключить используется.

Переменная окружения GCC_COMPARE_DEBUG, если определено, непусто и ненулевое,
неявно позволяет -fcompare-отладка. Если GCC_COMPARE_DEBUG определяется как строка
начиная с тире, затем используется для выбирает, иначе по умолчанию -переключить is
используемый.

-fcompare-debug =, со знаком равенства, но без выбирает, эквивалентно
-fno-сравнить-отладить, что отключает сброс окончательного представления и
вторая компиляция, предотвращающая даже GCC_COMPARE_DEBUG от вступления в силу.

Чтобы проверить полное покрытие во время -fcompare-отладка тестирование, набор GCC_COMPARE_DEBUG сказать
-fcompare-debug-not-overriden, который GCC отклоняет как недопустимую опцию во всех фактических
компиляция (а не предварительная обработка, сборка или компоновка). Чтобы получить предупреждение,
установка GCC_COMPARE_DEBUG в -w% n-fcompare-debug переопределяется Сделаю.

-fcompare-debug-секунда
Эта опция неявно передается компилятору для второй запрошенной компиляции.
by -fcompare-отладка, а также варианты отключения предупреждений и исключения других параметров
это вызовет побочные эффекты компилятора вывода в файлы или стандартный вывод.
Файлы дампа и сохраненные временные файлы переименовываются таким образом, чтобы они содержали расширение ".gk".
дополнительное расширение во время второй компиляции, чтобы избежать перезаписи тех
генерируется первым.

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

-felimminate-dwarf2-dups
Сжимайте отладочную информацию DWARF 2, удаляя дублирующуюся информацию о
каждый символ. Эта опция имеет смысл только при генерации отладки DWARF 2.
информация с -гдварф-2.

-femit-struct-debug-только на базе
Выдавать отладочную информацию для структуроподобных типов только тогда, когда базовое имя
исходный файл компиляции соответствует базовому имени файла, в котором определена структура.

Эта опция существенно уменьшает размер отладочной информации, но при
значительная потенциальная потеря информации о типе для отладчика. Видеть
-femit-struct-debug-уменьшено для менее агрессивного варианта. Видеть
-femit-struct-debug-подробный для более детального контроля.

Эта опция работает только с DWARF 2.

-femit-struct-debug-уменьшено
Выдавать отладочную информацию для структуроподобных типов только тогда, когда базовое имя
исходный файл компиляции соответствует базовому имени файла, в котором определен тип,
если структура не является шаблоном или определена в системном заголовке.

Эта опция значительно уменьшает размер отладочной информации, с некоторыми
потенциальная потеря информации о типе для отладчика. Видеть -femit-struct-debug-только на базе
для более агрессивного варианта. Видеть -femit-struct-debug-подробный для более подробного
контролировать.

Эта опция работает только с DWARF 2.

-femit-struct-debug-подробный[=список спецификаций]
Укажите структуроподобные типы, для которых компилятор генерирует отладочную информацию. В
намерение состоит в том, чтобы уменьшить дублирующуюся информацию об отладке структуры между разными объектными файлами
в рамках той же программы.

Этот вариант представляет собой подробную версию -femit-struct-debug-уменьшено и
-femit-struct-debug-только на базе, который служит для большинства нужд.

Спецификация имеет синтаксис [реж:|инд:][заказ:|жанр:](любой|системы|Использование темпера с изогнутым основанием|нет)

Необязательное первое слово ограничивает спецификацию структурами, которые используются напрямую
(реж:) или использовались косвенно (инд:). Тип структуры используется напрямую, когда это тип
переменной, член. Косвенное использование возникает через указатели на структуры. То есть,
когда допустимо использование неполной структуры, это косвенное использование. Примером является структура
one непосредственный; структура два * косвенный;.

Необязательное второе слово ограничивает спецификацию обычными структурами (заказ:) Или
общие структуры (жанр:). Общие структуры немного сложно объяснить. Для C ++
это неявные специализации шаблонных классов или не шаблонные классы
в пределах вышеуказанного. У других языков программирования есть дженерики, но
-femit-struct-debug-подробный пока не реализует их.

Третье слово определяет исходные файлы для тех структур, для которых компилятор
должен выдавать отладочную информацию. Ценности нет и любой имеют нормальный смысл. В
ценностное Использование темпера с изогнутым основанием означает, что база имени файла, в котором объявлен тип
Появляется должно совпадать основание с названием основного файла компиляции. На практике,
это означает, что при компиляции foo.c, отладочная информация генерируется для типов
объявлено в этом файле и фу.ч, но не другие файлы заголовков. Значение системы означает
эти типы удовлетворяют Использование темпера с изогнутым основанием или объявлены в заголовках системы или компилятора.

Возможно, вам придется поэкспериментировать, чтобы определить наилучшие настройки для вашего приложения.

По умолчанию используется -femit-struct-debug-detail = все.

Эта опция работает только с DWARF 2.

-fno-merge-debug-строки
Укажите компоновщику, чтобы он не объединял строки в отладочной информации, которые
идентичны в разных объектных файлах. Слияние поддерживается не всеми ассемблерами или
линкеры. Слияние уменьшает размер отладочной информации в выходном файле на
стоимость увеличения времени обработки ссылок. По умолчанию слияние включено.

-fdebug-prefix-map =старый=new
При компиляции файлов в каталог старый, запишите отладочную информацию, описав их как
in new .

-fno-dwarf2-cfi-asm
Выпустить информацию о раскручивании DWARF 2 как сгенерированный компилятором раздел ".eh_frame" вместо использования
Директивы GAS ".cfi_ *".

-p Сгенерируйте дополнительный код для записи информации профиля, подходящей для программы анализа.
профессор. Вы должны использовать эту опцию при компиляции исходных файлов, о которых вы хотите получить данные,
и вы также должны использовать его при связывании.

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

-Q Заставляет компилятор распечатать каждое имя функции по мере ее компиляции и распечатать некоторые
статистика каждого прохода, когда он финиширует.

-ftime-отчет
Заставляет компилятор печатать некоторую статистику о времени, затраченном на каждый проход, когда он
отделки.

-fmem-отчет
Заставляет компилятор печатать некоторую статистику о постоянном выделении памяти, когда он
отделки.

-fmem-отчет-wpa
Заставляет компилятор распечатать некоторую статистику о постоянном выделении памяти для WPA
только фаза.

-fpre-ipa-mem-отчет
-fpost-ipa-mem-отчет
Заставляет компилятор распечатать некоторую статистику о постоянном выделении памяти до или
после межпроцедурной оптимизации.

-fprofile-отчет
Заставляет компилятор распечатать некоторую статистику о согласованности (оценочного) профиля
и эффект индивидуальных пасов.

-fstack-использование
Делает информацию об использовании стека вывода компилятора для программы для каждой функции
основание. Имя файла для дампа создается добавлением .su до имя. имя is
генерируется из имени выходного файла, если это явно указано и не является
исполняемый файл, иначе это базовое имя исходного файла. Запись состоит из
три поля:

· Название функции.

· Количество байтов.

· Один или несколько квалификаторов: «статический», «динамический», «ограниченный».

Квалификатор static означает, что функция управляет стеком статически: a
фиксированное количество байтов выделяется для кадра при входе в функцию и освобождается при
выход из функции; никакие другие настройки стека в функции не производятся. Секунда
поле - это фиксированное количество байтов.

Квалификатор «динамический» означает, что функция динамически манипулирует стеком: в
В дополнение к статическому распределению, описанному выше, настройки стека производятся в
тело функции, например, чтобы выдвигать аргументы вокруг вызовов функций. Если
также присутствует квалификатор "bounded", количество этих корректировок ограничено на
время компиляции, а второе поле - это верхняя граница общего количества используемого стека
функцией. Если его нет, то количество этих корректировок не ограничено.
во время компиляции, а второе поле представляет только ограниченную часть.

-fprofile-дуги
Добавьте код, чтобы программа выполнялась дуги оснащены инструментами. Во время выполнения программа
записывает, сколько раз выполнялось каждое ответвление и вызов и сколько раз выполнялось
или возвращается. Когда скомпилированная программа завершает работу, она сохраняет эти данные в файл с именем
auxname.gcda для каждого исходного файла. Данные могут быть использованы для профильных
оптимизации (-fbranch-вероятности) или для анализа тестового покрытия
(-ftest-охват). Каждый объектный файл имя генерируется из названия
выходной файл, если он явно указан и не является окончательным исполняемым файлом, в противном случае он
это базовое имя исходного файла. В обоих случаях любой суффикс удаляется (например,
foo.gcda для входного файла dir / foo.cили dir / foo.gcda для выходного файла, указанного как -o
dir / foo.o).

- охват
Эта опция используется для компиляции и компоновки кода, предназначенного для анализа покрытия. В
вариант является синонимом -fprofile-дуги -ftest-охват (при компиляции) и -lgcov
(при линковке). См. Документацию по этим параметрам для получения более подробной информации.

· Скомпилировать исходные файлы с -fprofile-дуги плюс оптимизация и генерация кода
параметры. Для анализа тестового покрытия используйте дополнительный -ftest-охват опцию.
Вам не нужно профилировать каждый исходный файл в программе.

· Свяжите ваши объектные файлы с -lgcov or -fprofile-дуги (последнее подразумевает
бывший).

· Запустите программу на типичной рабочей нагрузке, чтобы создать профиль дуги
Информация. Это можно повторять любое количество раз. Вы можете запускать одновременно
экземпляров вашей программы и при условии, что файловая система поддерживает блокировку,
файлы данных будут правильно обновлены. Также обнаруживаются "форковые" звонки и
правильно обработаны (двойного счета не будет).

· Для профильной оптимизации снова скомпилируйте исходные файлы с тем же
возможности оптимизации и генерации кода плюс -fbranch-вероятности.

· Для анализа тестового покрытия используйте gcov производить удобочитаемую информацию из
.gcno и .gcda файлы. Обратитесь к gcov документация для дальнейшего
Информация.

В -fprofile-дуги, для каждой функции вашей программы GCC создает поток программы
graph, затем находит остовное дерево для графа. Только дуги, которых нет на
связующее дерево должно быть оснащено инструментами: компилятор добавляет код для подсчета количества
раз, что эти дуги выполняются. Когда дуга является единственным выходом или единственным входом в
блок, код инструментария может быть добавлен в блок; в противном случае новый базовый
должен быть создан блок для хранения кода инструментария.

-ftest-охват
Создайте файл заметок, который gcov Утилита покрытия кода может использовать, чтобы показать программу
покрытие. Файл заметки каждого исходного файла называется auxname.gcno, Обратитесь к
-fprofile-дуги вариант выше для описания имя и инструкции о том, как
генерировать данные о тестовом покрытии. Данные покрытия более точно соответствуют исходным файлам, если
вы не оптимизируете.

-fdbg-cnt-список
Выведите имя и верхнюю границу счетчика для всех счетчиков отладки.

-fdbg-cnt =список значений счетчика
Установите верхнюю границу внутреннего счетчика отладки. список значений счетчика через запятую
Список имя:ценностное пары, которые устанавливают верхнюю границу каждого счетчика отладки имя в
ценностное . Все счетчики отладки имеют начальную верхнюю границу «UINT_MAX»; таким образом
«dbg_cnt ()» всегда возвращает истину, если верхняя граница не установлена ​​этой опцией. Для
например, с -fdbg-cnt = dce: 10, tail_call: 0, "dbg_cnt (dce)" возвращает истину только для первого
10 заклинаний.

-обоснованный-вид-pass
-fdisable-вид-pass=список диапазонов
Это набор параметров, которые используются для явного отключения / включения оптимизации.
проходит. Эти параметры предназначены для использования при отладке GCC. Пользователи компилятора должны
вместо этого используйте обычные параметры для включения / выключения проходов.

-fdisable-ipa-pass
Отключить проход IPA pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.

-fdisable-rtl-pass
-fdisable-rtl-pass=список диапазонов
Отключить проход RTL pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1. список диапазонов это список разделенных запятыми
диапазоны функций или имена ассемблера. Каждый диапазон представляет собой пару чисел, разделенных знаком
двоеточие. Диапазон включает оба конца. Если диапазон тривиален, число
пару можно упростить как одно число. Если узел графа вызовов функции
UID попадает в один из указанных диапазонов, pass отключен для этого
функция. UID отображается в заголовке функции файла дампа, а проход
имена могут быть сброшены с помощью опции -fdump-проходит.

-fdisable-дерево-pass
-fdisable-дерево-pass=список диапазонов
Отключить проход дерева pass. Посмотреть -fdisable-rtl для описания опции
аргументы.

-fenable-ipa-pass
Включить проход IPA pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.

-fenable-RTL-pass
-fenable-RTL-pass=список диапазонов
Включить проход RTL pass. Посмотреть -fdisable-rtl для описания аргумента опции и
примеры.

-фенабл-дерево-pass
-фенабл-дерево-pass=список диапазонов
Включить проход дерева pass. Посмотреть -fdisable-rtl для описания аргументов опции.

Вот несколько примеров, показывающих использование этих опций.

# отключить ccp1 для всех функций
-fdisable-дерево-ccp1
# отключаем полную развертку для функции, чей uid узла cgraph равен 1
-fenable-tree-cunroll = 1
# отключить gcse2 для функций в следующих диапазонах [1,1],
# [300,400] и [400,1000]
# отключить gcse2 для функций foo и foo2
-fdisable-rtl-gcse2 = foo, foo2
# отключить раннее встраивание
-fdisable-tree-einline
# отключить встраивание ipa
-fdisable-ipa-inline
# включить полное разворачивание дерева
-fenable-дерево-развернуть

-dписьмена
-fdump-rtl-pass
-fdump-rtl-pass=имя файла
Говорит о создании отладочных дампов во время компиляции в моменты времени, указанные в письмена. Это
используется для отладки проходов компилятора на основе RTL. Имена файлов для большинства
дампов создаются путем добавления номера прохода и слова к имя дампа, и
файлы создаются в каталоге выходного файла. В случае =имя файла вариант,
дамп выводится в данном файле вместо пронумерованных файлов дампа. Примечание
что номер прохода вычисляется статически по мере того, как проходы регистрируются в проходе
менеджер. Таким образом, нумерация не связана с динамическим порядком выполнения
проходит. В частности, пропуск, установленный плагином, может иметь число более 200, даже
если он будет выполнен довольно рано. имя дампа генерируется из имени выходного файла,
если явно указано, и это не исполняемый файл, в противном случае это базовое имя
исходный файл. Эти переключатели могут иметь разные эффекты, когда -E используется для
предварительная обработка.

Отладочные дампы можно включить с помощью -fdump-rtl переключатель или некоторые -d вариант письмена, Вот
возможные буквы для использования в pass и письмена, и их значения:

-fdump-rtl-выравнивания
Дамп после вычисления выравнивания ветвей.

-fdump-rtl-asmcons
Дамп после исправления операторов rtl с неудовлетворенными ограничениями входа / выхода.

-fdump-rtl-auto_inc_dec
Дамп после обнаружения auto-inc-dec. Этот проход работает только на архитектурах, которые
есть инструкции auto inc или auto dec.

-fdump-RTL-барьеры
Сбросить после очистки инструкции по ограждению.

-fdump-rtl-bbpart
Дамп после разделения горячего и холодного базовых блоков.

-fdump-RTL-BBRO
Дамп после переупорядочивания блоков.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 и -fdump-rtl-btl2 включить сброс после двух целевых веток
оптимизация нагрузки проходит.

-fdump-RTL-обход
Дамп после обхода перехода и оптимизации потока управления.

-fdump-RTL-комбайн
Дамп после прохождения комбинации команд RTL.

-fdump-RTL-compgotos
Дамп после дублирования вычисленных gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2и -fdump-rtl-ce3 включить сброс после трех
если конвертация проходит.

-fdump-rtl-cprop_hardreg
Дамп после распространения копии на бумажном носителе.

-fdump-rtl-CSA
Дамп после совмещения настроек стека.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 и -fdump-rtl-cse2 включить сброс после двух общих
исключение подвыражения проходит.

-fdump-rtl-dce
Дамп после того, как пройдет удаление автономного мертвого кода.

-fdump-rtl-dbr
Дамп после отложенного планирования ветвлений.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 и -fdump-rtl-dce2 включить сброс после двух мертвых магазинов
исключение проходит.

-fdump-RTL-а
Дамп после доработки кода обработки EH.

-fdump-rtl-eh_ranges
Дамп после преобразования областей диапазона обработки EH.

-fdump-RTL-расширять
Дамп после генерации RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 и -fdump-rtl-fwprop2 включить сброс после двух форвардов
распространение проходит.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 и -fdump-rtl-gcse2 включить сброс после глобального общего
исключение подвыражения.

-fdump-rtl-init-regs
Дамп после инициализации регистров.

-fdump-rtl-инициалы
Дамп после вычисления наборов начальных значений.

-fdump-rtl-into_cfglayout
Дамп после перехода в режим cfglayout.

-fdump-rtl-ира
Дамп после повторного выделения регистров.

-fdump-rtl-прыжок
Дамп после оптимизации второго прыжка.

-fdump-rtl-loop2
-fdump-rtl-loop2 включает дамп после прохождения оптимизации цикла RTL.

-fdump-rtl-mach
Дамп после выполнения машинно-зависимого прохода реорганизации, если этот проход
существует.

-fdump-rtl-mode_sw
Дамп после удаления резервных переключателей режима.

-fdump-rtl-rnreg
Дамп после перенумерации регистров.

-fdump-rtl-outof_cfglayout
Дамп после конвертации из режима cfglayout.

-fdump-RTL-peephole2
Свалка после прохождения глазка.

-fdump-rtl-после перезагрузки
Дамп после оптимизации после перезагрузки.

-fdump-rtl-pro_and_epilogue
Дамп после создания прологов и эпилогов функций.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 и -fdump-rtl-sched2 включить сброс после базового блока
планирование проходов.

-fdump-rtl-ри
Дамп после удаления знака / нулевого расширения.

-fdump-rtl-seqabstr
Дамп после обнаружения общей последовательности.

-fdump-RTL-сокращение
Свалка после укорачивания веток.

-fdump-RTL-брат
Дамп после оптимизации звонков сиблинга.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 и
-fdump-rtl-split5 включить сброс после пяти раундов разделения инструкции.

-fdump-RTL-sms
Дамп после планирования по модулю. Этот проход работает только на некоторых архитектурах.

-fdump-RTL-стек
Дамп после преобразования из регистров "плоского регистрового файла" GCC в регистры x87
стековые регистры. Этот проход работает только на вариантах x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 и -fdump-rtl-subreg2 включить дамп после двух субрегионов
расширение проходит.

-fdump-RTL-unshare
Дамп после отмены общего доступа к rtl.

-fdump-RTL-vartrack
Дамп после отслеживания переменных.

-fdump-rtl-vregs
Дамп после преобразования виртуальных регистров в жесткие.

-fdump-rtl-веб
Дамп после разделения живого диапазона.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Эти дампы определены, но всегда производят пустые файлы.

-in
-fdump-RTL-все
Произведите все вышеперечисленные дампы.

-дА Аннотируйте вывод ассемблера различной отладочной информацией.

-дД Выгрузить все определения макросов в конце предварительной обработки в дополнение к обычным
вывод.

-dH Создавать дамп ядра всякий раз, когда возникает ошибка.

-дп Аннотируйте вывод ассемблера комментарием, указывающим, какой шаблон и
используется альтернатива. Также печатается длина каждой инструкции.

-дП Выведите RTL в вывод ассемблера в качестве комментария перед каждой инструкцией. Также
включается -дп аннотаций.

-дх Просто сгенерируйте RTL для функции вместо ее компиляции. Обычно используется с
-fdump-RTL-расширять.

-fdump-ноаддр
При выполнении отладочных дампов подавляйте вывод адреса. Это делает более возможным
использовать diff для отладочных дампов для вызовов компилятора с разными двоичными файлами компилятора
и / или разные начальные местоположения text / bss / data / heap / stack / dso.

-fdump-без номера
При выполнении отладочных дампов подавляйте номера инструкций и адресный вывод. Этот
делает более возможным использование diff для отладочных дампов для вызовов компилятора с
разные варианты, в частности с и без -g.

-fdump-ненумерованные-ссылки
При выполнении отладочных дампов (см. -d вариант выше), подавить номера инструкций для
ссылки на предыдущую и следующую инструкции в последовательности.

-fdump-перевод-единица (Только C ++)
-fdump-перевод-блок-кредита (Только C ++)
Выгрузите представление древовидной структуры для всей единицы перевода в файл.
Имя файла создается путем добавления .ту к имени исходного файла, и файл
создается в том же каталоге, что и выходной файл. Если -кредита форма используется,
кредита контролирует детали дампа, как описано для -fdump-дерево настройки.

-fdump-иерархия классов (Только C ++)
-fdump-иерархия-классов-кредита (Только C ++)
Выгрузить представление иерархии каждого класса и макета таблицы виртуальных функций в
файл. Имя файла создается путем добавления .учебный класс к имени исходного файла, а файл
создается в том же каталоге, что и выходной файл. Если -кредита форма используется,
кредита контролирует детали дампа, как описано для -fdump-дерево настройки.

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

ВСЕ Включает все дампы межпроцедурного анализа.

cграфик
Выводит информацию об оптимизации графа вызовов, удалении неиспользуемых функций и
встраивание решений.

встроенный
Дамп после встраивания функции.

-fdump-проходит
Вывести список проходов оптимизации, которые включаются и выключаются текущим
параметры командной строки.

-fdump-статистика-вариант
Включение и управление выгрузкой статистики проходов в отдельный файл. Имя файла
создается добавлением суффикса, оканчивающегося на .статистика к имени исходного файла, а
файл создается в том же каталоге, что и выходной файл. Если -вариант форма
используемый, -статистика заставляет счетчики суммироваться по всей единице компиляции, в то время как
-подробности сбрасывает каждое событие по мере их создания проходами. По умолчанию без опции
суммировать счетчики для каждой скомпилированной функции.

-fdump-дерево-переключатель
-fdump-дерево-переключатель-кредита
-fdump-дерево-переключатель-кредита=имя файла
Управляйте выгрузкой на различных этапах обработки дерева промежуточных языков, чтобы
файл. Имя файла создается путем добавления суффикса, зависящего от переключателя, к
имя исходного файла, и файл создается в том же каталоге, что и выходной файл. В
случай =имя файла вариант, дамп выводится в данном файле вместо автоматического
именованные файлы дампа. Если -кредита форма используется, кредита это список - отделенный
параметры, управляющие деталями дампа. Не все варианты применимы ко всем
свалки; те, которые не имеют смысла, игнорируются. Доступны следующие варианты

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

asmname
Если для данного объявления установлено "DECL_ASSEMBLER_NAME", используйте это в дампе.
вместо "DECL_NAME". Его основное использование - простота использования, работая в обратном направлении от
искореженные имена в сборочном файле.

стройное
При сбросе промежуточных представлений переднего плана запретите сброс элементов
область действия или тело функции просто потому, что эта область была достигнута. Только
сбрасывать такие элементы, когда они напрямую доступны другим путем.

При выгрузке деревьев с красивыми рисунками этот параметр запрещает сброс трупов деревьев.
управляющие структуры.

При сбросе RTL распечатайте RTL в тонкой (сжатой) форме вместо значения по умолчанию.
LISP-подобное представление.

сырье Распечатайте необработанное представление дерева. По умолчанию деревья красиво распечатываются в
C-подобное представление.

детали
Включите более подробные дампы (не соблюдаются всеми опциями дампа). Также включают
информация из проходов оптимизации.

Статистика
Разрешить выгрузку различной статистики про проход (не соблюдается каждым дампом
опция).

Блоки
Включить отображение основных границ блоков (отключено в необработанных дампах).

график
Для каждого из остальных указанных файлов дампа (-fdump-rtl-pass), дамп
представление графа потока управления, подходящего для просмотра с помощью GraphViz, чтобы
файл.passid.pass.dot. Каждая функция в файле красиво напечатана в виде подграфа,
так что GraphViz может отображать их все на одном графике.

Эта опция в настоящее время работает только для дампов RTL, а RTL всегда выгружается в
стройная форма.

голос
Включите отображение виртуальных операндов для каждого оператора.

Ленено
Включите отображение номеров строк для операторов.

UID Включите отображение уникального идентификатора («DECL_UID») для каждой переменной.

подробный
Включите отображение дампа дерева для каждого оператора.

eh Включите отображение номера региона EH, в котором находится каждый оператор.

Scev
Включите отображение деталей анализа скалярной эволюции.

оптимизированный
Включить отображение информации об оптимизации (доступно только в определенных проходах).

пропущенный
Включить отображение пропущенной информации об оптимизации (доступно только в определенных проходах).

ноты
Включите другую подробную информацию по оптимизации (доступно только в определенных проходах).

=имя файла
Вместо автоматически именованного файла дампа вывод в файл с заданным именем. Файл
имена стандартный вывод и STDERR обрабатываются специально и считаются уже открытыми
стандартные потоки. Например,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = стандартный файл file.c

выводит дамп векторизатора в Фу.дамп, а предварительный дамп выводится на STDERR.
Если для одного и того же прохода заданы два конфликтующих имени файла дампа, то последнее
вариант отменяет предыдущий.

ВСЕ Включите все параметры, кроме сырье, стройное, подробный и Ленено.

опталл
Включите все параметры оптимизации, т. Е. оптимизированный, пропущенныйи в своих размышлениях.

Возможны следующие дампы деревьев:

оригинал
Дамп перед любой оптимизацией на основе дерева, чтобы файл.оригинал.

оптимизированный
Дамп после оптимизации на основе дерева, чтобы файл.оптимизированный.

щупальца
Дамп каждой функции до и после перехода упрощения в файл. Файл
имя создается путем добавления .гимпл к имени исходного файла.

CFG Выгрузите график потока управления каждой функции в файл. Имя файла сделано
добавление .cfg к имени исходного файла.

ch Выгрузите каждую функцию после копирования заголовков цикла. Имя файла создается путем добавления
.ch к имени исходного файла.

SSA Выгрузить информацию, связанную с SSA, в файл. Имя файла создается путем добавления .ssa
к имени исходного файла.

псевдоним
Дамп информации о псевдонимах для каждой функции. Имя файла создается путем добавления
.псевдоним к имени исходного файла.

CCP Сбросьте каждую функцию после КПК. Имя файла создается путем добавления .ccp до
имя исходного файла.

хранитьccp
Сбросьте каждую функцию после STORE-CCP. Имя файла создается путем добавления .storeccp
к имени исходного файла.

заранее Дамп деревьев после устранения частичной избыточности. Имя файла сделано
добавление .пре к имени исходного файла.

частоты Выгружать деревья после полного устранения избыточности. Имя файла создается путем добавления
.свободно к имени исходного файла.

копипроп
Дамп деревьев после распространения копии. Имя файла создается путем добавления .copyprop
к имени исходного файла.

store_copyprop
Дамповые деревья после копирования-размножения хранилища. Имя файла создается путем добавления
.store_copyprop к имени исходного файла.

АКД Сбросьте каждую функцию после устранения мертвого кода. Имя файла сделано
добавление .dce к имени исходного файла.

SRA Выгрузите каждую функцию после выполнения скалярной замены агрегатов. Файл
имя создается путем добавления .сра к имени исходного файла.

раковина
Сбросьте каждую функцию после выполнения погружения кода. Имя файла сделано
добавление .раковина к имени исходного файла.

дом Выгрузите каждую функцию после применения оптимизаций дерева доминаторов. Имя файла
сделано путем добавления .дом к имени исходного файла.

дсэ Сбросьте каждую функцию после применения устранения мертвого магазина. Имя файла сделано
добавив .dse к имени исходного файла.

фиопт
Выгрузите каждую функцию после оптимизации узлов PHI в прямой код. Файл
имя создается путем добавления .фиопт к имени исходного файла.

передний винт
Выгрузите каждую функцию после прямого распространения одноразовых переменных. Имя файла
производится путем добавления .форвпроп к имени исходного файла.

копирование и переименование
Выгрузите каждую функцию после применения оптимизации переименования копии. Имя файла
сделано путем добавления .copyrename к имени исходного файла.

NRV Выгрузите каждую функцию после применения оптимизации именованного возвращаемого значения к универсальному
деревья. Имя файла создается путем добавления .nrv к имени исходного файла.

Vect
Дамп каждой функции после применения векторизации циклов. Имя файла сделано
добавив .вектор к имени исходного файла.

SLP Дамп каждой функции после применения векторизации базовых блоков. Имя файла
сделано путем добавления .slp к имени исходного файла.

VRP Сбросьте каждую функцию после распространения диапазона значений (VRP). Имя файла сделано
добавление .врп к имени исходного файла.

ВСЕ Включите все доступные дампы дерева с помощью флагов, указанных в этой опции.

-fopt-информация
-fopt-информация-кредита
-fopt-информация-кредита=имя файла
Управляет дампами оптимизации из различных этапов оптимизации. Если -кредита форма
используемый, кредита это список - разделенные параметры для выбора деталей дампа и
оптимизации. Если кредита не указан, по умолчанию оптимизированный для деталей и
опталл для групп оптимизации. Если имя файла не указан, по умолчанию
STDERR. Обратите внимание, что вывод имя файла будет перезаписан в случае нескольких
единицы перевода. Если желателен комбинированный вывод из нескольких единиц перевода,
STDERR следует использовать вместо

Варианты можно разделить на две группы: 1) варианты, описывающие многословность
dump и 2) параметры, описывающие, какие оптимизации следует включить. Варианты
из обеих групп можно свободно смешивать, так как они не пересекаются. Однако в случае
При любых конфликтах последние параметры имеют приоритет над ранее заданными параметрами в командной строке.
Хотя допустимы несколько параметров -fopt-info, только один из них может иметь = имя файла.
Если указаны другие имена файлов, все, кроме первого, игнорируются.

Детализация дампа имеет следующие параметры

оптимизированный
Распечатайте информацию, когда оптимизация будет успешно применена. Это до перевала
чтобы решить, какая информация актуальна. Например, векторизатор передает печать
исходное местоположение петель, которые были успешно векторизованы.

пропущенный
Распечатать информацию о пропущенных оптимизациях. Индивидуальные проходы контроля, которые
информация для включения в вывод. Например,

gcc -O2 -ftree-vectorize -fopt-info-vec-пропущено

распечатает информацию об упущенных возможностях оптимизации из векторизации
переходит на stderr.

в своих размышлениях
Печатать подробную информацию об оптимизации, например, об определенных преобразованиях,
более подробные сообщения о решениях и т. д.

ВСЕ Распечатайте подробную информацию по оптимизации. Это включает оптимизированный, пропущенныйи
в своих размышлениях.

Второй набор опций описывает группу оптимизаций и может включать одну или
подробнее о следующем.

ипа Включите дампы из всех межпроцедурных оптимизаций.

поиска
Включите дампы из всех оптимизаций цикла.

встроенный
Включите дампы из всех оптимизаций встраивания.

Ith Включите дампы из всех оптимизаций векторизации.

опталл
Включите дампы из всех оптимизаций. Это надмножество групп оптимизации
вышеперечисленное.

Например,

gcc -O3 -fopt-info-missed = пропущено. все

выводит отчет о пропущенной оптимизации из всех проходов в пропущено. все.

В качестве другого примера,

gcc -O3 -fopt-info-inline-optimized-missed = inline.txt

выведет информацию о пропущенных оптимизациях, а также об оптимизированных местоположениях из
все встраивание переходит в встроенный.txt.

Если же линия индикатора имя файла предоставляется, то дампы всех применимых оптимизаций
объединены в имя файла. В противном случае дамп выводится на STDERR. Если кредита
опущено, по умолчанию универсальный, что означает дамп всей доступной оптимизации
информация со всех проездных. В следующем примере вся информация по оптимизации выводится на
в STDERR.

gcc -O3 -fopt-информация

Обратите внимание, что -fopt-info-vec-пропущено ведет себя так же, как -fopt-информация-пропущенный-vec.

В качестве другого примера рассмотрим

gcc -fopt-info-vec-missed = vec.miss -fopt-info-loop-optimized = loop.opt

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

-frandom-seed =string
Эта опция предоставляет начальное число, которое GCC использует вместо случайных чисел при генерации
определенные имена символов, которые должны быть разными в каждом скомпилированном файле. Это также
используется для размещения уникальных штампов в файлах данных покрытия и объектных файлах, которые производят
их. Вы можете использовать -frandom-seed возможность производить воспроизводимо идентичный объект
файлы.

Команда string должны быть разными для каждого компилируемого файла.

-fsched-verbose =n
На целевых объектах, использующих планирование инструкций, этот параметр контролирует количество
отладочный вывод распечатывает планировщик. Эта информация записывается в стандартную ошибку,
если не -fdump-rtl-sched1 or -fdump-rtl-sched2 указан, и в этом случае он выводится
в обычный файл распечатки дампа, .sched1 or .sched2 соответственно. Однако для n
больше девяти, вывод всегда печатается со стандартной ошибкой.

Что касается n больше нуля, -fsched-подробный выводит ту же информацию, что и
-fdump-rtl-sched1 и -fdump-rtl-sched2. Для n больше единицы, он также выводит базовый
вероятности блокировки, подробная информация о готовом списке и информация о блоке / инсн. Для n
больше двух, он включает RTL в точке прерывания, поток управления и информацию о регионах. А также
для n более четырех, -fsched-подробный также включает информацию о зависимости.

-сохранение темпов
-save-temps = cwd
Постоянно храните обычные «временные» промежуточные файлы; поместите их в текущую
каталог и назовите их на основе исходного файла. Таким образом, составив foo.c -c
-сохранение темпов производит файлы фу.я и фу.с, так же как фу.о, Это создает
предварительно обработанный фу.я выходной файл, хотя теперь компилятор обычно использует
интегрированный препроцессор.

При использовании в сочетании с -x параметр командной строки, -сохранение темпов разумно
достаточно, чтобы избежать перезаписи входного исходного файла с тем же расширением, что и
промежуточный файл. Соответствующий промежуточный файл можно получить, переименовав
исходный файл перед использованием -сохранение темпов.

Если вы вызываете GCC параллельно, скомпилируйте несколько разных исходных файлов с общим
общее базовое имя в разных подкаталогах или один и тот же исходный файл, скомпилированный для
несколько мест назначения вывода, вероятно, что разные параллельные компиляторы будут
мешают друг другу и перезаписывают временные файлы. Например:

gcc -save-temps -o outdir1 / foo.o indir1 / foo.c &
gcc -save-temps -o outdir2 / foo.o indir2 / foo.c &

может привести к фу.я и фу.о записываются одновременно обоими компиляторами.

-save-temps = obj
Постоянно храните обычные «временные» промежуточные файлы. Если -o опция используется,
временные файлы основаны на объектном файле. Если -o опция не используется,
-save-temps = obj переключатель ведет себя как -сохранение темпов.

Например:

gcc -save-temps = obj -c foo.c
gcc -save-temps = obj -c bar.c -o каталог / xbar.o
gcc -save-temps = obj foobar.c -o dir2 / yfoobar

создает фу.я, фу.с, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.sи
dir2 / yfoobar.o.

-время[=файл]
Сообщите время ЦП, затраченное каждым подпроцессом в последовательности компиляции. Для C
исходные файлы, это собственно компилятор и ассемблер (плюс компоновщик, если компоновка
сделано).

Без спецификации выходного файла результат выглядит следующим образом:

# cc1 0.12 0.01
# как 0.00 0.01

Первое число в каждой строке - это «время пользователя», то есть время, потраченное на выполнение
сама программа. Второе число - «системное время», время, затраченное на выполнение операций.
системные процедуры от имени программы. Оба числа указаны в секундах.

С указанием выходного файла выходные данные добавляются к названному файлу,
и выглядит это так:

0.12 0.01 куб.
0.00 0.01 как

«Пользовательское время» и «системное время» перемещаются перед названием программы, а
параметры, переданные программе, отображаются, чтобы можно было позже определить, какой файл был
компилируется и с какими опциями.

-fvar-отслеживание
Выполнить проход отслеживания переменных. Он вычисляет, где переменные хранятся в каждой позиции
в коде. Затем создается лучшая отладочная информация (если отладочная информация
формат поддерживает эту информацию).

Включено по умолчанию при компиляции с оптимизацией (-Операционные системы, -O, -O2, ...),
отладочная информация (-g), и формат отладочной информации поддерживает его.

-fvar-отслеживания-присваивания
Аннотируйте присвоения пользовательским переменным на ранней стадии компиляции и попытайтесь перенести
аннотации на протяжении всей компиляции до конца, в попытке
для улучшения отладочной информации при оптимизации. Использование -гдварф-4 рекомендуется вместе
в конечном итоге.

Его можно включить, даже если отслеживание переменных отключено, и в этом случае аннотации
созданы и поддерживаются, но в конце отбрасываются.

-fvar-отслеживания-назначения-переключение
Переключать -fvar-отслеживания-присваиваниятак же, как -переключить переключение -g.

-print-file-name =библиотека
Вывести полное абсолютное имя файла библиотеки библиотека это будет использоваться, когда
связывание --- и больше ничего не делайте. С этой опцией GCC не компилирует и не связывает
что-нибудь; он просто печатает имя файла.

-print-мульти-каталог
Вывести имя каталога, соответствующее мультибиблиотеке, выбранной любыми другими переключателями.
присутствует в командной строке. Этот каталог должен существовать в GCC_EXEC_PREFIX.

-print-мультибиблиотека
Распечатайте сопоставление имен мультибиблиотечного каталога с переключателями компилятора, которые их включают.
Имя каталога отделяется от переключателей знаком ;, и каждый переключатель начинается с
@ вместо -, без пробелов между несколькими переключателями. Это должно
облегчить обработку скорлупы.

-print-multi-os-каталог
Вывести путь к библиотекам ОС для выбранной мультибиблиотеки относительно некоторых Lib
подкаталог. Если библиотеки ОС присутствуют в Lib подкаталог и без мультилибов
используются, обычно это просто ., если библиотеки ОС присутствуют в libсуффикс родной брат
каталоги, которые это печатает, например ../ lib64, ../ Lib or ../ lib32, или если библиотеки ОС
присутствует в lib / subdir подкаталоги, которые он печатает, например amd64, спаркв9 or ev6.

-print-мультиархив
Вывести путь к библиотекам ОС для выбранного мультиархива относительно некоторых Lib
подкаталог.

-print-prog-name =программа
Подобно -print-имя-файла, но ищет такую ​​программу, как CPP.

-print-libgcc-имя-файла
Такой же как -print-file-name = libgcc.a.

Это полезно, когда вы используете -nostdlib or -nodefaultlibs но вы хотите установить связь с
libgcc.a. Ты можешь сделать:

gcc -nostdlib ... `gcc -print-libgcc-имя-файла`

-print-поиск-директоров
Распечатайте имя настроенного каталога установки и список программ и
каталоги библиотеки GCC ищет --- и больше ничего не делает.

Это полезно, когда GCC печатает сообщение об ошибке установка проблема, не могу Exec
cpp0: Нет файл or каталог. Чтобы решить эту проблему, вам нужно либо поставить cpp0 и
другие компоненты компилятора, где GCC ожидает найти их, или вы можете установить
переменная среды GCC_EXEC_PREFIX в каталог, в который вы их установили. Не надо
забудь конечный /.

-print-sysroot
Распечатайте целевой каталог sysroot, который используется во время компиляции. Это
целевой системный корень, указанный либо во время настройки, либо с помощью --sroot вариант,
возможно, с дополнительным суффиксом, который зависит от параметров компиляции. Если нет цели
указан sysroot, опция ничего не печатает.

-print-sysroot-заголовки-суффикс
Распечатайте суффикс, добавленный к целевому системному корню при поиске заголовков, или дайте
ошибка, если компилятор не настроен с таким суффиксом --- и ничего не делать
остальное.

-самосвал
Выведите целевую машину компилятора (например, i686-ПК-Linux-GNU) --- и не делай
что-нибудь еще.

-дампверсия
Выведите версию компилятора (например, 3.0) --- и больше ничего не делайте.

-dumpspecs
Распечатайте встроенные спецификации компилятора --- и больше ничего не делайте. (Это используется, когда
Сам GCC строится.)

-fno-исключить неиспользуемые-отладочные типы
Обычно при создании вывода DWARF 2 GCC избегает вывода символов отладки для
типы, которые нигде не используются в компилируемом исходном файле. Иногда бывает полезно
чтобы GCC выдавал отладочную информацию для всех типов, объявленных в модуле компиляции,
независимо от того, используются ли они на самом деле в этой единице компиляции, для
например, если в отладчике вы хотите привести значение к типу, который на самом деле не является
используется в вашей программе (но заявлен). Однако чаще это приводит к
значительный объем потраченного впустую пространства.

Опции То, что Control Оптимизация
Эти параметры управляют различными видами оптимизации.

Без какой-либо опции оптимизации цель компилятора - снизить стоимость компиляции.
и чтобы отладка дала ожидаемые результаты. Заявления независимы: если вы
остановите программу с помощью точки останова между операторами, затем вы можете присвоить новое значение
любую переменную или измените счетчик программы на любой другой оператор в функции и получите
именно те результаты, которые вы ожидаете от исходного кода.

Включение флагов оптимизации заставляет компилятор попытаться улучшить производительность и / или
размер кода за счет времени компиляции и, возможно, возможности отладки
программу.

Компилятор выполняет оптимизацию на основе имеющихся у него знаний о программе.
Компиляция нескольких файлов одновременно в один режим выходного файла позволяет компилятору использовать
информация, полученная из всех файлов при компиляции каждого из них.

Не все оптимизации напрямую контролируются флагом. Только оптимизации, у которых есть
flag перечислены в этом разделе.

Большинство оптимизаций возможно только в том случае, если -O уровень устанавливается в командной строке. Иначе
они отключены, даже если указаны отдельные флаги оптимизации.

В зависимости от цели и того, как был настроен GCC, несколько другой набор
оптимизации могут быть включены на каждом -O уровень, чем перечисленные здесь. Вы можете вызвать GCC
-Q --help = оптимизаторы чтобы узнать точный набор оптимизаций, включенных на
каждый уровень.

-O
-O1 Оптимизировать. Оптимизация компиляции занимает немного больше времени и намного больше памяти для
большая функция.

В -O, компилятор пытается уменьшить размер кода и время выполнения, не выполняя
любые оптимизации, требующие много времени на компиляцию.

-O включает следующие флаги оптимизации:

-fauto-inc-dec -fcompare-элим -fcprop-регистры -fdce -fdefer-поп -fdelayed-ветка
-fdse -fguess-ветвь-вероятность -fif-преобразование2 -fif-преобразование -fipa-чистый-const
-fipa-профиль -fipa-ссылка -fmerge-константы -fsplit-широкие-типы -ftree-bit-ccp
-ftree-встроенный-вызов-dce -ftree-ccp -футри-ч -ftree-copyrename -ftree-dce
-ftree-доминатор-opts -ftree-dse -ftree-forwprop -free-fre -ftree-phiprop -ftree-slsr
-ftree-сра -ftree-pta -дерево-тер -Функция за раз

-O также включается -fomit-frame-pointer на машинах, где это не мешает
с отладкой.

-O2 Оптимизируйте еще больше. GCC выполняет почти все поддерживаемые оптимизации, которые не
предполагают компромисс космической скорости. По сравнению с -O, этот параметр увеличивает как
время компиляции и производительность сгенерированного кода.

-O2 включает все флаги оптимизации, указанные -O. Также включаются следующие
флаги оптимизации: -fthread-прыжки -falign-функции -falign-прыжки -falign-петли
-falign-label -fcaller-сохраняет -fcrossjumping -fcse-следовать-прыжки -fcse-skip-блоки
-fdelete-проверка нулевого указателя -fдевиртуализовать -fdevirtualize-спекулятивно
-файловые-оптимизации -fgcse -fgcse-lm -fhoist-смежные-нагрузки
-finline-small-функции -findirect-встраивание -фипа-сра
-fisolate-ошибочные-пути-разыменование -foptimize-sibling-вызовы -fpartial-встраивание
-fглазок2 -freorder-блоки -freorder-функции -frerun-cse-после-петля
-fsched-межблок -fsched-спецификация -fschedule-insns -fschedule-insns2 -fstrict-псевдоним
-fstrict-переполнение -бесплатное переключение-преобразование -ftree-tail слияние -free-pre -ftree-vrp

Обратите внимание на предупреждение под -fgcse о вызове -O2 в программах, использующих вычисленные
перейти к S.

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях -D_FORTIFY_SOURCE = 2 устанавливается по умолчанию и является
активируется, когда -O установлено значение 2 или выше. Это обеспечивает дополнительное время компиляции и
во время выполнения проверяет наличие нескольких функций libc. Чтобы отключить, укажите либо
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.

-O3 Оптимизируйте еще больше. -O3 включает все оптимизации, указанные -O2 а также включает
-finline-функции, -funswitch-петли, -fpredictive-обобщение, -fgcse-после перезагрузки,
-ftree-loop-векторизация, -ftree-slp-векторизация, -fvect-стоимость-модель, -ftree-частичный-pre и
-fipa-cp-клон настройки.

-O0 Сократите время компиляции и сделайте отладку ожидаемой. Это
по умолчанию.

-Операционные системы Оптимизируйте по размеру. -Операционные системы позволяет всем -O2 оптимизации, которые обычно не увеличиваются
размер кода. Он также выполняет дальнейшую оптимизацию, предназначенную для уменьшения размера кода.

-Операционные системы отключает следующие флаги оптимизации: -falign-функции -falign-прыжки
-falign-петли -falign-label -freorder-блоки -freorder-блоки-и-раздел
-fprefetch-loop-массивы

-Быстро
Не соблюдайте строгие стандарты. -Быстро позволяет всем -O3 оптимизации. Это также
обеспечивает оптимизацию, которая не подходит для всех программ, соответствующих стандарту. Это
включается -ffast-математика и специфичный для Fortran -fno-защита паренс и -fstack-массивы.

-Ог Оптимизируйте отладку. -Ог позволяет оптимизации, которые не мешают
отладка. Это должен быть уровень оптимизации для стандартного редактирования -
цикл компиляции-отладки, предлагающий разумный уровень оптимизации при сохранении
быстрая компиляция и хороший опыт отладки.

Если вы используете несколько -O варианты, с номерами уровней или без них, последняя такая опция
тот, который эффективен.

Опции формы -fфлажок указать машинно-независимые флаги. Большинство флагов имеют оба
положительные и отрицательные формы; отрицательная форма -ффу is -фно-фу. В таблице ниже
В списке указана только одна из форм - та, которую вы обычно используете. Вы можете выяснить другое
форма путем удаления нет- или добавив его.

Следующие параметры управляют определенными оптимизациями. Они либо активируются -O
варианты или связаны с уже имеющимися. Вы можете использовать следующие флаги в редких случаях
случаи, когда желательна «тонкая настройка» оптимизаций.

-fno-дефер-поп
Всегда вставляйте аргументы для каждого вызова функции, как только эта функция возвращается. Для
машины, которые должны выдавать аргументы после вызова функции, компилятор обычно позволяет
аргументы накапливаются в стеке для нескольких вызовов функций и выталкивают их все в
один раз.

Отключено на уровнях -O, -O2, -O3, -Операционные системы.

-всегда-распространять
Выполните проход прямого распространения по RTL. Пас пытается объединить две инструкции
и проверяет, можно ли упростить результат. Если развертка цикла активна, два прохода
выполняются, а второй планируется после разворачивания цикла.

Эта опция включена по умолчанию на уровнях оптимизации. -O, -O2, -O3, -Операционные системы.

-ffp-contract =стиль
-ffp-contract = выключено отключает сжатие выражений с плавающей запятой. -ffp-contract = быстро
разрешает сжатие выражений с плавающей запятой, такое как формирование объединенного умножения-сложения
операции, если у цели есть встроенная поддержка для них. -ffp-contract = on позволяет
сокращение выражений с плавающей запятой, если это разрешено стандартом языка. Это
в настоящее время не реализовано и рассматривается как -ffp-contract = выключено.

По умолчанию используется -ffp-contract = быстро.

-fomit-frame-pointer
Не храните указатель фрейма в регистре для функций, которым он не нужен. Этот
избегает инструкций по сохранению, настройке и восстановлению указателей кадров; это также делает
дополнительный регистр доступен во многих функциях. It причислены создает отладка что она on
некоторые машины.

На некоторых машинах, таких как VAX, этот флаг не действует, потому что стандартный
вызывающая последовательность автоматически обрабатывает указатель кадра, и ничего не сохраняется
делая вид, что его не существует. Макрос описания машины "FRAME_POINTER_REQUIRED"
контролирует, поддерживает ли целевая машина этот флаг.

Начиная с GCC версии 4.6, настройка по умолчанию (без оптимизации по размеру) для
Цели 32-битных GNU / Linux x86 и 32-битных Darwin x86 были изменены на
-fomit-frame-pointer. Значение по умолчанию можно вернуть на -fno-опустить-указатель-кадра by
настройка GCC с - включить-указатель-кадра вариант настройки.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-foptimize-sibling-вызовы
Оптимизируйте одноуровневые и хвостовые рекурсивные вызовы.

Включено на уровнях -O2, -O3, -Операционные системы.

-fno-встроенный
Не расширяйте какие-либо встроенные функции, кроме отмеченных "always_inline"
атрибут. Это значение по умолчанию, когда не выполняется оптимизация.

Отдельные функции можно исключить из встраивания, пометив их знаком «noinline».
атрибутов.

-finline-small-функции
Интегрируйте функции в своих абонентов, когда их тело меньше, чем ожидалось
код вызова функции (поэтому общий размер программы становится меньше). Компилятор
эвристически решает, какие функции достаточно просты, чтобы их можно было интегрировать в
Сюда. Это встраивание применяется ко всем функциям, даже к тем, которые не объявлены встроенными.

Включено на уровне -O2.

-findirect-встраивание
Встроенные также косвенные вызовы, которые обнаруживаются во время компиляции благодаря
предыдущее встраивание. Этот параметр имеет какой-либо эффект только тогда, когда включена сама встраивание.
не провела обыск -finline-функции or -finline-small-функции настройки.

Включено на уровне -O2.

-finline-функции
Рассмотрите все функции для встраивания, даже если они не объявлены встроенными. В
компилятор эвристически решает, какие функции стоит интегрировать таким образом.

Если все вызовы данной функции интегрированы, и функция объявлена
"static", то функция обычно не выводится как собственный код ассемблера.

Включено на уровне -O3.

-finline-функции-вызываемые-один раз
Рассмотрим все "статические" функции, вызываемые один раз для встраивания в их вызывающий объект, даже если
они не помечены как «встроенные». Если вызов данной функции интегрирован, то
функция не выводится как код ассемблера сама по себе.

Включено на уровнях -O1, -O2, -O3 и -Операционные системы.

опасно встраивание
Встроенные функции, отмеченные "always_inline", и функции, тело которых кажется меньше, чем
накладные расходы на вызов функции раньше, чем делать -fprofile-генерировать приборы и
реальный проход встраивания. Это значительно удешевляет профилирование и, как правило,
встраивание быстрее в программы, имеющие большие цепочки вложенных функций-оболочек.

Включено по умолчанию.

-фипа-сра
Выполнить межпроцедурную скалярную замену агрегатов, удаление неиспользуемых параметров
и замена параметров, переданных по ссылке, параметрами, переданными по значению.

Включено на уровнях -O2, -O3 и -Операционные системы.

-finline-limit =n
По умолчанию GCC ограничивает размер функций, которые могут быть встроены. Этот флаг позволяет
грубый контроль этого предела. n размер функций, которые могут быть встроены в
количество псевдоинструкций.

Встраивание фактически контролируется рядом параметров, которые могут быть указаны
индивидуально, используя --парам имя=ценностное , -finline-limit =n опция устанавливает некоторые из
эти параметры следующие:

макс-встроенный-insns-одиночный
на n/ 2.

макс-встроенный-insns-авто
на n/ 2.

См. Ниже документацию по отдельным параметрам, управляющим встраиванием и
для значений этих параметров по умолчанию.

Примечание: может быть бесполезно -finline-лимит что приводит к поведению по умолчанию.

Примечание: псевдо-инструкция представляет в данном конкретном контексте абстрактную
измерение размера функции. Это никоим образом не представляет собой количество сборок
инструкции и, как таковые, его точное значение может измениться от одного выпуска к другому.
другой.

-fno-keep-inline-dllexport
Это более детальная версия -fkeep-встроенные функции, что относится только к
функции, объявленные с использованием атрибута dllexport или declspec

-fkeep-встроенные функции
В C испускайте "статические" функции, которые объявлены "встроенными" в объектный файл, даже если
функция встроена во все вызывающие объекты. Этот переключатель не влияет
функции, использующие расширение "extern inline" в GNU C90. В C ++ испускайте все и вся
встроенные функции в объектный файл.

-fkeep-статические-константы
Создавать переменные, объявленные "static const", когда оптимизация не включена, даже если
переменные не упоминаются.

GCC включает эту опцию по умолчанию. Если вы хотите заставить компилятор проверять, есть ли
на переменную, независимо от того, включена ли оптимизация или нет, используйте
-fno-keep-static-consts опцию.

-fmerge-константы
Попытка объединить идентичные константы (строковые константы и константы с плавающей запятой)
через единицы компиляции.

Этот параметр используется по умолчанию для оптимизированной компиляции, если ассемблер и компоновщик
поддержите это. Использовать -fno-merge-константы чтобы воспрепятствовать такому поведению.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fmerge-все-константы
Попытка объединить идентичные константы и идентичные переменные.

Этот вариант подразумевает -fmerge-константы, В дополнение к -fmerge-константы этой
рассматривает, например, даже постоянные инициализированные массивы или инициализированные постоянные переменные с
целочисленные типы или типы с плавающей запятой. Такие языки, как C или C ++, требуют каждой переменной,
включение нескольких экземпляров одной и той же переменной в рекурсивные вызовы, чтобы иметь разные
местоположений, поэтому использование этого параметра приводит к несоответствующему поведению.

-fmodulo-sched
Выполните планирование по модулю качания непосредственно перед первым проходом планирования. Этот
pass смотрит на самые внутренние циклы и меняет порядок их инструкций, перекрывая разные
итераций.

-fmodulo-sched-allow-regmoves
Выполняйте более агрессивное планирование по модулю на основе SMS с разрешенными перемещениями регистров. К
установка этого флага удаляет определенные грани антизависимости, что запускает
генерация рег-ходов на основе анализа жизненного цикла. Этот вариант эффективен
только с -fmodulo-sched включен.

-fno-Branch-count-reg
Не используйте инструкции «декремента и ветвления» для счетного регистра, а вместо этого
генерировать последовательность инструкций, которые уменьшают регистр, сравнивать его с
ноль, затем переходите в зависимости от результата. Эта опция имеет смысл только на
архитектуры, поддерживающие такие инструкции, включая x86, PowerPC, IA-64 и
S / 390.

По умолчанию используется -fbranch-count-reg.

-fno-функция-cse
Не помещайте адреса функций в регистры; сделать каждую инструкцию, которая вызывает
Константа функция явно содержит адрес функции.

Эта опция приводит к менее эффективному коду, но к некоторым странным хакам, которые изменяют
вывод ассемблера может быть запутан оптимизацией, выполненной, когда эта опция
не используется.

По умолчанию используется -функция-cse

-fno-ноль-инициализирован-в-bss
Если цель поддерживает раздел BSS, GCC по умолчанию помещает переменные, которые
инициализируется нулем в BSS. Это может сэкономить место в результирующем коде.

Этот параметр отключает такое поведение, поскольку некоторые программы явно полагаются на переменные.
переход в раздел данных --- например, чтобы получившийся исполняемый файл мог найти
начало этого раздела и / или делать предположения на его основе.

По умолчанию используется -fzero-инициализирован-в-bss.

-fthread-прыжки
Выполните оптимизацию, чтобы проверить, не разветвляется ли прыжок в место, где
найдено сравнение, относящееся к первому. Если это так, первая ветвь перенаправляется на
либо пункт назначения второй ветви, либо точка, следующая сразу за ней,
в зависимости от того, является ли условие истинным или ложным.

Включено на уровнях -O2, -O3, -Операционные системы.

-fsplit-широкие-типы
При использовании типа, который занимает несколько регистров, например "long long" на 32-битном
системы, разделите регистры и распределите их независимо. Это обычно
генерирует лучший код для этих типов, но может затруднить отладку.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fcse-следовать-прыжки
В общем исключении подвыражения (CSE) сканирование инструкций перехода, когда
цель прыжка не достигнута никаким другим путем. Например, когда CSE обнаруживает
оператор «if» с предложением «else», CSE следует за переходом, когда условие
проверено ложно.

Включено на уровнях -O2, -O3, -Операционные системы.

-fcse-skip-блоки
Это похоже на -fcse-следовать-прыжки, но заставляет CSE следовать прыжкам, которые
условно пропускать блоки. Когда CSE встречает простой оператор «если» без
еще пункт, -fcse-skip-блоки заставляет CSE следовать за прыжком вокруг тела
"если".

Включено на уровнях -O2, -O3, -Операционные системы.

-frerun-cse-после-петля
Повторно запустите исключение общих подвыражений после выполнения оптимизации цикла.

Включено на уровнях -O2, -O3, -Операционные системы.

-fgcse
Выполните глобальный проход исключения общих подвыражений. Этот проход также выполняет
глобальная константа и распространение копий.

Примечание: При компиляции программы с использованием вычисляемых gotos, расширения GCC, вы можете получить
лучшая производительность во время выполнения, если вы отключите глобальное исключение общих подвыражений
пройти, добавив -fno-gcse в командную строку.

Включено на уровнях -O2, -O3, -Операционные системы.

-fgcse-lm
После появления -fgcse-lm включен, глобальное исключение общего подвыражения пытается переместить
грузы, которые убивают только магазины в себя. Это позволяет создать цикл, содержащий
последовательность загрузки / сохранения должна быть изменена на загрузку вне цикла и копирование / сохранение в пределах
петля.

Включено по умолчанию, когда -fgcse включен.

-fgcse-см
После появления -fgcse-см включен, проход движения магазина запускается после глобального общего
исключение подвыражения. Этот проход пытается вывести магазины из петель. При использовании
в сочетании с -fgcse-lm, циклы, содержащие последовательность загрузки / сохранения, могут быть изменены
загрузке перед циклом и сохранению после цикла.

Не включен ни на одном уровне оптимизации.

-fgcse-las
После появления -fgcse-las включен, глобальный общий проход исключения подвыражения
устраняет избыточные нагрузки, которые приходят после сохранения в одну и ту же ячейку памяти (обе
частичное и полное резервирование).

Не включен ни на одном уровне оптимизации.

-fgcse-после перезагрузки
После появления -fgcse-после перезагрузки включен, выполняется этап устранения избыточной нагрузки
после перезагрузки. Цель этого прохода - очистить лишние разливы.

-faggressive-loop-оптимизации
Этот параметр указывает оптимизатору цикла использовать языковые ограничения для получения границ для
количество итераций цикла. Предполагается, что код цикла не вызывает
неопределенное поведение, например, вызывая переполнение целого числа со знаком или выход за пределы
доступ к массиву. Границы количества итераций цикла используются для определения
оптимизация развертки и отслаивания петли и выхода из петли. Эта опция включена
по умолчанию.

-funsafe-loop-оптимизации
Эта опция указывает оптимизатору цикла предположить, что индексы цикла не переполняются, и
что циклы с нетривиальным условием выхода не бесконечны. Это позволяет расширить
диапазон оптимизаций цикла, даже если сам оптимизатор цикла не может доказать, что эти
предположения верны. Если вы используете -Wunsafe-loop-оптимизации, компилятор предупреждает вас
если он обнаружит такую ​​петлю.

-fcrossjumping
Выполните перекрестное преобразование. Это преобразование объединяет эквивалентный код и
экономит размер кода. Результирующий код может работать или не работать лучше, чем без перекрестного
прыжки.

Включено на уровнях -O2, -O3, -Операционные системы.

-fauto-inc-dec
Комбинируйте увеличение или уменьшение адресов с обращениями к памяти. Этот пропуск
всегда пропускается на архитектурах, для которых нет инструкций по поддержке этого.
Включено по умолчанию в -O и выше на архитектурах, которые это поддерживают.

-fdce
Выполните устранение мертвого кода (DCE) на RTL. Включено по умолчанию в -O и выше.

-fdse
Выполните устранение мертвого хранилища (DSE) на RTL. Включено по умолчанию в -O и выше.

-fif-преобразование
Попытка преобразовать условные переходы в эквиваленты без ветвей. Это включает
использование условных ходов, минимума, максимума, флагов установки и инструкций abs, а также некоторых трюков
выполнимо стандартной арифметикой. Использование условного исполнения на чипах, где оно есть
доступность контролируется "if-конверсией2".

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fif-преобразование2
Используйте условное выполнение (если возможно) для преобразования условных переходов в
безветвленные эквиваленты.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fdeclone-ctor-dtor
C ++ ABI требует нескольких точек входа для конструкторов и деструкторов: одна для
базовый подобъект, один для полного объекта и один для виртуального деструктора, который вызывает
оператор удалить впоследствии. Для иерархии с виртуальными базами базовый и полный
варианты являются клонами, что означает две копии функции. С этой опцией
базовый и полный варианты заменены на преобразователи, вызывающие общую реализацию.

Включено -Операционные системы.

-fdelete-проверка нулевого указателя
Предположим, что программы не могут безопасно разыменовать нулевые указатели и что никакой код или данные
элемент находится там. Это позволяет выполнить простую оптимизацию сворачивания констант вообще.
уровни оптимизации. Кроме того, другие проходы оптимизации в GCC используют этот флаг для
управлять глобальным анализом потока данных, исключающим бесполезные проверки на нулевые указатели;
они предполагают, что если указатель проверяется после того, как он уже был разыменован, он
не может быть нулевым.

Однако обратите внимание, что в некоторых средах это предположение неверно. Использовать
-fno-delete-null-указатель-проверяет чтобы отключить эту оптимизацию для программ, зависящих от
на такое поведение.

Некоторые цели, особенно встроенные, отключают эту опцию на всех уровнях. Иначе
он включен на всех уровнях: -O0, -O1, -O2, -O3, -Операционные системы. Пропуска, использующие информацию
включаются независимо на разных уровнях оптимизации.

-fдевиртуализовать
Попытка преобразовать вызовы виртуальных функций в прямые вызовы. Это сделано как
внутри процедуры и межпроцедурно как часть непрямого встраивания
("-findirect-inlining") и межпроцедурное распространение констант (-fipa-cp). Включено
на уровнях -O2, -O3, -Операционные системы.

-fdevirtualize-спекулятивно
Попытка преобразовать вызовы виртуальных функций в спекулятивные прямые вызовы. На основе
анализ графа наследования типов, определение для заданного вызова набора
вероятные цели. Если набор небольшой, желательно размера 1, измените вызов на
условное решение о прямом и косвенном звонке. Спекулятивные звонки позволяют больше
оптимизации, такие как встраивание. Когда после дальнейшей оптимизации они кажутся бесполезными,
они преобразуются обратно в исходную форму.

-файловые-оптимизации
Выполните ряд незначительных оптимизаций, которые относительно дороги.

Включено на уровнях -O2, -O3, -Операционные системы.

-свободно
Попытайтесь удалить повторяющиеся инструкции расширения. Это особенно полезно для
архитектура x86-64, которая неявно расширяется нулями в 64-битных регистрах после
запись в их нижнюю 32-битную половину.

Включено для Alpha, AArch64 и x86 на уровнях -O2, -O3, -Операционные системы.

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

-прокрутка-усадка
Попытка уменьшить регистровое давление за счет сокращения рабочего диапазона регистра. Это
полезно для быстрых процессоров с небольшими или средними наборами регистров.

-fira-algorithm =алгоритм
Используйте указанный алгоритм окраски для встроенного распределителя регистров. В
алгоритм аргумент может быть приоритет, который определяет приоритетную окраску Чоу, или CB,
задающий раскраску Чайтина-Бриггса. Раскраска Чайтина-Бриггса не реализована.
для всех архитектур, но для тех целей, которые его поддерживают, это значение по умолчанию
потому что он генерирует лучший код.

-fira-region =область
Используйте указанные регионы для интегрированного распределителя регистров. В область аргумент
должно быть одним из следующих:

ВСЕ Используйте все шлейфы как регионы размещения регистров. Это может дать наилучшие результаты для
машины с малым и / или нерегулярным набором регистров.

смешанный
В качестве областей используйте все петли, за исключением петель с небольшим давлением регистра. Этот
value обычно дает наилучшие результаты в большинстве случаев и для большинства архитектур, и
включен по умолчанию при компиляции с оптимизацией по скорости (-O, -O2...).

one Используйте все функции как единый регион. Обычно это приводит к наименьшему размеру кода.
размер и включен по умолчанию для -Операционные системы or -O0.

-фира-подъемник-давление
Используйте IRA для оценки давления регистрации в проходе подъема кода для принятия решений о подъеме
выражения. Этот вариант обычно приводит к уменьшению размера кода, но может замедлить
компилятор выключен.

Эта опция включена на уровне -Операционные системы для всех целей.

-фира-петля-давление
Используйте IRA для оценки давления в контурах для принятия решений о перемещении инвариантов контура.
Эта опция обычно приводит к генерации более быстрого и меньшего кода на машинах с
большие файлы регистров (> = 32 регистров), но это может замедлить работу компилятора.

Эта опция включена на уровне -O3 для некоторых целей.

-fno-ira-share-save-слоты
Отключить совместное использование слотов стека, используемых для сохранения используемых жестких регистров вызовов
вызов. Каждый жесткий регистр получает отдельный слот стека, и в результате стек функций
кадры больше.

-fno-ira-share-spill-слоты
Отключить совместное использование слотов стека, выделенных для псевдорегистров. Каждый псевдорегистратор
который не получает жесткий регистр, получает отдельный слот стека, и в результате функция
кадры стека больше.

-fira-verbose =n
Управляйте уровнем детализации файла дампа для встроенного распределителя регистров. В
значение по умолчанию - 5. Если значение n больше или равно 10, вывод дампа отправляется
в stderr, используя тот же формат, что и n минус 10.

-fdelayed-ветка
Если поддерживается для целевой машины, попробуйте изменить порядок инструкций для использования
слоты инструкций доступны после инструкций отложенного перехода.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fschedule-insns
Если поддерживается для целевой машины, попробуйте изменить порядок инструкций, чтобы исключить
выполнение останавливается из-за недоступности необходимых данных. Это помогает машинам, которые
иметь медленные инструкции загрузки с плавающей запятой или памяти, позволяя другим инструкциям
выдается до тех пор, пока не потребуется результат загрузки или инструкции с плавающей запятой.

Включено на уровнях -O2, -O3.

-fschedule-insns2
Похожий на что -fschedule-insns, но запрашивает дополнительный проход планирования инструкций
после того, как было выполнено распределение регистров. Это особенно полезно на машинах с
относительно небольшое количество регистров и где инструкции загрузки памяти занимают больше, чем
один цикл.

Включено на уровнях -O2, -O3, -Операционные системы.

-fno-sched-межблок
Не распределяйте инструкции по базовым блокам. Обычно это включено по умолчанию.
при планировании перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 or
выше.

-fno-sched-spec
Не допускайте спекулятивного движения ненагруженных инструкций. Обычно это включается
по умолчанию при планировании перед распределением регистров, т. е. с -fschedule-insns или, по крайней
-O2 или выше.

-fsched-давление
Включите планирование insn с учетом давления регистров перед распределением регистров. Этот
имеет смысл только при включении планирования до выделения регистров, т. е. с
-fschedule-insns или, по крайней -O2 или выше. Использование этой опции может улучшить генерируемые
код и уменьшите его размер, не допуская увеличения давления в регистре выше числа
доступных жестких регистров и последующие разливы в распределении регистров.

-fsched-спецификация-нагрузка
Разрешить спекулятивное движение некоторых инструкций по загрузке. Это имеет смысл только тогда, когда
планирование перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 или выше.

-fsched-spec-load-опасно
Разрешить спекулятивное движение большего количества инструкций по загрузке. Это имеет смысл только тогда, когда
планирование перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 или выше.

-fsched-заглохли-insns
-fsched-stalled-insns =n
Определите, сколько insns (если есть) можно преждевременно переместить из очереди остановленных
insns в список готовности во время второго прохода планирования. -fno-sched-stated-insns
означает, что никакие insns не перемещаются преждевременно, -fsched-stalled-insns = 0 означает, что нет
ограничение на то, сколько insns в очереди можно переместить преждевременно. -fsched-заглохли-insns
без значения эквивалентно -fsched-stalled-insns = 1.

-fsched-заглохло-insns-dep
-fsched-stalled-insns-dep =n
Определите, сколько групп insn (циклов) проверяется на зависимость от остановившегося insn.
то есть кандидат на досрочное удаление из очереди зависших инснов. Это
эффект только во время второго прохода планирования, и только если -fsched-заглохли-insns is
используемый. -fno-sched-стоп-insns-деп эквивалентна -fsched-stalled-insns-dep = 0.
-fsched-заглохло-insns-dep без значения эквивалентно
-fsched-stalled-insns-dep = 1.

-fsched2-использовать-суперблоки
При планировании после распределения регистров используйте планирование суперблоков. Это позволяет
движение через границы основных блоков, что приводит к более быстрому расписанию. Этот вариант
экспериментальный, так как не все описания машин, используемые GCC, достаточно точно моделируют процессор
чтобы избежать ненадежных результатов работы алгоритма.

Это имеет смысл только при планировании после распределения регистров, т.е.
-fschedule-insns2 или, по крайней -O2 или выше.

-fsched-group-эвристика
Включите групповую эвристику в планировщике. Эта эвристика благоприятствует инструкции
который принадлежит к группе расписания. Это включено по умолчанию, когда расписание
включен, то есть с -fschedule-insns or -fschedule-insns2 или, по крайней -O2 или выше.

-fsched-критический-эвристический путь
Включите эвристику критического пути в планировщике. Эта эвристическая благосклонность
инструкции по критическому пути. Это включено по умолчанию, когда расписание
включен, то есть с -fschedule-insns or -fschedule-insns2 или, по крайней -O2 или выше.

-fsched-spec-insn-эвристика
Включите эвристику спекулятивных инструкций в планировщике. Эта эвристическая благосклонность
спекулятивные инструкции с большей слабостью зависимости. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-fsched-rank-эвристика
Включите эвристику ранжирования в планировщике. Эта эвристика благоприятствует инструкции
принадлежащий базовому блоку с большим размером или частотой. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-fsched-last-insn-эвристика
Включите эвристику последней инструкции в планировщике. Эта эвристика благоприятствует
инструкция, которая меньше зависит от последней запланированной инструкции. Это включено
по умолчанию, когда включено планирование, т.е. -fschedule-insns or -fschedule-insns2
или, по крайней -O2 или выше.

-fsched-деп-счет-эвристика
Включите эвристику зависимого подсчета в планировщике. Эта эвристика благоприятствует
инструкция, в которой есть больше инструкций в зависимости от нее. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-freschedule-по модулю-расписанию-циклов
Планирование по модулю выполняется перед традиционным планированием. Если цикл по модулю
запланированный, более поздние проходы планирования могут изменить его расписание. Используйте эту опцию, чтобы
контролировать это поведение.

-fselective-планирование
Составьте инструкции с использованием алгоритма выборочного планирования. Выборочное планирование запусков
вместо первого прохода планировщика.

-fвыборочное-планирование2
Составьте инструкции с использованием алгоритма выборочного планирования. Выборочное планирование запусков
вместо второго прохода планировщика.

-fsel-sched-конвейерная обработка
Включите программную конвейерную обработку самых внутренних циклов во время выборочного планирования. Этот
опция не имеет эффекта, если одна из -fselective-планирование or -fвыборочное-планирование2
.

-fsel-sched-pipelining-external-петли
При конвейерной обработке петель во время выборочного планирования также конвейерные внешние петли. Этот
опция не имеет эффекта, если -fsel-sched-конвейерная обработка .

-fshrink-обертка
Выделяйте прологи функции только перед теми частями функции, которые в этом нуждаются, а не в
верх функции. Этот флаг установлен по умолчанию на -O и выше.

-fcaller-сохраняет
Разрешить присвоение значений регистрам, которые затираются вызовами функций,
выдача дополнительных инструкций для сохранения и восстановления регистров вокруг таких вызовов. Такой
распределение выполняется только тогда, когда кажется, что это приводит к лучшему коду.

Эта опция всегда включена по умолчанию на определенных машинах, обычно на тех, на которых
вместо них нет регистров с сохранением вызовов.

Включено на уровнях -O2, -O3, -Операционные системы.

-fcombine-stack-Adjustments
Отслеживает корректировки стека (нажатия и выталкивания) и ссылки на память стека, а затем пытается
найти способы их комбинировать.

Включено по умолчанию в -O1 и выше.

-fconserve-стек
Попытка минимизировать использование стека. Компилятор пытается использовать меньше места в стеке, даже
если это замедлит работу программы. Этот вариант подразумевает установку крупногабаритная рама
параметр на 100 и рост кадра большого стека параметр до 400.

-ftree-reassoc
Выполните повторную ассоциацию на деревьях. Этот флаг установлен по умолчанию на -O и выше.

-free-pre
Выполните частичное устранение избыточности (PRE) на деревьях. Этот флаг включен
по умолчанию в -O2 и -O3.

-ftree-частичный-pre
Сделайте частичное устранение избыточности (PRE) более агрессивным. Этот флаг включен
по умолчанию в -O3.

-ftree-forwprop
Выполните прямое распространение на деревьях. Этот флаг установлен по умолчанию на -O и
выше.

-free-fre
Выполните полное устранение избыточности (FRE) на деревьях. Разница между FRE и
PRE заключается в том, что FRE рассматривает только выражения, которые вычисляются на всех путях, ведущих к
избыточное вычисление. Этот анализ выполняется быстрее, чем PRE, но выявляет меньше
дублирование. Этот флаг установлен по умолчанию на -O и выше.

-ftree-phiprop
Выполнять подъем грузов по условным указателям на деревья. Этот проход включен
по умолчанию в -O и выше.

-fhoist-смежные-нагрузки
Спекулятивно поднимайте грузы из обеих ветвей if-then-else, если грузы из
соседние местоположения в той же структуре, и целевая архитектура имеет условную
инструкция по перемещению. Этот флаг установлен по умолчанию на -O2 и выше.

-ftree-copy-prop
Выполните копирование на деревьях. Этот проход исключает ненужные операции копирования.
Этот флаг установлен по умолчанию на -O и выше.

-fipa-чистый-const
Узнайте, какие функции являются чистыми или постоянными. Включено по умолчанию в -O и выше.

-fipa-ссылка
Узнайте, какие статические переменные не выходят из модуля компиляции. Включено
по умолчанию в -O и выше.

-фипа-пта
Выполните межпроцедурный анализ указателя и межпроцедурную модификацию, а также
справочный анализ. Этот параметр может привести к чрезмерному использованию памяти и времени компиляции на
большие единицы компиляции. По умолчанию он не включен ни на одном уровне оптимизации.

-fipa-профиль
Выполните межпроцедурное распространение профиля. Функции, вызываемые только с холода
функции отмечены как холодные. Также однократно выполняемые функции (например, «холодный»,
"noreturn", статические конструкторы или деструкторы). Холодные функции и
После этого выполняемые один раз части функций без цикла оптимизируются по размеру. Включено
по умолчанию в -O и выше.

-fipa-cp
Выполните межпроцедурное постоянное распространение. Эта оптимизация анализирует программу
чтобы определить, когда значения, передаваемые функциям, являются константами, а затем оптимизирует
соответственно. Эта оптимизация может существенно повысить производительность, если
приложение имеет константы, переданные функциям. Этот флаг установлен по умолчанию на
-O2, -Операционные системы и -O3.

-fipa-cp-клон
Выполните клонирование функций, чтобы усилить межпроцедурное распространение констант. Когда
включено, межпроцедурное распространение констант выполняет клонирование функции, когда
внешне видимая функция может быть вызвана с постоянными аргументами. Потому что это
оптимизация может создавать несколько копий функций, это может значительно увеличить
размер кода (см. --парам ipcp-unit-рост =ценностное ). Этот флаг установлен по умолчанию на
-O3.

-fisolate-ошибочные-пути-разыменование
Обнаруживать пути, которые вызывают ошибочное или неопределенное поведение из-за разыменования
ПУСТОЙ указатель. Изолируйте эти пути от основного потока управления и включите выражение
с ошибочным или неопределенным поведением в ловушку.

-fisolate-ошибочные-пути-атрибут
Обнаруживать пути, которые вызывают ошибочное или неопределенное поведение из-за того, что значение NULL
используется способом, который запрещен атрибутом "returns_nonnull" или "nonnull".
Изолируйте эти пути от основного потока управления и превратите утверждение с ошибочным
или неопределенное поведение в ловушку. В настоящее время это не включено, но может быть включено
"-O2" в будущем.

-дерево-раковина
Выполните движение магазина вперед по деревьям. Этот флаг установлен по умолчанию на -O и
выше.

-ftree-bit-ccp
Выполнение разреженного условного распространения битовой константы на деревьях и распространение указателя
информация о выравнивании. Этот проход работает только с локальными скалярными переменными и
включен по умолчанию в -O и выше. Это требует, чтобы -ftree-ccp включен.

-ftree-ccp
Выполнение разреженного распространения условных констант (CCP) на деревьях. Только этот проход
работает с локальными скалярными переменными и по умолчанию включен в -O и выше.

-бесплатное переключение-преобразование
Выполните преобразование простых инициализаций в переключателе в инициализации из
скалярный массив. Этот флаг установлен по умолчанию на -O2 и выше.

-ftree-tail слияние
Ищите идентичные кодовые последовательности. Когда найдете, замените один прыжком на другой.
Эта оптимизация известна как слияние хвостов или перекрестный прыжок. Этот флаг включен
по умолчанию в -O2 и выше. Время компиляции на этом проходе можно ограничить с помощью
макс-хвост-слияние-сравнения параметр и макс-хвост-слияние-итераций Параметр.

-ftree-dce
Выполните устранение мертвого кода (DCE) на деревьях. Этот флаг установлен по умолчанию на -O
и выше.

-ftree-встроенный-вызов-dce
Выполните условное исключение мертвого кода (DCE) для вызовов встроенных функций, которые
может установить "errno", но в остальном не имеет побочных эффектов. Этот флаг включен по умолчанию
at -O2 и выше, если -Операционные системы тоже не указано.

-ftree-доминатор-opts
Выполнение множества простых скалярных чисток (распространение констант / копий, избыточность
исключение, распространение диапазона и упрощение выражения) на основе доминатора
обход дерева. Это также выполняет резку скачков (чтобы свести переходы к переходам). Этот
флаг включен по умолчанию в -O и выше.

-ftree-dse
Выполните ликвидацию мертвого магазина (DSE) на деревьях. Мертвый магазин - это магазин в памяти
местоположение, которое позже будет перезаписано другим магазином без каких-либо промежуточных загрузок. В
в этом случае предыдущее хранилище может быть удалено. Этот флаг установлен по умолчанию на -O и
выше.

-футри-ч
Выполните копирование заголовка цикла на деревьях. Это полезно, так как увеличивает
эффективность оптимизации движения кода. Также это экономит один прыжок. Этот флаг
включен по умолчанию в -O и выше. Он не включен для -Операционные системы, так как обычно
увеличивает размер кода.

-ftree-loop-оптимизировать
Оптимизируйте цикл для деревьев. Этот флаг установлен по умолчанию на -O и
выше.

-бв-петля-линейный
Выполните преобразования обмена циклами на дереве. Такой же как -флоп-развязка. Использовать
это преобразование кода, GCC должен быть настроен с --with-ppl и --with-cloog в
включить инфраструктуру преобразования контура Graphite.

-флоп-развязка
Выполняйте преобразования обмена циклами в циклах. Замена двух вложенных циклов
переключает внутренний и внешний контуры. Например, для такого цикла:

ДО J = 1, M
ДО I = 1, Н
A (J, I) = A (J, I) * C
КОНЕЦ
КОНЕЦ

Обмен циклами преобразует цикл, как если бы он был написан:

ДО I = 1, Н
ДО J = 1, M
A (J, I) = A (J, I) * C
КОНЕЦ
КОНЕЦ

что может быть полезно, когда "N" больше, чем кеш, потому что в Фортране
элементы массива хранятся в памяти последовательно по столбцам, а исходные
цикл перебирает строки, потенциально создавая при каждом доступе промах в кэше. Этот
оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-фуп-стрип-мина
Выполнение преобразований извлечения данных по полосе петель на петлях. Полоса добычи разделяет петлю на
две вложенные петли. На внешней петле есть шаги, равные размеру полосы, а на внутренней
Петля имеет шаги исходной петли внутри полосы. Длину полосы можно изменить
используя петля-блок-размер плитки параметр. Например, для такого цикла:

ДО I = 1, Н
А (I) = А (I) + С
КОНЕЦ

Анализ полосы цикла преобразует цикл, как если бы он был написан:

ДО II = 1, N, 51
DO I = II, мин (II + 50, N)
А (I) = А (I) + С
КОНЕЦ
КОНЕЦ

Эта оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-floop-блок
Выполнение преобразований блокировки цикла в циклах. Блокирующая полоса минует каждую петлю в
гнездо циклов таким образом, чтобы обращения к памяти для циклов элементов помещались внутри кешей. В
длину полосы можно изменить с помощью петля-блок-размер плитки параметр. Например,
учитывая цикл вроде:

ДО I = 1, Н
ДО J = 1, M
A (J, I) = B (I) + C (J)
КОНЕЦ
КОНЕЦ

Блокировка цикла преобразует цикл, как если бы он был написан:

ДО II = 1, N, 51
ДО JJ = 1, M, 51
DO I = II, мин (II + 50, N)
DO J = JJ, мин (JJ + 50, M)
A (J, I) = B (I) + C (J)
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ

что может быть полезно, когда "M" больше, чем кеши, потому что самый внутренний цикл
выполняет итерацию по меньшему количеству данных, которые могут храниться в кэшах. Этот
оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-fgraphite-идентичность
Включите преобразование идентичности для графита. Для каждого SCoP мы генерируем
полиэдральное представление и преобразовать его обратно в простое. С использованием -fgraphite-идентичность
мы можем проверить затраты или преимущества преобразования GIMPLE -> GRAPHITE -> GIMPLE.
Некоторые минимальные оптимизации также выполняются генератором кода CLooG, например index
расщепление и устранение мертвого кода в циклах.

-floop-гнездо-оптимизировать
Включите оптимизатор вложенности циклов на основе ISL. Это универсальный оптимизатор гнезда циклов, основанный на
об алгоритмах оптимизации Плутона. Он рассчитывает структуру цикла, оптимизированную для
локальность данных и параллелизм. Это экспериментальный вариант.

-floop-parallelize-все
Используйте анализ зависимости данных Graphite, чтобы определить циклы, которые можно распараллелить.
Распараллелить все циклы, которые могут быть проанализированы, чтобы не содержать зависимостей, переносимых циклами.
не проверяя, выгодно ли распараллеливать циклы.

-fcheck-data-deps
Сравните результаты нескольких анализаторов зависимости данных. Эта опция используется для
отладка анализаторов зависимостей данных.

-ftree-loop-если-преобразовать
Попытка преобразовать условные переходы в самых внутренних циклах в безветвленные
эквиваленты. Цель состоит в том, чтобы удалить поток управления из самых внутренних циклов, чтобы
чтобы улучшить способность прохода векторизации обрабатывать эти циклы. Это
включен по умолчанию, если включена векторизация.

-ftree-loop-если-конвертировать-хранит
Попытка также выполнить if-convert условных переходов, содержащих записи в память. Этот
преобразование может быть небезопасным для многопоточных программ, поскольку оно преобразует условные
память записывает в безусловную запись в память. Например,

для (я = 0; я <N; я ++)
если (усл.)
A [i] = expr;

превращается в

для (я = 0; я <N; я ++)
A [i] = cond? expr: A [i];

потенциально производящие гонки данных.

Распределение без петель
Выполните распределение петель. Этот флаг может улучшить производительность кеширования на больших телах цикла.
и разрешить дальнейшую оптимизацию цикла, такую ​​как распараллеливание или векторизация,
место. Например, петля

ДО I = 1, Н
А (I) = В (I) + С
D (I) = E (I) * F
КОНЕЦ

превращается в

ДО I = 1, Н
А (I) = В (I) + С
КОНЕЦ
ДО I = 1, Н
D (I) = E (I) * F
КОНЕЦ

-ftree-loop-распространять шаблоны
Выполнение циклического распределения шаблонов, которые могут быть сгенерированы кодом с вызовами
библиотека. Этот флаг установлен по умолчанию на -O3.

Этот проход распределяет циклы инициализации и генерирует вызов memset zero.
Например, петля

ДО I = 1, Н
A (I) = 0
B (I) = A (I) + I
КОНЕЦ

превращается в

ДО I = 1, Н
A (I) = 0
КОНЕЦ
ДО I = 1, Н
B (I) = A (I) + I
КОНЕЦ

и цикл инициализации преобразуется в вызов memset zero.

-ftree-loop-им
Выполните инвариантное движение петли на деревьях. Этот проход перемещает только сложные инварианты.
для обработки на уровне RTL (вызовы функций, операции, которые расширяются до нетривиальных последовательностей
инснс). С участием -funswitch-петли он также перемещает операнды условий, которые
инвариантен вне цикла, так что мы можем использовать только тривиальный анализ инвариантности в
петля отключающая. Пропуск также включает движение магазина.

-ftree-loop-ivcanon
Создайте канонический счетчик количества итераций в циклах, для которых определяется
количество итераций требует сложного анализа. Дальнейшие оптимизации могут
легко определить номер. Особенно полезно при развертывании.

-фивопты
Выполните оптимизацию индукционных переменных (снижение прочности, индукционные переменные).
слияние и индукционное исключение переменных) на деревьях.

-ftree-parallelize-loops = п
Распараллеливайте циклы, т. Е. Разделяйте их итерационное пространство для выполнения в n потоках. Это
возможно только для циклов, чьи итерации независимы и могут быть произвольно
переупорядочен. Оптимизация выгодна только на многопроцессорных машинах, для циклов
которые интенсивно загружают процессор, а не ограничиваются, например, пропускной способностью памяти. Этот вариант
подразумевает -pthread, и поэтому поддерживается только для целей, которые поддерживают
-pthread.

-ftree-pta
Выполните анализ локальных функций на деревьях. Этот флаг включен по умолчанию
at -O и выше.

-ftree-сра
Выполните скалярную замену агрегатов. Этот проход заменяет ссылки на структуру
со скалярами, чтобы предотвратить слишком раннюю фиксацию структур в памяти. Этот флаг
включен по умолчанию в -O и выше.

-ftree-copyrename
Выполните переименование копий на деревьях. Этот проход пытается переименовать временные библиотеки компилятора в
другие переменные в местах копирования, что обычно приводит к именам переменных, которые более
очень похожи на исходные переменные. Этот флаг установлен по умолчанию на -O и
выше.

-ftree-coalesce-inline-vars
Сообщите пропуску copyrename (см. -ftree-copyrename), чтобы попытаться объединить маленьких пользователей-
определенные переменные тоже, но только если они были встроены из других функций. Это
более ограниченная форма -ftree-coalesce-vars. Это может повредить отладочную информацию таких
встроенные переменные, но он сохранит переменные встроенной функции отдельно от
друг друга, так что они с большей вероятностью будут содержать ожидаемые значения в
сеанс отладки. Это было по умолчанию в версиях GCC старше 4.7.

-ftree-coalesce-vars
Сообщите пропуску copyrename (см. -ftree-copyrename), чтобы попытаться объединить маленьких пользователей-
также определены переменные, а не только временные файлы компилятора. Это может серьезно ограничить
возможность отладки оптимизированной программы, скомпилированной с -fno-var-отслеживание-присваивания.
В инвертированной форме этот флаг предотвращает объединение пользовательских переменных SSA, включая
встроенные. Эта опция включена по умолчанию.

-дерево-тер
Выполните временную замену выражения во время фазы SSA-> normal. Одинокий
временные конструкции use / single заменяются в месте их использования с их определяющими
выражение. Это приводит к не-GIMPLE-коду, но дает экспандерам гораздо больше
сложные деревья, над которыми нужно работать, в результате улучшается генерация RTL. Это обеспечивается
по умолчанию в -O и выше.

-ftree-slsr
Выполните прямолинейное снижение прочности на деревьях. Это признает связанные
выражения, включающие умножения и заменяющие их менее дорогостоящими вычислениями
когда возможно. По умолчанию это включено в -O и выше.

-ftree-векторизация
Выполните векторизацию на деревьях. Этот флаг включает -ftree-loop-векторизация и
-ftree-slp-векторизация если не указано явно.

-ftree-loop-векторизация
Выполните векторизацию цикла на деревьях. Этот флаг установлен по умолчанию на -O3 и когда
-ftree-векторизация включен.

-ftree-slp-векторизация
Выполните базовую блочную векторизацию на деревьях. Этот флаг установлен по умолчанию на -O3 и
когда -ftree-векторизация включен.

-fvect-cost-model =модель
Измените модель затрат, используемую для векторизации. В модель аргумент должен быть одним из
«безлимитный», «динамичный» или «дешевый». В «неограниченной» модели векторизованный код -
путь считается прибыльным, в то время как с "динамической" моделью проверка выполнения будет
охранять векторизованный путь кода, чтобы включить его только для счетчиков итераций, которые, вероятно,
выполняется быстрее, чем при выполнении исходного скалярного цикла. «Дешевая» модель будет
отключить векторизацию циклов, например, если это будет стоить непомерно дорого
из-за обязательных проверок времени выполнения на зависимость или выравнивание данных, но в остальном равно
к «динамической» модели. Модель стоимости по умолчанию зависит от других флагов оптимизации.
и бывает либо «динамичным», либо «дешевым».

-fsimd-cost-model =модель
Измените модель затрат, используемую для векторизации циклов, отмеченных OpenMP или Cilk.
Плюс директива simd. В модель аргумент должен быть одним из следующих: «неограниченный», «динамический»,
"дешевый". Все ценности модель имеют то же значение, что и -fvect-стоимость-модель
и по умолчанию модель затрат, определенная с помощью -fvect-стоимость-модель используется.

-ftree-vrp
Выполните распространение диапазона значений на деревьях. Это похоже на постоянное распространение
проходят, но вместо значений распространяются диапазоны значений. Это позволяет
оптимизаторы для удаления ненужных проверок диапазона, таких как проверки границ массива и нулевой указатель
чеки. По умолчанию это включено в -O2 и выше. Устранение проверки нулевого указателя
делается только если -fdelete-проверка нулевого указателя включен.

-фтрейсер
Выполните дублирование хвоста, чтобы увеличить размер суперблока. Это преобразование упрощает
поток управления функции, позволяющий другим оптимизациям выполнять свою работу лучше.

-фунролл-петли
Циклы развертывания, количество итераций которых может быть определено во время компиляции или после
вход в цикл. -фунролл-петли подразумевает -frerun-cse-после-петля. Эта опция делает
код больше, и может или не может заставить его работать быстрее.

-фунролл-все-петли
Разверните все циклы, даже если их количество итераций неизвестно, когда цикл
вошел. Обычно это заставляет программы работать медленнее. -фунролл-все-петли подразумевает
те же варианты, что и -фунролл-петли,

-fsplit-ivs-in-unroller
Позволяет выражать значения индукционных переменных в более поздних итерациях
развернутый цикл с использованием значения в первой итерации. Это ломает долгую зависимость
цепочки, тем самым повышая эффективность проходов планирования.

Сочетание -fвеб и CSE часто бывает достаточно для получения того же эффекта.
Однако это ненадежно в тех случаях, когда тело цикла сложнее, чем
единый базовый блок. Он также не работает на некоторых архитектурах из-за
ограничения в прохождении CSE.

Эта оптимизация включена по умолчанию.

-fvariable-extension-in-unroller
С этой опцией компилятор создает несколько копий некоторых локальных переменных, когда
разворачивание цикла, что может привести к получению превосходного кода.

-fpartial-встраивание
Встроенные части функций. Эта опция имеет какой-либо эффект только в том случае, если сама встраивание
включен -finline-функции or -finline-small-функции настройки.

Включено на уровне -O2.

-fpredictive-обобщение
Выполните прогнозирующую оптимизацию объединения, т. Е. Повторное использование вычислений (особенно
загрузка и сохранение памяти), выполненные в предыдущих итерациях циклов.

Эта опция включена на уровне -O3.

-fprefetch-loop-массивы
Если поддерживается целевой машиной, сгенерируйте инструкции для предварительной выборки памяти в
повысить производительность циклов, обращающихся к большим массивам.

Эта опция может генерировать лучший или худший код; результаты сильно зависят от
структура циклов в исходном коде.

Отключено на уровне -Операционные системы.

-фно-глазок
-фно-глазок2
Отключите любую оптимизацию глазка для конкретной машины. Разница между
-фно-глазок и -фно-глазок2 в том, как они реализованы в компиляторе; некоторые
цели используют один, некоторые используют другой, некоторые используют оба.

-глазок по умолчанию включен. -fглазок2 включен на уровнях -O2, -O3, -Операционные системы.

-fno-guess-branch-вероятность
Не пытайтесь угадывать вероятности перехода с помощью эвристики.

GCC использует эвристику, чтобы угадать вероятности ветвления, если они не предоставлены
обратная связь по профилированию (-fprofile-дуги). Эти эвристики основаны на потоке управления
график. Если некоторые вероятности ветвления заданы __builtin_expect, то
эвристика используется, чтобы угадать вероятности ветвления для остальной части потока управления
график, взяв __builtin_expect информация во внимание. Взаимодействие между
эвристика и __builtin_expect может быть сложным, и в некоторых случаях может быть полезно
отключите эвристику, чтобы эффекты __builtin_expect легче
Понимаю.

По умолчанию используется -fguess-ветвь-вероятность на уровнях -O, -O2, -O3, -Операционные системы.

-freorder-блоки
Переупорядочить базовые блоки в скомпилированной функции, чтобы уменьшить количество взятых
ветки и улучшить локальность кода.

Включено на уровнях -O2, -O3.

-freorder-блоки-и-раздел
В дополнение к переупорядочиванию базовых блоков в скомпилированной функции, чтобы уменьшить
количество взятых ответвлений, перегородок горячих и холодных опорных блоков на отдельные секции
сборки и файлов .o, чтобы повысить производительность подкачки и локализации кэша.

Эта оптимизация автоматически отключается при наличии обработки исключений,
для разделов linkonce, для функций с определенным пользователем атрибутом раздела и для любых
архитектура, не поддерживающая именованные разделы.

Включено для x86 на уровнях -O2, -O3.

-freorder-функции
Измените порядок функций в объектном файле, чтобы улучшить локальность кода. Это
реализовано с помощью специальных подразделов ".text.hot" для наиболее часто выполняемых
functions и ".text.unlikely" для маловероятно выполняемых функций. Изменение порядка осуществляется
компоновщик, поэтому формат объектного файла должен поддерживать именованные разделы, а компоновщик должен размещать
их разумным образом.

Также должна быть доступна обратная связь с профилем, чтобы этот параметр работал. Видеть
-fprofile-дуги для получения информации.

Включено на уровнях -O2, -O3, -Операционные системы.

-fstrict-псевдоним
Разрешить компилятору принять самые строгие правила псевдонима, применимые к языку.
компилируется. Для C (и C ++) это активирует оптимизацию в зависимости от типа
выражения. В частности, предполагается, что объект одного типа никогда не находится в
тот же адрес, что и у объекта другого типа, если только типы почти не совпадают.
Например, «unsigned int» может быть псевдонимом «int», но не «void *» или «double». А
Тип символа может быть псевдонимом любого другого типа.

Обратите особое внимание на такой код:

союз a_union {
инт я;
двойной d;
};

int f () {
союз a_union т;
td = 3.0;
return ti;
}

Практика чтения от другого члена профсоюза, чем тот, который был последним
написано (так называемое "набирание текста") является обычным явлением. Даже с -fstrict-псевдоним, тип-
каламбур разрешен при условии, что доступ к памяти осуществляется через тип объединения. Так что
приведенный выше код работает должным образом. Однако этот код не может:

int f () {
союз a_union т;
int * ip;
td = 3.0;
ip = & t.i;
return * ip;
}

Точно так же доступ, взяв адрес, приведя результирующий указатель и
разыменование результата имеет неопределенное поведение, даже если приведение использует тип объединения,
например:

int f () {
двойной d = 3.0;
return ((объединение a_union *) & d) -> i;
}

Команда -fstrict-псевдоним опция включена на уровнях -O2, -O3, -Операционные системы.

-fstrict-переполнение
Разрешить компилятору принять строгие подписанные правила переполнения в зависимости от языка
компилируется. Для C (и C ++) это означает переполнение при выполнении арифметических операций с
числа со знаком не определены, что означает, что компилятор может предположить, что он не
случаться. Это позволяет проводить различные оптимизации. Например, компилятор предполагает, что
выражение типа «i + 10> i» всегда верно для подписанного «i». Это предположение
допустимо, только если подписанное переполнение не определено, так как выражение ложно, если "i + 10"
переполняется при использовании арифметики с дополнением до двух. Когда действует эта опция, любой
попытаться определить, должна ли быть записана операция по переполнению чисел со знаком
осторожно, чтобы не допустить переполнения.

Этот параметр также позволяет компилятору использовать строгую семантику указателя: при заданном
указатель на объект, если добавление смещения к этому указателю не создает указатель
к тому же объекту добавление не определено. Это позволяет компилятору сделать вывод
что «p + u> p» всегда верно для указателя «p» и беззнакового целого «u». Этот
допущение действительно только потому, что перенос указателя не определен, так как выражение
false, если "p + u" переполняется с использованием арифметики с дополнением до двух.

См. Также -fwrapv вариант. С использованием -fwrapv означает, что целочисленное подписанное переполнение
полностью определен: он оборачивается. Когда -fwrapv используется, нет никакой разницы между
-fstrict-переполнение и -fno-строго-переполнение для целых чисел. С участием -fwrapv определенные типы
переполнения допускаются. Например, если компилятор получает переполнение при выполнении
арифметика с константами, переполненное значение все еще можно использовать с -fwrapv, Но не
в противном случае.

Команда -fstrict-переполнение опция включена на уровнях -O2, -O3, -Операционные системы.

-falign-функции
-falign-functions =n
Совместите начало функций со следующей степенью двойки больше, чем n, переходя до n
байтов. Например, -falign-functions = 32 выравнивает функции по следующим 32 байтам
граница, но -falign-functions = 24 выравнивается по следующей 32-байтовой границе, только если это
можно сделать, пропустив 23 байта или меньше.

-fno-align-функции и -falign-functions = 1 эквивалентны и означают, что функции
не выровнены.

Некоторые ассемблеры поддерживают этот флаг только тогда, когда n это степень двойки; в этом случае это
округлен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-falign-label
-falign-labels =n
Выровняйте все целевые объекты ветвления по границе, равной степени двойки, пропуская до n байты вроде
-falign-функции. Этот параметр может легко замедлить код, потому что он должен вставлять
фиктивные операции, когда цель перехода достигается в обычном потоке кода.

-fno-align-label и -falign-labels = 1 эквивалентны и означают, что метки не
выровнен.

If -falign-петли or -falign-прыжки применимы и больше этого значения, то
вместо них используются их значения.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию, которое очень вероятно
быть 1, что означает отсутствие выравнивания.

Включено на уровнях -O2, -O3.

-falign-петли
-falign-loops =n
Выровняйте петли по границе степени двойки, пропуская до n байты вроде -falign-функции.
Если циклы выполняются много раз, это компенсирует любое выполнение манекена.
операций.

-fno-align-лупы и -falign-loops = 1 эквивалентны и означают, что петли не
выровнен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-falign-прыжки
-falign-jumps =n
Выровняйте цели ветвления по границе, равной степени двойки, для целей ветвления, где цели
можно добраться только прыгнув, пропустив до n байты вроде -falign-функции. В
В этом случае фиктивные операции выполнять не нужно.

-fno-выравнивание-прыжки и -falign-jumps = 1 эквивалентны и означают, что петли не
выровнен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-Функция за раз
Этот вариант оставлен по соображениям совместимости. -Функция за раз не имеет никакого эффекта, в то время как
-fno-unit-a-time подразумевает -fno-верхний уровень-переупорядочить и -fno-section-анкеры.

Включено по умолчанию.

-fno-верхний уровень-переупорядочить
Не меняйте порядок функций верхнего уровня, переменных и операторов asm. Выведите их в
в том же порядке, в котором они появляются во входном файле. Когда используется эта опция,
статические переменные, на которые нет ссылок, не удаляются. Эта опция предназначена для поддержки
существующий код, основанный на определенном порядке. Для нового кода лучше использовать
атрибуты, когда это возможно.

Включено на уровне -O0. При явном отключении это также подразумевает -fno-section-анкеры,
который в противном случае включен в -O0 по некоторым целям.

-fвеб
Создает сети, которые обычно используются для целей распределения регистров, и назначает каждую сеть
индивидуальный псевдорегистратор. Это позволяет проходу выделения регистров работать с
псевдо напрямую, но также усиливает несколько других проходов оптимизации, таких как CSE,
оптимизатор цикла и тривиальный инструмент для удаления мертвого кода. Однако он может выполнять отладку
невозможно, поскольку переменные больше не остаются в «домашнем регистре».

Включено по умолчанию с помощью -фунролл-петли.

-fwhole-программа
Предположим, что текущая единица компиляции представляет собой всю компилируемую программу.
Все общедоступные функции и переменные, за исключением "основных" и тех, которые объединены
атрибут "external_visible" становится статической функцией и, по сути, оптимизируется
более агрессивно межпроцедурными оптимизаторами.

Этот параметр не следует использовать в сочетании с «-flto». Вместо того, чтобы полагаться на
Плагин компоновщика должен предоставлять более безопасную и точную информацию.

-flto [=n]
Эта опция запускает стандартный оптимизатор времени компоновки. При вызове с исходным кодом он
генерирует GIMPLE (одно из внутренних представлений GCC) и записывает его в специальный ELF
разделы в объектном файле. Когда объектные файлы связаны вместе, все
тела функций считываются из этих разделов ELF и создаются, как если бы они были
часть той же единицы перевода.

Чтобы использовать оптимизатор времени компоновки, -флто и варианты оптимизации должны быть указаны в
время компиляции и во время последней ссылки. Например:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Первые два вызова GCC сохраняют представление GIMPLE в виде байт-кода в специальном
Разделы ELF внутри фу.о и бар.о. Последний вызов читает байт-код GIMPLE.
от фу.о и бар.о, объединяет два файла в единый внутренний образ и компилирует
результат как обычно. Поскольку оба фу.о и бар.о объединены в одно изображение, это
заставляет весь межпроцедурный анализ и оптимизацию в GCC работать через
два файла, как если бы они были одним. Это означает, например, что вкладыш
возможность встраивать функции в бар.о в функции в фу.о и наоборот.

Другой (более простой) способ включить оптимизацию времени компоновки:

gcc -o myprog -flto -O2 foo.c bar.c

Вышеупомянутый генерирует байт-код для foo.c и бар.с, объединяет их в один
GIMPLE и оптимизирует их, как обычно, для производства моя прога.

Единственная важная вещь, о которой следует помнить, - чтобы включить оптимизацию времени компоновки, вы
необходимо использовать драйвер GCC для выполнения шага связывания. Затем GCC автоматически выполняет
оптимизация времени компоновки, если какой-либо из задействованных объектов был скомпилирован с -флто.
Обычно вам следует указать параметры оптимизации, которые будут использоваться для времени ссылки
оптимизация, хотя GCC будет стараться угадывать уровень оптимизации для использования
из параметров, используемых во время компиляции, если вы не указали один во время компоновки. Ты
всегда может отменить автоматическое решение об оптимизации времени компоновки во время компоновки
мимоходом -фно-лто к команде ссылки.

Чтобы оптимизация всей программы была эффективной, необходимо
программные предположения. Компилятору необходимо знать, какие функции и переменные могут быть
доступ к ним осуществляется библиотеками и средой выполнения за пределами модуля, оптимизированного во время компоновки. Когда
поддерживается компоновщиком, подключаемым модулем компоновщика (см. -fuse-linker-плагин) проходит
информация компилятору об используемых и видимых извне символах. Когда
плагин компоновщика недоступен, -fwhole-программа следует использовать, чтобы компилятор
делать эти предположения, что приводит к более агрессивным оптимизационным решениям.

После появления -fuse-linker-плагин не включается тогда, когда файл компилируется с -флто,
сгенерированный объектный файл больше обычного объектного файла, потому что он содержит GIMPLE
байт-коды и обычный финальный код (см. -ffat-lto-объекты. Это означает, что объект
файлы с информацией LTO могут быть связаны как обычные объектные файлы; если -фно-лто передается
к компоновщику не применяются межпроцедурные оптимизации. Обратите внимание, что когда
-fno-fat-lto-объекты включен этап компиляции быстрее, но вы не можете выполнить
обычная, не-LTO ссылка на них.

Кроме того, флаги оптимизации, используемые для компиляции отдельных файлов, не
обязательно связаны с теми, которые использовались во время ссылки. Например,

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

Это создает отдельные объектные файлы с неоптимизированным кодом ассемблера, но
результирующий двоичный моя прога оптимизирован на -O3. Если вместо этого последний двоичный файл будет
генерируется с -фно-лто, то моя прога не оптимизирован.

При создании окончательного двоичного файла GCC применяет оптимизацию времени компоновки только к тем
файлы, содержащие байт-код. Следовательно, вы можете смешивать и сопоставлять объектные файлы и
библиотеки с байт-кодами GIMPLE и конечным объектным кодом. GCC автоматически выбирает
какие файлы оптимизировать в режиме LTO и какие файлы связывать без дальнейшего
обработка.

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

Если вы не укажете вариант уровня оптимизации -O во время компоновки GCC будет
вычислить один на основе уровней оптимизации, используемых при компиляции объектных файлов.
Здесь победит высший уровень оптимизации.

В настоящее время следующие параметры и их настройки берутся из первого объектного файла.
которые явно указали это: -fPIC, -fpic, -fpie, -fобщий, -fисключения,
-fnon-call-исключения, -fgnu-тм и все -m целевые флаги.

Определенные флаги изменения ABI должны соответствовать во всех модулях компиляции и пытаться
чтобы переопределить это во время компоновки с конфликтующим значением, игнорируется. Это включает
такие варианты, как -freg-структура-возврат и -fpcc-структура-возврат.

Другие варианты, такие как -ffp-контракт, -fno-строго-переполнение, -fwrapv, -fno-trapv or
-fno-строгий-псевдоним передаются на этап связывания и консервативно объединяются
для конфликтующих единиц перевода. Конкретно -fno-строго-переполнение, -fwrapv и
-fno-trapv иметь приоритет и, например, -ffp-contract = выключено имеет приоритет над
-ffp-contract = быстро. Вы можете переопределить их во время линковки.

Рекомендуется скомпилировать все файлы, участвующие в одной ссылке, с помощью
те же параметры, а также укажите эти параметры во время ссылки.

Если LTO встречает объекты со связью C, объявленные с несовместимыми типами в отдельных
единицы перевода, которые необходимо связать вместе (неопределенное поведение в соответствии с ISO C99
6.2.7) может быть выдано нефатальное диагностическое сообщение. Поведение все еще не определено при запуске
время. Аналогичная диагностика может быть выставлена ​​для других языков.

Еще одна особенность LTO - возможность применять межпроцедурную оптимизацию.
на файлах, написанных на разных языках:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

Обратите внимание, что последняя ссылка выполняется с помощью г ++ чтобы получить библиотеки времени выполнения C ++ и
-лгфортран добавлен для получения библиотек времени выполнения Fortran. В общем, при смешивании
языков в режиме LTO следует использовать те же параметры команды ссылки, что и при смешивании
языков в обычной (не LTO) компиляции.

Если объектные файлы, содержащие байт-код GIMPLE, хранятся в архиве библиотеки, скажем,
libfoo.a, их можно извлечь и использовать в ссылке LTO, если вы используете
компоновщик с поддержкой плагинов. Чтобы создать статические библиотеки, подходящие для LTO, используйте gcc-ar
и gcc-ranlib вместо ar и «ранлиб»; показать символы объектных файлов с
Байт-код GIMPLE, используйте gcc-нм. Эти команды требуют, чтобы ar, ранлиб и nm , чему есть доказательства,
скомпилирован с поддержкой плагинов. Во время ссылки используйте флаг -fuse-linker-плагин в
убедитесь, что библиотека участвует в процессе оптимизации LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Когда подключаемый модуль компоновщика включен, компоновщик извлекает необходимые файлы GIMPLE из
libfoo.a и передает их работающему GCC, чтобы сделать их частью агрегированного
Изображение GIMPLE необходимо оптимизировать.

Если вы не используете компоновщик с поддержкой плагинов и / или не включаете компоновщик
плагин, затем объекты внутри libfoo.a извлекаются и связываются как обычно, но они
не участвуйте в процессе оптимизации LTO. Чтобы сделать статическую библиотеку
подходит как для оптимизации LTO, так и для обычного связывания, компилируйте свои объектные файлы с
-флто "-ffat-lto-объекты".

Оптимизация времени компоновки не требует присутствия всей программы для работы.
Если программа не требует экспорта каких-либо символов, можно комбинировать
-флто и -fwhole-программа чтобы позволить межпроцедурным оптимизаторам использовать больше
агрессивные предположения, которые могут привести к улучшению возможностей оптимизации. Использование
-fwhole-программа не требуется, когда подключаемый модуль компоновщика активен (см. -fuse-linker-плагин).

Текущая реализация LTO не пытается сгенерировать байт-код, который
переносится между разными типами хостов. Файлы байт-кода версируются и там
является строгой проверкой версии, поэтому файлы байт-кода, созданные в одной версии GCC, не будут
работать со старой или новой версией GCC.

Оптимизация времени компоновки не работает с генерацией отладочной информации.
Объединяя -флто -g в настоящее время является экспериментальным и, как ожидается, приведет к неожиданным результатам
результаты.

Если вы укажете необязательный n, оптимизация и генерация кода выполняются во время компоновки
выполняется параллельно с использованием n параллельные работы с использованием установленного сделать программу.
Переменная окружения ДЕЛАТЬ может использоваться для отмены используемой программы. По умолчанию
значение для n это 1.

Вы также можете указать -flto = сервер вакансий использовать режим сервера заданий GNU make для определения
количество параллельных работ. Это полезно, когда Makefile, вызывающий GCC, уже
выполняются параллельно. Вы должны добавить + к рецепту команды в родительском
Makefile, чтобы это работало. Этот вариант, вероятно, работает только в том случае, если ДЕЛАТЬ это GNU make.

-flto-partition =ALG
Укажите алгоритм разделения, используемый оптимизатором времени компоновки. Ценность
либо "1to1", чтобы указать разделение, отражающее исходные исходные файлы, либо
"сбалансированный", чтобы указать разделение на куски одинакового размера (когда это возможно) или
"max", чтобы создать новый раздел для каждого символа, где это возможно. Указание "нет" как
алгоритм полностью отключает разделение и потоковую передачу. Значение по умолчанию -
«сбалансированный». Хотя "1to1" можно использовать как обходной путь для различного упорядочивания кода.
проблем, максимальное разбиение предназначено только для внутреннего тестирования.

-flto-сжатие-уровень =n
Эта опция определяет уровень сжатия, используемый для написания на промежуточном языке.
в объектные файлы LTO и имеет смысл только в сочетании с режимом LTO (-флто).
Допустимые значения: от 0 (без сжатия) до 9 (максимальное сжатие). Ценности за пределами этого
диапазон ограничен либо 0, либо 9. Если опция не указана, по умолчанию используется сбалансированный
используется настройка сжатия.

-flto-отчет
Печатает отчет с внутренними подробностями о работе оптимизатора времени компоновки. В
содержание этого отчета варьируется от версии к версии. Он предназначен для использования в GCC.
разработчиков при обработке объектных файлов в режиме LTO (через -флто).

Отключено по умолчанию.

-flto-отчет-wpa
Подобно -flto-отчет, но печатать только для фазы WPA оптимизации времени соединения.

-fuse-linker-плагин
Позволяет использовать подключаемый модуль компоновщика во время оптимизации времени компоновки. Этот вариант полагается
о поддержке плагинов в компоновщике, который доступен в золоте или в GNU ld 2.21 или
новее.

Эта опция позволяет извлекать объектные файлы с байт-кодом GIMPLE из библиотеки.
архивы. Это улучшает качество оптимизации, открывая больше кода для ссылки -
оптимизатор времени. Эта информация определяет, к каким символам можно получить доступ извне.
(не-LTO объектом или во время динамического связывания). В результате улучшений качества кода на
двоичные файлы (и разделяемые библиотеки, использующие скрытую видимость) похожи на
"-fwhole-программа". Видеть -флто для описания эффекта этого флага и того, как
используй это.

Этот параметр включен по умолчанию, если включена поддержка LTO в GCC и GCC был
настроен для использования с подключаемыми модулями, поддерживающими компоновщик (GNU ld 2.21 или новее или золото).

-ffat-lto-объекты
Объекты Fat LTO - это объектные файлы, содержащие как промежуточный язык, так и
объектный код. Это делает их пригодными как для связывания LTO, так и для обычного связывания. Этот
опция эффективна только при компиляции с -флто и игнорируется во время ссылки.

-fno-fat-lto-объекты улучшает время компиляции по сравнению с обычным LTO, но требует
полный набор инструментов, чтобы быть в курсе LTO. Требуется компоновщик с поддержкой подключаемого модуля компоновщика.
для базовой функциональности. Кроме того, nm, ar и ранлиб нужно поддерживать компоновщик
плагины для создания полнофункциональной среды сборки (способной создавать статические
библиотеки и т. д.). GCC предоставляет gcc-ar, gcc-нм, gcc-ranlib обертки передать
правильные варианты этих инструментов. При использовании обезжиренных файлов LTO make-файлы необходимо модифицировать для использования
их.

По умолчанию используется -fno-fat-lto-объекты на целях с поддержкой подключаемого модуля компоновщика.

-fcompare-элим
После распределения регистров и разделения инструкций пострегистрового распределения, определите
арифметические инструкции, которые вычисляют флаги процессора, аналогично операции сравнения
на основе этой арифметики. Если возможно, исключите операцию явного сравнения.

Этот проход применяется только к определенным целям, которые не могут явно представлять
операция сравнения до завершения распределения регистров.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fuse-ld = bfd
Использовать BFD компоновщик вместо компоновщика по умолчанию.

-fuse-ld = золото
Использовать золото компоновщик вместо компоновщика по умолчанию.

-fcprop-регистры
После распределения регистров и разделения инструкций пострегистрового распределения выполните
проход копирования-распространения, чтобы попытаться уменьшить зависимости планирования и иногда
удалить копию.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fprofile-Correction
Профили, собранные с использованием инструментального двоичного кода для многопоточных программ, могут быть
непоследовательны из-за пропущенных обновлений счетчика. Когда этот параметр указан, GCC использует
эвристика для исправления или сглаживания таких несоответствий. По умолчанию GCC выдает
сообщение об ошибке при обнаружении несогласованного профиля.

-fprofile-dir =путь
Задайте каталог для поиска файлов данных профиля в путь. Этот вариант
влияет только на данные профиля, созданные -fprofile-генерировать, -ftest-охват,
-fprofile-дуги и используется -fprofile-использование и -fbranch-вероятности и связанные с ним
параметры. Могут использоваться как абсолютные, так и относительные пути. По умолчанию GCC использует
текущий каталог как путь, поэтому файл данных профиля появляется в том же каталоге, что и
объектный файл.

-fprofile-генерировать
-fprofile-generate =путь
Включите параметры, обычно используемые для измерительного приложения, чтобы получить полезный профиль
для последующей перекомпиляции с оптимизацией на основе отзывов профилей. Вы должны использовать
-fprofile-генерировать как при компиляции, так и при компоновке вашей программы.

Доступны следующие параметры: «-fprofile-arcs», «-fprofile-values», «-fvpt».

If путь указан, GCC смотрит на путь чтобы найти файлы данных обратной связи профиля.
Увидеть -fprofile-каталог.

-fprofile-использование
-fprofile-use =путь
Включите оптимизацию, направленную на обратную связь, и оптимизацию, как правило, прибыльную
только при наличии обратной связи с профилем.

Включены следующие параметры: "-fbranch-вероятности", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"ftree-loop-распространять-шаблоны"

По умолчанию GCC выдает сообщение об ошибке, если профили обратной связи не соответствуют
исходный код. Эту ошибку можно превратить в предупреждение, используя -Wcoverage-несоответствие.
Обратите внимание, что это может привести к плохо оптимизированному коду.

If путь указан, GCC смотрит на путь чтобы найти файлы данных обратной связи профиля.
Увидеть -fprofile-каталог.

Следующие параметры управляют поведением компилятора в отношении арифметики с плавающей запятой.
Эти параметры предлагают компромисс между скоростью и правильностью. Все должно быть специально включено.

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

Эта опция предотвращает нежелательную избыточную точность на таких станках, как 68000, где
регистры с плавающей запятой (68881) сохраняют большую точность, чем предполагается "двойной"
иметь. Аналогично для архитектуры x86. Для большинства программ избыточная точность
приносит только пользу, но некоторые программы полагаются на точное определение IEEE с плавающей точкой.
точка. Использовать -флот-магазин для таких программ, после их изменения для хранения всех
соответствующие промежуточные вычисления в переменных.

-fexcess-precision =стиль
Эта опция позволяет дополнительно контролировать избыточную точность на машинах с плавающей
точечные регистры имеют большую точность, чем типы IEEE "float" и "double", а также
процессор не поддерживает округление операций до этих типов. По умолчанию,
-fexcess-precision = быстро действует; это означает, что операции выполняются в
точность регистров и непредсказуемость при округлении до типов
указанное в исходном коде имеет место. При компиляции C, если
-fexcess-precision = стандарт указано, то избыточная точность следует правилам
указано в ISO C99; в частности, как приведение, так и присваивание приводят к тому, что значения
округлены до их семантических типов (тогда как -флот-магазин влияет только на назначения).
Этот параметр включен по умолчанию для C, если параметр строгого соответствия, например
-std = C99 используется.

-fexcess-precision = стандарт не реализован для языков, отличных от C, и не имеет
эффект, если -funsafe-математическая-оптимизация or -ffast-математика указан. На x86 это
также не действует, если -mfpmath = sse or -mfpmath = sse + 387 указан; в бывшем
В этом случае семантика IEEE применяется без лишней точности, и в последнем случае округление
непредсказуемы.

-ffast-математика
Наборы -fno-math-errno, -funsafe-математическая-оптимизация, -ffinite-math-only - только математика,
-fno-округление-математика, -fno-сигнализация-нанс и -fcx-ограниченный диапазон.

Эта опция вызывает определение макроса препроцессора «__FAST_MATH__».

Эта опция не включена ни одним -O вариант кроме -Быстро поскольку это может привести к
некорректный вывод для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

-fno-math-errno
Не устанавливайте "errno" после вызова математических функций, которые выполняются с одним
инструкция, например, «sqrt». Программа, использующая исключения IEEE для математических ошибок.
обработка может захотеть использовать этот флаг для скорости при сохранении арифметики IEEE
Совместимость.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

По умолчанию используется -fmath-ошибка.

В системах Дарвина математическая библиотека никогда не устанавливает "errno". Следовательно, нет причин
для компилятора, чтобы рассмотреть возможность, и -fno-math-errno это
по умолчанию.

-funsafe-математическая-оптимизация
Разрешить оптимизацию арифметики с плавающей запятой, которая (а) предполагает, что аргументы и
результаты действительны и (б) могут нарушать стандарты IEEE или ANSI. При использовании во время ссылки
он может включать библиотеки или файлы запуска, которые изменяют контрольное слово FPU по умолчанию или
другие подобные оптимизации.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций. Позволяет
-fno-знак-нули, -fno-ловушка-математика, -фассоциативная-математика и -freciprocal-математика.

По умолчанию используется -fno-unsafe-math-оптимизация.

-фассоциативная-математика
Разрешить повторное объединение операндов в серии операций с плавающей запятой. Этот
нарушает стандарты языка ISO C и C ++, возможно изменяя результат вычислений.
ПРИМЕЧАНИЕ: переупорядочивание может изменить знак нуля, а также игнорировать NaN и запретить или
создавать недополнение или переполнение (и, следовательно, не может использоваться в коде, который полагается на округление
поведение типа «(x + 2 ** 52) - 2 ** 52». Может также изменить порядок сравнений с плавающей запятой и
таким образом, не может использоваться, когда требуются упорядоченные сравнения. Этот вариант требует, чтобы
изоферменты печени -fno-знак-нули и -fno-ловушка-математика быть в силе. Более того, это не делает
много смысла с -frounding-математический. Для Фортрана опция автоматически включается, когда
изоферменты печени -fno-знак-нули и -fno-ловушка-математика действуют.

По умолчанию используется -fno-ассоциативная-математика.

-freciprocal-математика
Разрешить использование обратной величины значения вместо деления на значение, если это
позволяет оптимизации. Например, «x / y» можно заменить на «x * (1 / y)», что означает
полезно, если "(1 / y)" подлежит исключению из общего подвыражения. Обратите внимание, что это
теряет точность и увеличивает количество операций над значением.

По умолчанию используется -fno-взаимно-математика.

-ffinite-math-only - только математика
Разрешить оптимизацию арифметики с плавающей запятой, предполагающую, что аргументы и
результаты не являются NaN или + -Infs.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

По умолчанию используется -fno-только-конечная-математика.

-fno-знак-нули
Разрешить оптимизацию для арифметики с плавающей запятой, игнорирующую нулевое значение подписи.
Арифметика IEEE определяет поведение отдельных значений +0.0 и -0.0, которые затем
запрещает упрощение таких выражений, как x + 0.0 или 0.0 * x (даже с
-ffinite-math-only - только математика). Этот вариант подразумевает, что знак нулевого результата не
значительное.

По умолчанию используется -fsigned-нули.

-fno-ловушка-математика
Скомпилируйте код, предполагая, что операции с плавающей запятой не могут создавать видимые для пользователя
ловушки. Эти ловушки включают деление на ноль, переполнение, потеря значимости, неточный результат и
недопустимая операция. Этот вариант требует, чтобы -fno-сигнализация-нанс быть в силе.
Установка этой опции может позволить более быстрый код, если кто-то полагается на "непрерывную" арифметику IEEE,
например.

Эту опцию никогда не следует включать -O вариант, поскольку это может привести к
некорректный вывод для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций.

По умолчанию используется -фтраппинг-математика.

-frounding-математический
Отключить преобразования и оптимизации, предполагающие округление с плавающей запятой по умолчанию
поведение. Это округление до нуля для всех преобразований с плавающей запятой в целые числа, и
округление до ближайшего для всех остальных арифметических усечений. Этот вариант должен быть
указан для программ, которые динамически изменяют режим округления FP, или это может быть
выполняется с нестандартным режимом округления. Эта опция отключает постоянное сворачивание
выражения с плавающей запятой во время компиляции (на которые может повлиять режим округления)
и арифметические преобразования, которые небезопасны при наличии знакозависимых
режимы округления.

По умолчанию используется -fno-округление-математика.

Этот вариант является экспериментальным и в настоящее время не гарантирует отключения всех GCC.
оптимизации, на которые влияет режим округления. Будущие версии GCC могут предоставлять
более точное управление этим параметром с помощью прагмы C99 "FENV_ACCESS". Эта командная строка
опция будет использоваться для определения состояния по умолчанию для «FENV_ACCESS».

-fsignaling-Nans
Компиляция кода предполагает, что NaN сигнализации IEEE могут генерировать видимые пользователем ловушки во время
операции с плавающей запятой. Установка этого параметра отключает оптимизацию, которая может изменить
количество исключений, видимых с сигнальными NaN. Этот вариант подразумевает
-фтраппинг-математика.

Эта опция вызывает определение макроса препроцессора «__SUPPORT_SNAN__».

По умолчанию используется -fno-сигнализация-нанс.

Этот вариант является экспериментальным и в настоящее время не гарантирует отключения всех GCC.
оптимизации, влияющие на сигнальное поведение NaN.

-fsingle-точность-константа
Рассматривайте константы с плавающей запятой как одинарную точность вместо неявного преобразования
их к константам двойной точности.

-fcx-ограниченный диапазон
Когда этот параметр включен, этот параметр указывает, что шаг уменьшения диапазона не требуется, когда
выполнение сложного деления. Кроме того, не проверяется, является ли результат
сложное умножение или деление "NaN + I * NaN" с попыткой спасти
ситуация в таком случае. По умолчанию -fno-cx-ограниченный диапазон, но включен
-ffast-математика.

Этот параметр управляет настройкой по умолчанию прагмы ISO C99 «CX_LIMITED_RANGE».
Тем не менее, опция применима ко всем языкам.

-fcx-фортран-правила
Сложное умножение и деление подчиняются правилам Фортрана. Снижение дальности осуществляется как
часть сложного деления, но не проверяется, является ли результат сложного
умножение или деление "NaN + I * NaN", с попыткой спасти ситуацию
в таком случае.

По умолчанию используется -fno-cx-фортран-правила.

Следующие параметры управляют оптимизацией, которая может улучшить производительность, но не
разрешено любым -O параметры. Этот раздел включает экспериментальные варианты, которые могут привести к
сломанный код.

-fbranch-вероятности
После запуска программы, скомпилированной с -fprofile-дуги, вы можете скомпилировать его второй раз
через -fbranch-вероятности, чтобы улучшить оптимизацию в зависимости от того, сколько раз
каждая ветка была взята. Когда программа скомпилирована с -fprofile-дуги выходит, это экономит
выполнение дуги засчитывается в файл с именем имя источника.gcda для каждого исходного файла. В
информация в этом файле данных очень зависит от структуры сгенерированного
код, поэтому вы должны использовать один и тот же исходный код и одинаковые параметры оптимизации для обоих
сборники.

В -fbranch-вероятности, GCC ставит REG_BR_PROB обратите внимание на каждый JUMP_INSN и
CALL_INSN. Их можно использовать для улучшения оптимизации. В настоящее время они используются только
в одном месте: в reorg.c, вместо того, чтобы угадывать, по какому пути ветвь, скорее всего, пойдет
взять, REG_BR_PROB значения используются, чтобы точно определить, какой путь используется больше
довольно часто.

-fprofile-значения
В сочетании с -fprofile-дуги, он добавляет код, чтобы некоторые данные о значениях
выражений в программе собрано.

В -fbranch-вероятности, он считывает данные, собранные из значений профилирования
выражения для использования в оптимизации.

Включено с -fprofile-генерировать и -fprofile-использование.

-fprofile-reorder-функции
Переупорядочивание функций на основе инструментария профиля собирает данные о первом выполнении
функции и упорядочивает эти функции в порядке возрастания.

Включено с -fprofile-использование.

-fvpt
В сочетании с -fprofile-дуги, этот параметр указывает компилятору добавить код в
собирать информацию о значениях выражений.

В -fbranch-вероятности, он считывает собранные данные и фактически выполняет
оптимизации на их основе. В настоящее время оптимизации включают специализацию
деление операций с использованием знания о значении знаменателя.

-frename-регистры
Попытка избежать ложных зависимостей в запланированном коде, используя оставшиеся регистры
после размещения регистров. Эта оптимизация наиболее выгодна процессорам с большим количеством
регистров. В зависимости от формата отладочной информации, принятого целью,
однако это может сделать отладку невозможной, поскольку переменные больше не остаются в "домашнем"
регистр".

Включено по умолчанию с помощью -фунролл-петли и -fpeel-петли.

-фтрейсер
Выполните дублирование хвоста, чтобы увеличить размер суперблока. Это преобразование упрощает
поток управления функции, позволяющий другим оптимизациям выполнять свою работу лучше.

Включено с -fprofile-использование.

-фунролл-петли
Циклы развертывания, количество итераций которых может быть определено во время компиляции или после
вход в цикл. -фунролл-петли подразумевает -frerun-cse-после-петля, -fвеб и
-frename-регистры. Он также включает полное отслаивание петли (т.е. полное удаление
циклы с небольшим постоянным числом итераций). Эта опция увеличивает размер кода и
может или не может заставить его работать быстрее.

Включено с -fprofile-использование.

-фунролл-все-петли
Разверните все циклы, даже если их количество итераций неизвестно, когда цикл
вошел. Обычно это заставляет программы работать медленнее. -фунролл-все-петли подразумевает
те же варианты, что и -фунролл-петли.

-fpeel-петли
Отдирает петли, по которым достаточно информации, что они не сильно скатываются (от
отзыв профиля). Он также включает полное отслаивание петли (т.е. полное удаление
циклы с малым постоянным числом итераций).

Включено с -fprofile-использование.

-fmove-loop-инварианты
Включает инвариантный проход движения цикла в оптимизаторе цикла RTL. Включено на уровне
-O1

-funswitch-петли
Переместите ветви с условиями инвариантного цикла из цикла, с дубликатами
цикл на обеих ветвях (изменяется в соответствии с результатом выполнения условия).

-функции-разделы
-fdata-разделы
Поместите каждую функцию или элемент данных в отдельный раздел в выходном файле, если цель
поддерживает произвольные разделы. Имя функции или имя элемента данных
определяет имя раздела в выходном файле.

Используйте эти параметры в системах, где компоновщик может выполнять оптимизацию для улучшения
место ссылки в пространстве инструкций. Большинство систем, использующих объект ELF
format и процессоры SPARC под управлением Solaris 2 имеют компоновщики с такой оптимизацией.
В AIX могут быть эти оптимизации в будущем.

Используйте эти параметры только тогда, когда это дает значительную выгоду. Когда ты
укажите эти параметры, ассемблер и компоновщик создают более крупный объект и исполняемый файл
файлы, а также медленнее. Если вы укажете это, вы не сможете использовать "gprof" во всех системах.
вариант, и у вас могут возникнуть проблемы с отладкой, если вы укажете и этот параметр, и
-g.

-fbranch-target-load-оптимизировать
Выполните оптимизацию загрузки целевого регистра ветвления перед потоковой передачей пролога / эпилога.
Использование целевых регистров обычно может быть раскрыто только во время перезагрузки, таким образом поднимая
загружается вне циклов, и выполнение межблочного планирования требует отдельной оптимизации
проходить.

-fbranch-target-load-optimize2
Выполните оптимизацию загрузки целевого регистра ветвления после распараллеливания пролога / эпилога.

-fbtr-bb-эксклюзивный
При выполнении оптимизации загрузки целевого регистра ветвления не используйте повторно цель ветвления.
регистры в любом базовом блоке.

-fstack-протектор
Выпустить дополнительный код для проверки переполнения буфера, например атак с разбиением стека. Этот
выполняется путем добавления охранной переменной к функциям с уязвимыми объектами. Этот
включает функции, вызывающие "alloca", и функции с буферами размером более 8 байтов.
Ограждения инициализируются при вводе функции, а затем проверяются, когда
функция завершается. Если проверка не удалась, печатается сообщение об ошибке и программа
выходы.

-fstack-протектор-все
Подобно -fstack-протектор за исключением того, что все функции защищены.

-fstack-протектор-сильный
Подобно -fstack-протектор но включает в себя дополнительные функции, которые необходимо защитить --- те
которые имеют определения локальных массивов или имеют ссылки на адреса локальных фреймов.

ПРИМЕЧАНИЕ. В Ubuntu 14.10 и более поздних версиях -fstack-протектор-сильный включен
по умолчанию для C, C ++, ObjC, ObjC ++, если ни один из -fno-стек-протектор, -nostdlib, ни
-Отдельные найдены.

-секция-анкеры
Постарайтесь уменьшить количество вычислений символьных адресов, используя общий "якорь"
символы для обозначения близлежащих объектов. Это преобразование может помочь уменьшить количество
записей GOT и доступов GOT для некоторых целей.

Например, реализация следующей функции «foo»:

статические int a, b, c;
int foo (void) {вернуть + b + c; }

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

int foo (недействительно)
{
зарегистрировать int * xr = & x;
return xr [& a - & x] + xr [& b - & x] + xr [& c - & x];
}

Не все цели поддерживают этот вариант.

--парам имя=ценностное
В некоторых местах GCC использует различные константы для управления степенью оптимизации, которая
сделано. Например, GCC не встраивает функции, содержащие более определенного
количество инструкций. Вы можете управлять некоторыми из этих констант в командной строке.
используя --парам опцию.

Имена конкретных параметров и значения значений привязаны к
внутренности компилятора и могут быть изменены без предварительного уведомления в будущем.
релизы.

В каждом случае ценностное целое число. Допустимые варианты для имя составляют:

предсказуемая ветвь-исход
Когда прогнозируется переход к переходу с вероятностью ниже этого порога
(в процентах), то считается вполне предсказуемым. По умолчанию 10.

max-crossjump-края
Максимальное количество входящих ребер, учитываемых при перекрестном прыжке. Алгоритм
используется -fcrossjumping равно O (N ^ 2) по количеству ребер, входящих в каждый блок.
Увеличение значений означает более агрессивную оптимизацию, сокращая время компиляции
увеличится, вероятно, с небольшим улучшением размера исполняемого файла.

min-crossjump-insns
Минимальное количество инструкций, которые должны быть сопоставлены в конце двух блоков
перед выполнением на них кросс-прыжков. Это значение игнорируется в случае
где сопоставляются все инструкции в блоке, из которого выполняется перекрестный переход. В
значение по умолчанию - 5.

макс-рост-копия-BB-insns
Максимальный коэффициент увеличения размера кода при копировании базовых блоков вместо
прыжки. Расширение относится к инструкции перехода. Значение по умолчанию -
8.

max-goto-дупликация-insns
Максимальное количество инструкций для дублирования в блок, который переходит к
вычисленный goto. Чтобы избежать поведения O (N ^ 2) за несколько проходов, GCC факторы
вычисляет gotos на ранних этапах процесса компиляции и восстанавливает их до
возможный. Только рассчитанные прыжки в конце базового блока с не более чем макс.
goto-duplication-insns не подвергаются сектору. Значение по умолчанию - 8.

Макс-задержка-слот-insn-поиск
Максимальное количество инструкций, которые следует учитывать при поиске инструкции для
заполните слот задержки. Если больше, чем это произвольное количество инструкций
поиске, экономия времени от заполнения слота задержки минимальна, поэтому остановитесь
поиск. Увеличение значений означает более агрессивную оптимизацию, в результате чего
увеличение времени компиляции с, вероятно, небольшим улучшением времени выполнения.

Макс-задержка-слот-живой-поиск
При попытке заполнить слоты задержки максимальное количество инструкций, которые следует учитывать
при поиске блока с действительной информацией живого регистра. Увеличение этого
произвольно выбранное значение означает более агрессивную оптимизацию, увеличивая
время компиляции. Этот параметр следует удалить, если установлен код слота задержки.
переписан для поддержки графа потока управления.

макс-gcse-память
Примерный максимальный объем памяти, который может быть выделен для выполнения
глобальная оптимизация исключения общих подвыражений. Если памяти больше, чем
указанное обязательно, оптимизация не производится.

макс-коэффициент вставки gcse
Если соотношение вставок и удалений выражений больше, чем это значение для
любое выражение, тогда RTL PRE вставляет или удаляет выражение и, таким образом, оставляет
частично избыточные вычисления в потоке команд. Значение по умолчанию -
20.

максимальная длина ожидающего списка
Планирование максимального количества ожидающих зависимостей позволяет перед сбросом
текущее состояние и начало заново. Большие функции с несколькими ветвями или вызовами могут
создавать слишком большие списки, которые без нужды потребляют память и ресурсы.

макс-по модулю-попыток возврата
Максимальное количество попыток возврата, которое планировщик должен сделать по модулю
планирование цикла. Большие значения могут экспоненциально увеличить время компиляции.

макс-встроенный-insns-одиночный
Несколько параметров управляют инлайнером дерева, используемым в GCC. Это число устанавливает
максимальное количество инструкций (подсчитанных во внутреннем представлении GCC) в
единственная функция, которую инлайнер дерева рассматривает для встраивания. Это влияет только на
функции, объявленные встроенными, и методы, реализованные в объявлении класса (C ++).
Значение по умолчанию - 400.

макс-встроенный-insns-авто
Когда вы используете весы для поддона -finline-функции (включен в -O3), множество функций, которые
иначе не будут рассматриваться для встраивания компилятором. К
эти функции, другой (более строгий) предел по сравнению с функциями
заявленный встроенный может быть применен. Значение по умолчанию - 40.

инлайн-мин-ускорение
Когда предполагаемое улучшение производительности среды выполнения вызывающего + вызываемого превышает это значение
порог (в процентах), функция может быть встроена независимо от ограничения на
--парам макс-встроенный-insns-одиночный и --парам макс-встроенный-insns-авто.

большие функции-insns
Предел, указывающий на действительно большие функции. Для функций, превышающих этот предел
после встраивания встраивание ограничивается --парам рост с большими функциями. Это
Параметр полезен в первую очередь, чтобы избежать чрезмерного времени компиляции, вызванного не-
линейные алгоритмы, используемые серверной частью. Значение по умолчанию - 2700.

рост с большими функциями
Задает максимальный рост большой функции за счет встраивания в процентах. В
значение по умолчанию - 100, что ограничивает рост большой функции до 2.0 раз по сравнению с исходным
размер.

большие блоки
Предел, указывающий на большую единицу перевода. Рост, вызванный встраиванием юнитов
больше, чем этот предел ограничен --парам встроенный-юнит-рост. Для небольших подразделений
это может быть слишком туго. Например, рассмотрим блок, состоящий из функции A
это встроенный и B, который просто вызывает A три раза. Если B мало относительно A,
прирост единицы составляет 300 \%, и все же такое встраивание очень разумно. Для очень больших
единицы, состоящие из небольших встроенных функций, однако общий рост единицы
ограничение необходимо, чтобы избежать экспоненциального увеличения размера кода. Таким образом, для меньшего
единиц, размер увеличен до --парам большие блоки перед применением --парам
встроенный-юнит-рост. По умолчанию 10000.

встроенный-юнит-рост
Задает максимальный общий рост единицы компиляции, вызванный встраиванием. В
значение по умолчанию - 30, что ограничивает рост единицы в 1.3 раза от исходного размера.

ipcp-unit-рост
Задает максимальный общий рост единицы компиляции, вызванный межпроцедурным
постоянное распространение. Значение по умолчанию - 10, что ограничивает рост единицы до 1.1.
раз больше исходного размера.

крупногабаритная рама
Предел, определяющий фреймы большого стека. При встраивании алгоритм пытается
чтобы не перерасти этот предел слишком сильно. Значение по умолчанию - 256 байт.

рост кадра большого стека
Задает максимальный рост фреймов большого стека за счет встраивания в процентах.
Значение по умолчанию - 1000, что ограничивает рост кадра большого стека до 11 раз больше
первоначальный размер.

макс-встроенный-insns-рекурсивный
Макс-встроенный-insns-рекурсивный-авто
Задает максимальное количество инструкций для автономной копии самостоятельной
Рекурсивная встроенная функция может перерасти в рекурсивную встроенную функцию.

Для функций, объявленных встроенными, --парам макс-встроенный-insns-рекурсивный принимается в
учетная запись. Для функций, не объявленных встроенными, рекурсивное встраивание происходит только тогда, когда
-finline-функции (включен в -O3) включен и --парам макс-встроенный-insns-
рекурсивно-авто используется. Значение по умолчанию - 450.

макс-строчная рекурсивная глубина
макс-встроенный-рекурсивный-глубина-авто
Задает максимальную глубину рекурсии, используемую для рекурсивного встраивания.

Для функций, объявленных встроенными, --парам макс-строчная рекурсивная глубина принимается в
учетная запись. Для функций, не объявленных встроенными, рекурсивное встраивание происходит только тогда, когда
-finline-функции (включен в -O3) включен и --парам макс-встроенный-рекурсивный-
глубина авто используется. Значение по умолчанию - 8.

минимальная встроенная рекурсивная вероятность
Рекурсивное встраивание выгодно только для функции, имеющей глубокую рекурсию в
среднее значение и может повредить функции, имеющей небольшую глубину рекурсии, из-за увеличения
размер пролога или сложность тела функции для других оптимизаторов.

Когда доступен отзыв профиля (см. -fprofile-генерировать) фактическая рекурсия
глубину можно угадать по вероятности того, что функция рекурсивно повторяется через данный вызов
выражение. Этот параметр ограничивает встраивание только для вызова выражений, чьи
вероятность превышает заданный порог (в процентах). Значение по умолчанию - 10.

раннее встраивание-insns
Укажите рост, который может произвести ранний вкладыш. Фактически это увеличивает количество
встраивания кода, имеющего большой штраф за абстракцию. Значение по умолчанию - 10.

max-Early-inliner-итераций
max-Early-inliner-итераций
Предел итераций раннего инлайнера. Это в основном ограничивает количество
вложенные косвенные вызовы, которые может разрешить ранний инлайнер. Более глубокие цепи все еще
обрабатывается поздним встраиванием.

comdat-sharing-вероятность
comdat-sharing-вероятность
Вероятность (в процентах) того, что встроенная функция C ++ с видимостью comdat
совместно используется несколькими единицами компиляции. Значение по умолчанию - 20.

min-vect-loop-привязанный
Минимальное количество итераций, при которых циклы не векторизуются, когда
-ftree-векторизация используется. Количество итераций после векторизации должно
быть больше значения, указанного в этом параметре, чтобы разрешить векторизацию. В
значение по умолчанию - 0.

gcse-стоимость-расстояние-соотношение
Коэффициент масштабирования при вычислении максимального расстояния, на которое выражение может быть перемещено
Оптимизация GCSE. В настоящее время это поддерживается только в проходе подъема кода.
Чем больше коэффициент, тем более агрессивным будет подъем кода с помощью простых
выражения, т. е. выражения, стоимость которых меньше, чем gcse-неограниченный-
стоят. Указание 0 отключает подъем простых выражений. Значение по умолчанию -
10.

gcse-неограниченная-стоимость
Стоимость, примерно измеряемая как стоимость одной типичной машинной инструкции, при
какие оптимизации GCSE не ограничивают расстояние, которое может пройти выражение.
В настоящее время это поддерживается только в проходе подъема кода. Чем меньше стоимость,
тем более агрессивный подъем кода. Указание 0 позволяет всем выражениям
путешествовать на неограниченные расстояния. Значение по умолчанию - 3.

максимальная глубина подъема
Глубина поиска в дереве доминаторов выражений, которые нужно поднять. Это используется
чтобы избежать квадратичного поведения в алгоритме подъема. Значение 0 не ограничивает
на поиске, но может замедлить компиляцию огромных функций. Значение по умолчанию
это 30.

макс-хвост-слияние-сравнения
Максимальное количество похожих BB для сравнения. Это используется, чтобы избежать
квадратичное поведение при слиянии хвостов дерева. Значение по умолчанию - 10.

макс-хвост-слияние-итераций
Максимальное количество итераций прохождения функции. Это используется для
ограничить время компиляции при слиянии хвостов дерева. Значение по умолчанию - 2.

Макс-развернутый-insns
Максимальное количество инструкций, которые может потребоваться развернуть цикл. Если петля
разворачивается, этот параметр также определяет, сколько раз код цикла
развернутый.

Макс-средний-развернутый-insns
Максимальное количество инструкций, зависящих от вероятностей их выполнения, которые
цикл, возможно, придется развернуть. Если цикл развернут, этот параметр также
определяет, сколько раз разворачивается код цикла.

максимальное время разворачивания
Максимальное количество разверток одной петли.

Макс-Пилед-Иннс
Максимальное количество инструкций, которые может потребоваться очистить цикл. Если петля
очищается, этот параметр также определяет, сколько раз очищается код цикла.

максимальное время отслаивания
Максимальное количество отслоений одной петли.

макс-кожура-ветки
Максимальное количество ветвей на горячем пути через очищенную последовательность.

макс-полностью очищенные-insns
Максимальное количество петель полностью очищенной петли.

максимальное время полного отслаивания
Максимальное количество итераций цикла, подходящее для полной очистки.

макс-полностью-отслоить-петлю-глубину гнезда
Максимальная глубина петлевого гнезда, подходящая для полного отслаивания.

макс-unswitch-insns
Максимальное количество insns некоммутируемого шлейфа.

максимальный уровень отключения
Максимальное количество неотключаемых ветвей в одном шлейфе.

Лим-дорогой
Минимальная стоимость дорогостоящего выражения в цикле инвариантного движения.

iv-рассмотреть-всех-кандидатов-связанных
Ограничено числом кандидатов в индукционные переменные, ниже которого все кандидаты
рассматриваются для каждого использования в оптимизации индукционных переменных. Если есть
больше кандидатов, чем это, рассматриваются только самые подходящие, чтобы избежать
квадратичная временная сложность.

iv-max-рассмотренное использование
Оптимизация индукционной переменной отказывается от циклов, которые содержат больше индукции.
переменная использует.

iv-всегда-обрезка-канд-сет-связанный
Если количество кандидатов в наборе меньше этого значения, всегда старайтесь
удалите ненужные ivs из набора при добавлении нового.

Scev-max-expr-size
Ограничен размером выражений, используемых в анализаторе скалярных эволюций. Большой
выражения замедляют анализатор.

scev-max-expr-сложность
Ограничено сложностью выражений в анализаторе скалярных эволюций.
Сложные выражения замедляют анализатор.

омега-макс-варс
Максимальное количество переменных в системе ограничений Omega. Значение по умолчанию
это 128.

омега-макс-geqs
Максимальное количество неравенств в системе ограничений Omega. По умолчанию
значение 256.

омега-макс-экв
Максимальное количество равенств в системе ограничений Omega. Значение по умолчанию
это 128.

omega-max-wild-карты
Максимальное количество переменных с подстановочными знаками, которые может вставить решатель Omega.
Значение по умолчанию - 18.

размер омега-хеш-таблицы
Размер хеш-таблицы в решателе Omega. Значение по умолчанию - 550.

омега-макс-ключи
Максимальное количество ключей, используемых решателем Omega. Значение по умолчанию - 500.

омега-исключить-избыточные-ограничения
Если установлено значение 1, используйте дорогие методы для устранения всех избыточных ограничений. В
значение по умолчанию - 0.

vect-max-версия-для-проверки-выравнивания
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование для выравнивания в векторизаторе.

vect-max-версия-для-проверки-псевдонима
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование псевдонима в векторизаторе.

vect-max-peeling-для выравнивания
Максимальное количество циклов отслаивания для улучшения выравнивания доступа для векторизатора. Ценить
-1 означает «без ограничений».

максимальное количество итераций на отслеживание
Максимальное количество итераций цикла алгоритма перебора для анализа
количества итераций цикла пытается оценить.

горячий-bb-count-ws-permille
Базовое количество профилей блоков считается горячим, если оно способствует заданному
пермильаж (т.е. 0 ... 1000) всего профилированного исполнения.

hot-bb-частота-фракция
Выберите долю входного блока частоты выполнения базового блока в
функция, заданная базовым блоком, должна считаться горячей.

макс-предсказанные-итерации
Максимальное количество итераций цикла, которое мы прогнозируем статически. Это полезно в
случаи, когда функция содержит один цикл с известной границей и другой цикл
с неизвестной границей. Известное количество итераций прогнозируется правильно, а
неизвестное число итераций в среднем составляет примерно 10. Это означает, что цикл
без границ кажется искусственно холодным по отношению к другому.

встроенная ожидаемая вероятность
Управляйте вероятностью того, что выражение будет иметь указанное значение. Этот
Параметр принимает процентное значение (например, 0 ... 100) в качестве входных данных. Вероятность дефолта
90 получено эмпирическим путем.

выровнять порог
Выберите долю от максимальной частоты выполнения базового блока в
функция для выравнивания базового блока.

выровнять итерации цикла
Цикл, который, как ожидается, будет повторять по крайней мере выбранное количество итераций, выравнивается.

трассировщик-динамическое-покрытие
трассировщик-динамическое-покрытие-обратная связь
Это значение используется для ограничения формирования суперблока после достижения заданного процента
выполняемые инструкции покрываются. Это ограничивает ненужное увеличение размера кода.

Команда трассировщик-динамическое-покрытие-обратная связь используется только тогда, когда обратная связь профиля
доступный. Реальные профили (в отличие от статически оцененных) намного
менее сбалансирован, допускает большее значение порога.

трейсер-макс-рост кода
Остановите дублирование хвоста, когда рост кода достигнет заданного процента. Это
довольно искусственный предел, так как большинство дубликатов удаляются позже перекрестным
скачком, поэтому его можно установить на гораздо более высокие значения, чем желаемый рост кода.

трассировщик-мин-ветвь-коэффициент
Остановить обратный рост, когда обратная вероятность лучшего преимущества меньше этой
порог (в процентах).

трассировщик-мин-ветвь-коэффициент
трассировщик-мин-ветвь-отношение-обратная связь
Остановите форвардный рост, если лучшее преимущество имеет вероятность ниже этого порога.

Аналогично трассировщик-динамическое-покрытие присутствуют два значения, одно для компиляции
для отзывов профиля и один для компиляции без. Значение для компиляции
с отзывами профиля должны быть более консервативными (выше), чтобы
трассировщик эффективен.

макс-cse-длина пути
Максимальное количество базовых блоков на пути, которое рассматривает CSE. По умолчанию 10.

макс-cse-insns
Максимальное количество инструкций, которые CSE обрабатывает перед сбросом. По умолчанию
1000.

ggc-мин-расширить
GCC использует сборщик мусора для управления выделением собственной памяти. Этот параметр
указывает минимальный процент, на который должна быть установлена ​​куча сборщика мусора.
разрешено расширяться между коллекциями. Настройка этого может улучшить скорость компиляции;
это не влияет на генерацию кода.

По умолчанию 30% + 70% * (RAM / 1GB) с верхней границей 100%, когда RAM> = 1GB.
Если доступен "getrlimit", понятие "RAM" является наименьшим из фактических RAM и
«RLIMIT_DATA» или «RLIMIT_AS». Если GCC не может рассчитать ОЗУ на конкретном
платформа, используется нижняя граница 30%. Установка этого параметра и ggc-мин-
кучу к нулю приводит к полному сбору данных при каждой возможности. Это
очень медленно, но может быть полезно для отладки.

ggc-мин-куча
Минимальный размер кучи сборщика мусора до того, как он начнет собирать
мусор. Первый сбор происходит после того, как куча расширяется на ggc-мин-расширить%
За ggc-мин-куча. Опять же, настройка может улучшить скорость компиляции и
не влияет на генерацию кода.

По умолчанию используется меньшее из RAM / 8, RLIMIT_RSS или ограничение, которое пытается гарантировать
что RLIMIT_DATA или RLIMIT_AS не превышаются, но с нижней границей 4096
(четыре мегабайта) и верхняя граница 131072 (128 мегабайт). Если GCC не может
для расчета ОЗУ на конкретной платформе используется нижняя граница. Установка этого
параметр очень большой эффективно отключает сборку мусора. Установка этого
параметр и ggc-мин-расширить к нулю приводит к тому, что полный сбор происходит каждый
возможность.

максимальная перезагрузка-поиск-insns
Максимальное количество перезагрузок инструкций должно смотреть назад в поисках эквивалента.
регистр. Увеличение значений означает более агрессивную оптимизацию, в результате чего
время компиляции увеличивается, возможно, немного лучше. По умолчанию
значение 100.

Макс-cselib-места-памяти
Cselib должен учитывать максимальное количество ячеек памяти.
Увеличение значений означает более агрессивную оптимизацию, сокращая время компиляции
увеличится с, вероятно, немного лучшей производительностью. Значение по умолчанию - 500.

переупорядочить блоки-дубликаты
переупорядочить-блоки-дубликат-обратная связь
Используется проходом переупорядочения базового блока, чтобы решить, следует ли использовать безусловный
ответвите или продублируйте код в месте назначения. Код дублируется, когда его
расчетный размер меньше, чем это значение, умноженное на расчетный размер
безусловный скачок в горячих точках программы.

Команда переупорядочить блок-дубликат-обратная связь используется только тогда, когда обратная связь профиля
доступный. Может быть установлено более высокое значение, чем переупорядочить-блок-дубликат с
информация о горячих точках более точна.

максимальное расписание-ready-insns
Максимальное количество инструкций, готовых к выдаче планировщику.
рассмотреть в любой момент времени во время первого прохода планирования. Возрастающие ценности
означают более тщательный поиск, увеличивая время компиляции, вероятно,
мало пользы. Значение по умолчанию - 100.

максимальное расписание-регион-блоков
Максимальное количество блоков в регионе, которое будет считаться межблочным.
планирование. Значение по умолчанию - 10.

макс-конвейер-регион-блоков
Максимальное количество блоков в регионе, которые будут рассматриваться для конвейерной обработки в
селективный планировщик. Значение по умолчанию - 15.

макс-sched-регион-insns
Максимальное количество insns в регионе, которое будет считаться межблочным.
планирование. Значение по умолчанию - 100.

макс-конвейер-регион-insns
Максимальное количество insns в регионе, которое будет рассматриваться для конвейерной передачи в
селективный планировщик. Значение по умолчанию - 200.

минимальная спецификация-проб
Минимальная вероятность (в процентах) попадания в исходный блок для межблока
спекулятивное планирование. Значение по умолчанию - 40.

max-sched-extension-регионы-итеры
Максимальное количество итераций через CFG для расширения регионов. Значение 0 (
по умолчанию) отключает расширения региона.

max-sched-insn-конфликт-задержка
Максимальная задержка конфликта для insn, рассматриваемого как спекулятивное движение.
Значение по умолчанию - 3.

план-спецификация-вероятность отсечки
Минимальная вероятность успеха спекуляции (в процентах), так что спекулятивная
insns запланированы. Значение по умолчанию - 40.

план-спецификация-состояние-край-проб-отсечка
Минимальная вероятность того, что граница должна иметь планировщик, чтобы сохранить свое состояние
через это. Значение по умолчанию - 10.

sched-mem-true-dep-стоимость
Минимальное расстояние (в циклах ЦП) между хранилищем и загрузкой, ориентированное на одну и ту же память
локации. Значение по умолчанию - 1.

selsched-max-просмотр
Максимальный размер окна просмотра выборочного планирования. Это глубина
поиска доступных инструкций. Значение по умолчанию - 50.

selsched-max-sched-раз
Максимальное количество раз, когда инструкция будет планироваться во время выборочного
планирование. Это ограничение на количество итераций, через которые
инструкция может быть конвейерной. Значение по умолчанию - 2.

selsched-max-insns-to-rename
Максимальное количество лучших инструкций в готовом списке, которые рассматриваются для
переименование в селективном планировщике. Значение по умолчанию - 2.

смс-мин-ск
Минимальное значение количества этапов, которое генерирует планировщик по модулю качания. В
значение по умолчанию - 2.

макс-последнее-значение-RTL
Максимальный размер, измеряемый как количество RTL, которые могут быть записаны в выражении.
в сумматоре псевдорегистратора как последнее известное значение этого регистра. В
по умолчанию - 10000.

целочисленный предел доли
Маленькие целочисленные константы могут использовать общую структуру данных, уменьшая компилятор
использование памяти и увеличение ее скорости. Это устанавливает максимальное значение общего
целочисленная константа. Значение по умолчанию - 256.

размер буфера ssp
Минимальный размер буферов (т.е. массивов), которые получают защиту от разрушения стека.
когда -fstack-защита используется.

Это значение по умолчанию до Ubuntu 10.10 было «8». В настоящее время это «4», чтобы увеличить
количество функций, защищенных стековым протектором.

минимальный размер для совместного использования стека
Минимальный размер переменных, участвующих в совместном использовании слота стека, когда не
оптимизация. Значение по умолчанию - 32.

Макс-скачок-поток-дублирование-stmts
Максимальное количество операторов, разрешенных в блоке, которое необходимо дублировать, когда
резьба скачки.

max-fields-for-field-чувствительны
Максимальное количество полей в структуре, обрабатываемых с учетом поля во время
анализ указателя. По умолчанию для -O0 и -O1и 100 для -Операционные системы, -O2и
-O3.

задержка предварительной выборки
Оценить среднее количество инструкций, которые выполняются до предварительной выборки.
отделка. Предварительно выбранное расстояние пропорционально этой константе.
Увеличение этого числа также может привести к уменьшению количества предварительно загружаемых потоков (см.
одновременная предварительная выборка).

одновременная предварительная выборка
Максимальное количество предварительных выборок, которые могут выполняться одновременно.

l1-размер строки-кэша
Размер строки кэша в кэше L1 в байтах.

l1-размер кэша
Размер кеша L1 в килобайтах.

l2-размер кэша
Размер кеша L2 в килобайтах.

минимальное соотношение insn к предварительной выборке
Минимальное соотношение между количеством инструкций и количеством предварительной выборки
чтобы включить предварительную выборку в цикле.

соотношение предварительной выборки-min-insn к памяти
Минимальное соотношение между количеством инструкций и количеством памяти
ссылки для включения предварительной выборки в цикле.

использовать-канонические-типы
Должен ли компилятор использовать "каноническую" систему типов. По умолчанию это
всегда должен быть 1, что позволяет использовать более эффективный внутренний механизм сравнения
типы в C ++ и Objective-C ++. Однако, если ошибки в канонической системе типов
вызывая сбои компиляции, установите для этого значения 0, чтобы отключить канонические типы.

переключатель-преобразование-максимальное-соотношение ветвей
Преобразование инициализации коммутатора отказывается создавать массивы, размер которых превышает
переключатель-преобразование-максимальное-соотношение ветвей умноженное на количество ветвей в коммутаторе.

макс-частичная-античная длина
Максимальная длина частичного античного набора, вычисленная во время частичного дерева
оптимизация устранения избыточности (-free-pre) при оптимизации на -O3 и выше.
Для некоторых типов исходного кода улучшенное устранение частичной избыточности
оптимизация может исчезнуть, потребляя всю доступную на хосте память
машина. Этот параметр устанавливает ограничение на длину вычисляемых наборов,
что предотвращает неконтролируемое поведение. Установка значения 0 для этого параметра
позволяет неограниченную длину набора.

sccvn-max-scc-размер
Максимальный размер сильно связанного компонента (SCC) во время обработки SCCVN. Если
этот предел достигнут, обработка SCCVN для всей функции не выполняется и
оптимизации в зависимости от этого отключены. Максимальный размер SCC по умолчанию:
10000.

sccvn-max-alias-questions-per-access
Максимальное количество запросов псевдонима-оракула, которые мы выполняем при поиске избыточности
для грузов и магазинов. Если этот предел достигнут, поиск прерывается и загрузка или
store не считается избыточным. Количество запросов алгоритмически
ограничено количеством хранилищ на всех путях от загрузки до записи функции.
Максимальное количество запросов по умолчанию - 1000.

Ира-макс-петель-число
IRA по умолчанию использует региональное распределение регистров. Если функция содержит больше
циклов, чем число, заданное этим параметром, только не более заданного числа
наиболее часто выполняемые петли образуют регионы для размещения региональных регистров.
Значение параметра по умолчанию - 100.

Ира-макс-конфликт-размер таблицы
Хотя IRA использует сложный алгоритм для сжатия таблицы конфликтов,
table по-прежнему может потребовать чрезмерного количества памяти для огромных функций. Если
таблица конфликтов для функции может быть больше, чем размер в МБ, заданный этим
параметр, распределитель регистров вместо этого использует более быстрый, простой и
качественный алгоритм, не требующий построения таблицы конфликтов псевдорегистраторов.
Значение параметра по умолчанию - 2000.

Ира-петля-зарезервированные-регс
IRA можно использовать для более точной оценки давления в контурах для принятия решений
для перемещения инвариантов цикла (см. -O3). Количество доступных регистров, зарезервированных для
некоторые другие цели задаются этим параметром. Значение по умолчанию
параметр равен 2, что является минимальным количеством регистров, необходимых для типичного
инструкции. Это значение лучше всего получено в результате многочисленных экспериментов.

цикл-инвариант-макс-BBS-в-цикле
Инвариантное движение петли может быть очень дорогостоящим, как во время компиляции, так и в
объем необходимой памяти времени компиляции с очень большими циклами. Петли с большим количеством
базовые блоки, чем этот параметр, не будут иметь оптимизацию движения инвариантного цикла
исполняется на них. Значение параметра по умолчанию - 1000 для -O1 и 10000
для -O2 и выше.

цикл-макс-datarefs-for-datadeps
Создание резервов данных для очень больших циклов обходится дорого. Этот параметр
ограничивает количество ссылок на данные в циклах, которые рассматриваются для данных
анализ зависимости. Эти большие циклы не обрабатываются оптимизацией, использующей
зависимости данных цикла. Значение по умолчанию - 1000.

максимальный размер vartrack
Устанавливает максимальное количество слотов хеш-таблицы для использования во время потока данных отслеживания переменных
анализ любой функции. Если этот предел превышен с отслеживанием переменных на
присвоения включены, анализ для этой функции повторяется без этого, после
удаление всех отладочных insns из функции. Если лимит превышен даже без
debug insns, для функции полностью отключен анализ отслеживания var.
Установка параметра в ноль делает его неограниченным.

макс-vartrack-expr-depth
Устанавливает максимальное количество уровней рекурсии при попытке сопоставить имена переменных или
отлаживать временные выражения для значений выражений. Это меняет время компиляции на больше
полная отладочная информация. Если установлено слишком низкое значение, выражения значений, которые
доступны и могут быть представлены в отладочной информации, могут в конечном итоге не использоваться;
установка этого более высокого значения может позволить компилятору найти более сложную отладку
выражений, но время компиляции и использование памяти могут возрасти. По умолчанию - 12.

мин-неотладка-insn-uid
Используйте идентификаторы uid, начинающиеся с этого параметра, для nondebug insns. Диапазон ниже
параметр зарезервирован исключительно для отладки insns, созданного
-fvar-отслеживания-присваивания, но отладочные insns могут получить (неперекрывающиеся) uid, указанные выше
это, если зарезервированный диапазон исчерпан.

ipa-sra-ptr-фактор роста
IPA-SRA заменяет указатель на агрегат только одним или несколькими новыми параметрами.
когда их совокупный размер меньше или равен ipa-sra-ptr-фактор роста раз
размер исходного параметра указателя.

tm-max-aggregate-размер
При создании копий локальных переменных потока в транзакции этот параметр
указывает размер в байтах, после которого переменные сохраняются с журналированием
функции в отличие от сохранения / восстановления пар кодовых последовательностей. Только этот вариант
применяется при использовании -fgnu-тм.

графит-макс-нб-объем-параметры
Чтобы избежать экспоненциальных эффектов в преобразованиях графитового цикла, количество
параметры в части статического управления (SCoP) ограничены. Значение по умолчанию - 10.
параметры. Переменная, значение которой неизвестно во время компиляции и определено
вне SCoP - это параметр SCoP.

графит-макс-bbs-на функцию
Чтобы избежать экспоненциальных эффектов при обнаружении SCoP, размер функций
анализируемый Graphite ограничен. Значение по умолчанию - 100 базовых блоков.

петля-блок-размер плитки
Преобразования в блокировке петель или добыче полезных ископаемых, включенные с помощью -floop-блок or
-фуп-стрип-мина, разделите каждую петлю в гнезде петли на заданное количество
итераций. Длину полосы можно изменить с помощью петля-блок-размер плитки
параметр. Значение по умолчанию - 51 итерация.

ipa-cp-значение-список-размер
IPA-CP пытается отслеживать все возможные значения и типы, передаваемые функции
параметр, чтобы распространить их и выполнить девиртуализацию. ipa-cp-значение-
размер списка - максимальное количество значений и типов, которые он хранит на один формальный
параметр функции.

ipa-cp-eval-порог
IPA-CP вычисляет собственную оценку эвристики рентабельности клонирования и выполняет
те возможности клонирования с оценками, превышающими ipa-cp-eval-порог.

ipa-max-agg-предметы
IPA-CP также может распространять ряд скалярных значений, переданных в
совокупный. ipa-max-agg-предметы контролирует максимальное количество таких значений на одно
Параметр.

ipa-cp-loop-подсказка-бонус
Когда IPA-CP определяет, что кандидат на клонирование сделает количество
известных итераций цикла, он добавляет бонус в ipa-cp-loop-подсказка-бонус бонус к
оценка рентабельности кандидата.

ipa-cp-массив-индекс-подсказка-бонус
Когда IPA-CP определяет, что кандидат на клонирование сделает индекс массива
доступ известен, он добавляет бонус в размере ipa-cp-массив-индекс-подсказка-бонус бонус к
оценка рентабельности кандидата.

lto-разделы
Укажите желаемое количество разделов, создаваемых во время компиляции WHOPR. В
количество разделов должно превышать количество процессоров, используемых для компиляции. В
значение по умолчанию - 32.

lto-minpartition
Размер минимального раздела для WHOPR (в ориентировочной инструкции). Это предотвращает
расходы на разбиение очень маленьких программ на слишком много разделов.

cxx-max-namespaces-для-диагностики-справки
Максимальное количество пространств имен, к которым следует обращаться для получения предложений при поиске имени C ++
не работает для идентификатора. По умолчанию 1000.

порог частоты понижения
Максимальная относительная частота выполнения (в процентах) целевого блока
относительно исходного блока инструкции, чтобы разрешить опускание инструкции
утверждение. Большие числа приводят к более агрессивному опусканию заявления. В
значение по умолчанию - 75. Небольшая положительная корректировка применяется для операторов с
операнды памяти, так как они даже более выгодны, так что тонут.

макс. запасы до раковины
Максимальное количество пар условных хранилищ, которые могут быть потоплены. Установите 0, если
либо векторизация (-ftree-векторизация) или если-преобразование (-ftree-loop-если-преобразовать)
выключен. По умолчанию - 2.

разрешить загрузки данных гонки
Разрешите оптимизаторам вводить новые гонки данных при загрузке. Установите 1, чтобы разрешить,
в противном случае - 0. Этот параметр включен по умолчанию, если неявно установлен
-fmemory-model = опцию.

разрешить-хранить-данные-гонки
Разрешите оптимизаторам вводить новые гонки данных в магазинах. Установите 1, чтобы разрешить,
в противном случае - 0. Этот параметр включен по умолчанию, если неявно установлен
-fmemory-model = опцию.

разрешить-упакованные-загрузки-данные-гонки
Разрешите оптимизаторам вводить новые гонки данных при загрузке упакованных данных. Установите от 1 до
разрешить, в противном случае - 0. Этот параметр включен по умолчанию, если не установлен явно
-fmemory-model = опцию.

разрешить упакованные данные-гонки
Разрешите оптимизаторам вводить новые гонки данных в хранилищах упакованных данных. Установите от 1 до
разрешить, в противном случае - 0. Этот параметр включен по умолчанию, если не установлен явно
-fmemory-model = опцию.

регистр-значения-порог
Наименьшее количество различных значений, для которых лучше всего использовать таблицу переходов
вместо дерева условных ветвей. Если значение равно 0, используйте значение по умолчанию для
машина. По умолчанию - 0.

дерево-reassoc-ширина
Установите максимальное количество инструкций, выполняемых параллельно в повторно ассоциированном дереве.
Этот параметр переопределяет эвристику, зависящую от цели, используемую по умолчанию, если нет
нулевое значение.

алгоритм-график давления
Выберите одну из двух доступных реализаций -fsched-давление. Алгоритм 1
является исходной реализацией и с большей вероятностью предотвратит выполнение инструкций
переупорядочивается. Алгоритм 2 был разработан как компромисс между
относительно консервативный подход, принятый алгоритмом 1, и довольно агрессивный
подход, используемый планировщиком по умолчанию. Он в большей степени зависит от наличия
обычный регистровый файл и точный регистр классов давления. Видеть Хайфа-sched.c
в источниках GCC для более подробной информации.

Выбор по умолчанию зависит от цели.

Макс-SLSR-Cand-Scan
Установите максимальное количество существующих кандидатов, которые будут учитываться при поиске
основа для нового кандидата на прямолинейное снижение прочности.

асан-глобалы
Включите обнаружение переполнения буфера для глобальных объектов. Такая защита
включен по умолчанию, если вы используете -fsanitize = адрес вариант. Чтобы отключить глобальный
защита объектов использование --парам asan-globals = 0.

асан-стек
Включить обнаружение переполнения буфера для объектов стека. Такая защита
включен по умолчанию при использовании-fsanitize = адрес. Чтобы отключить защиту стека, используйте
--парам asan-stack = 0 опцию.

asan-инструмент-читает
Включить обнаружение переполнения буфера при чтении памяти. Такая защита
включен по умолчанию при использовании -fsanitize = адрес. Чтобы отключить чтение из памяти
использование защиты --парам asan-instrument-reads = 0.

asan-инструмент-пишет
Включите обнаружение переполнения буфера при записи в память. Такая защита
включен по умолчанию при использовании -fsanitize = адрес. Чтобы отключить запись в память
использование защиты --парам asan-инструмент-пишет = 0 опцию.

асан-меминтрин
Включить обнаружение для встроенных функций. Этот вид защиты обеспечивается
по умолчанию при использовании -fsanitize = адрес. Отключение защиты встроенных функций
использование --парам асан-меминтрин = 0.

асан-использование-после-возврата
Включите обнаружение использования после возврата. Этот вид защиты обеспечивается
по умолчанию при использовании -fsanitize = адрес вариант. Чтобы отключить использование после возврата
использование обнаружения --парам asan-use-after-return = 0.

asan-инструментария-с-порогом вызова
Если количество обращений к памяти в инструментированной функции больше или равно
этот номер, используйте обратные вызовы вместо встроенных проверок. Например, чтобы отключить встроенный код
использование --парам asan-инструментовка с порогом вызова = 0.

макс-fsm-поток-путь-insns
Максимальное количество инструкций для копирования при дублировании блоков в конечном состоянии
автомат скачка нити пути. По умолчанию 100.

max-fsm-длина резьбы
Максимальное количество базовых блоков на пути перехода конечного автомата. В
по умолчанию - 10.

макс-fsm-поток-пути
Максимальное количество новых путей перехода для создания конечного автомата.
По умолчанию 50.

Опции Управление препроцессор
Эти параметры управляют препроцессором C, который запускается для каждого исходного файла C перед фактическим выполнением.
сборник.

Если вы используете -E вариант, кроме предварительной обработки ничего не делается. Некоторые из этих вариантов
имеет смысл только вместе с -E потому что они заставляют вывод препроцессора быть
не подходит для реальной компиляции.

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

-Xпрепроцессор вариант
Проходить вариант как вариант препроцессору. Вы можете использовать это для снабжения системы-
определенные параметры препроцессора, которые GCC не распознает.

Если вы хотите передать параметр, который принимает аргумент, вы должны использовать -Xпрепроцессор
дважды, один раз для варианта и один раз для аргумента.

-но-интегрированный-cpp
Выполните предварительную обработку как отдельный проход перед компиляцией. По умолчанию GCC выполняет
предварительная обработка как неотъемлемая часть токенизации и синтаксического анализа входных данных. Если этот вариант
предоставляется интерфейс на соответствующем языке (cc1, cc1plusили cc1obj для C, C ++,
и Objective-C соответственно) вместо этого вызывается дважды, один раз только для предварительной обработки
и один раз для фактической компиляции предварительно обработанного ввода. Эта опция может быть полезна
в сочетании с -B or -обертка параметры для указания альтернативного препроцессора или
выполнить дополнительную обработку исходного кода программы между обычной предварительной обработкой и
сборник.

-D имя
Предопределить имя как макрос с определением 1.

-D имя=определение
Содержание определение токенизируются и обрабатываются так, как если бы они появились во время
перевод третий этап в #define директива. В частности, определение будет
усекается встроенными символами новой строки.

Если вы вызываете препроцессор из оболочки или программы, подобной оболочке, вам может потребоваться
использовать синтаксис кавычек оболочки для защиты символов, таких как пробелы, которые имеют
значение в синтаксисе оболочки.

Если вы хотите определить макрос в командной строке, напишите его аргумент
список с окружающими круглыми скобками перед знаком равенства (если есть). Круглые скобки
имеет смысл для большинства оболочек, поэтому вам нужно будет указать эту опцию в кавычках. С участием sh и CSH,
-D 'имя(аргументы ...)=определение' работ.

-D и -U параметры обрабатываются в том порядке, в котором они указаны в командной строке. Все
-имакрос файл и -включают файл варианты обрабатываются все-таки -D и -U настройки.

-U имя
Отменить любое предыдущее определение имя, либо встроенные, либо снабженные -D опцию.

-undef
Не задавайте заранее какие-либо системные или специфичные для GCC макросы. Стандартный предопределенный
макросы остаются определенными.

-I директория
Добавить каталог директория в список каталогов для поиска файлов заголовков.
Каталоги, названные -I поиск выполняется до того, как стандартная система включает каталоги.
Если каталог директория стандартный системный каталог include, параметр игнорируется, чтобы
убедитесь, что порядок поиска по умолчанию для системных каталогов и особая обработка
системных заголовков не побеждены. Если директория начинается с "=", тогда "=" будет
заменен префиксом sysroot; видеть --sroot и -isysroot.

-o файл
Записать вывод в файл. Это то же самое, что указать файл как второй вариант
аргумент CPP. GCC имеет другое толкование второго аргумента, не являющегося опционом,
так что вы должны использовать -o чтобы указать выходной файл.

-Стена
Включает все необязательные предупреждения, которые желательны для обычного кода. В настоящее время это
is -Wкомментарий, -Писания, -Wмультисимвол и предупреждение о целочисленной рекламе, вызывающей
изменение знака в выражениях "#if". Обратите внимание, что многие предупреждения препроцессора
включены по умолчанию и не имеют возможности управлять ими.

-Wкомментарий
-Комментарии
Предупреждать всякий раз, когда начинается последовательность комментариев /* появляется в /* комментарий, или всякий раз, когда
обратная косая черта-новая строка появляется в // комментарий. (Обе формы имеют одинаковый эффект.)

-Писания
Большинство триграфов в комментариях не могут повлиять на смысл программы. Однако
триграф, который сформировал бы экранированный символ новой строки (?? / в конце строки) может,
изменение места начала или конца комментария. Следовательно, только триграфы, образующие
экранированные символы новой строки вызывают предупреждения внутри комментария.

Этот вариант подразумевается -Стена. Если -Стена не указан, этот параметр все еще включен
если не включены триграфы. Чтобы получить преобразование триграфа без предупреждений, но получить
другие -Стена предупреждения, используйте -триграфы -Стена -Wno-триграфы.

-Wтрадиционный
Предупреждать об определенных конструкциях, которые ведут себя по-разному в традиционном и ISO C. Также
предупреждать о конструкциях ISO C, у которых нет традиционного эквивалента C, и о проблемных
конструкции, которых следует избегать.

-Вундеф
Предупреждать всякий раз, когда идентификатор, не являющийся макросом, встречается в #если Директива,
пределами определенный. Такие идентификаторы заменяются нулем.

-Wunused-макросы
Предупреждать о неиспользуемых макросах, определенных в основном файле. Макрос использовал если это
расширен или протестирован на наличие хотя бы один раз. Препроцессор также предупредит, если
макрос не использовался во время переопределения или неопределенности.

Встроенные макросы, макросы, определенные в командной строке, и макросы, определенные в include
файлы не предупреждаются.

Примечание: Если макрос действительно используется, но используется только в пропущенных условных блоках, тогда
CPP сообщит, что он не использовался. Чтобы избежать предупреждения в таком случае, вы можете улучшить
область определения макроса, например, перемещая его в первое пропущенное
блокировать. В качестве альтернативы вы можете предоставить фиктивное использование с чем-то вроде:

#if определено the_macro_causing_the_warning
#endif

-Wendif-лейблы
Предупреждать всякий раз, когда #еще или #endif следуют текст. Обычно это происходит в
код формы

#если фу
...
#else ФУ
...
#endif ФУ

Второй и третий «FOO» должны быть в комментариях, но их часто нет в старых программах.
Это предупреждение включено по умолчанию.

-Ошибка
Превратите все предупреждения в серьезные ошибки. Исходный код, вызывающий предупреждения, будет
отвергнуто.

-Wsystem-заголовки
Выдавать предупреждения для кода в системных заголовках. Обычно они бесполезны при поиске
ошибки в вашем собственном коде, поэтому подавляются. Если вы отвечаете за систему
библиотеки, возможно, вы захотите их увидеть.

-w Подавить все предупреждения, включая те, которые выдает GNU CPP по умолчанию.

-педантический
Выполните все обязательные диагностики, перечисленные в стандарте C. Некоторые из них остались
по умолчанию, поскольку они часто срабатывают для безобидного кода.

-педантические-ошибки
Проведите всю обязательную диагностику и превратите всю обязательную диагностику в ошибки.
Это включает в себя обязательную диагностику, которую GCC выдает без -педантический но относится как
предупреждения.

-M Вместо вывода результата предварительной обработки выведите правило, подходящее для сделать
описание зависимостей основного исходного файла. Препроцессор выдает один
сделать правило, содержащее имя объектного файла для этого исходного файла, двоеточие и имена
всех включенных файлов, в том числе из -включают or -имакрос команду
параметры линии.

Если не указано явно (с -MT or -MQ) имя объектного файла состоит из
имя исходного файла с любым суффиксом, замененным суффиксом объектного файла и любым
ведущие части каталога удалены. Если есть много включенных файлов, то правило
разделить на несколько строк, используя \-новая линия. В правиле нет команд.

Эта опция не подавляет отладочные данные препроцессора, такие как -дМ. Избежать
смешивая такой вывод отладки с правилами зависимости, вы должны явно указать
выходной файл зависимости с или используйте переменную среды, например
ЗАВИСИМОСТИ_OUTPUT. Выходные данные отладки будут по-прежнему отправляться в обычный выходной поток как
Normal.

Прохождение -M водителю подразумевает -E, и подавляет предупреждения с неявным -w.

-MM Подобно -M но не упоминайте файлы заголовков, которые находятся в каталогах системных заголовков,
ни файлы заголовков, которые прямо или косвенно включены из такого заголовка.

Это означает, что выбор угловых скобок или двойных кавычек в #включают
директива сама по себе не определяет, появится ли этот заголовок в -MM
вывод зависимости. Это небольшое изменение семантики по сравнению с версиями GCC 3.0 и
ранее.

файл
При использовании с -M or -MM, указывает файл для записи зависимостей. Если нет
switch препроцессор отправляет правила в то же место, куда он отправил бы
предварительно обработанный вывод.

При использовании с опциями драйвера -MD or -ММД, отменяет зависимость по умолчанию
выходной файл.

-МГ В сочетании с такой опцией, как -M запрос генерации зависимости, -МГ предполагает,
отсутствующие файлы заголовков являются сгенерированными файлами и добавляют их в список зависимостей без
поднимая ошибку. Имя файла зависимости берется непосредственно из "#include"
директива без добавления пути. -МГ также подавляет предварительно обработанный вывод, так как
отсутствие файла заголовка делает это бесполезным.

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

-МП Эта опция указывает CPP добавить фальшивую цель для каждой зависимости, кроме
main файл, в результате чего каждый ни от чего не зависит. Эти фиктивные правила позволяют обходить ошибки
сделать дает, если вы удалите файлы заголовков без обновления Makefile чтобы соответствовать.

Это типичный вывод:

test.o: test.c test.h

тест.ч:

-MT цель
Измените цель правила, созданного при генерации зависимости. По умолчанию CPP принимает
имя основного входного файла, удаляет все компоненты каталога и любой суффикс файла
как .c, и добавляет обычный суффикс объекта платформы. Результат - цель.

An -MT option установит в качестве цели именно ту строку, которую вы указали. Если хочешь
несколько целей, вы можете указать их как один аргумент для -MT, или используйте несколько
-MT настройки.

Например, -MT '$ (objpfx) foo.o' может дать

$ (objpfx) foo.o: foo.c

-MQ цель
Такой же как -MT, но он цитирует любые символы, которые являются специальными для Make.
-MQ '$ (objpfx) foo.o' дает

$$ (objpfx) foo.o: foo.c

Цель по умолчанию автоматически цитируется, как если бы она была задана с помощью -MQ.

-MD -MD эквивалентна -M файл, Кроме этого -E не подразумевается. Водитель
определяет файл в зависимости от того, есть ли -o предоставляется вариант. Если это так, драйвер использует свой
аргумент, но с суффиксом .d, в противном случае он принимает имя входного файла,
удаляет все компоненты каталога и суффикс и применяет .d суффикс.

If -MD используется в сочетании с -E, любой -o переключатель понимается, чтобы указать
выходной файл зависимостей, но если он используется без -Eкаждый -o понимается как указать
целевой объектный файл.

С -E не подразумевается, -MD может использоваться для создания выходного файла зависимости как
побочный эффект процесса компиляции.

-ММД
Подобно -MD за исключением упоминания только файлов заголовков пользователей, а не файлов системных заголовков.

-fpch-депс
При использовании предварительно скомпилированных заголовков этот флаг приведет к тому, что флаги вывода зависимости будут
также перечислите файлы из зависимостей предварительно скомпилированного заголовка. Если не указано только
будет указан предварительно скомпилированный заголовок, а не файлы, которые использовались для его создания
потому что эти файлы не используются при использовании предварительно скомпилированного заголовка.

-fpch-предварительный процесс
Эта опция позволяет использовать предварительно скомпилированный заголовок вместе с -E. Он вставляет специальный
"#pragma", "#pragma GCC pch_preprocess"имя файла"" на выходе отметить место
где был найден предварительно скомпилированный заголовок, и его имя файла. Когда -fпредварительно обработанный В
использования, GCC распознает этот "#pragma" и загружает PCH.

По умолчанию этот параметр отключен, так как конечный предварительно обработанный вывод - это только
действительно подходит в качестве входных данных для GCC. Включается -сохранение темпов.

Вы не должны писать эту "#pragma" в своем собственном коде, но вы можете безопасно редактировать
имя файла, если файл PCH доступен в другом месте. Имя файла может быть
абсолютный или может относиться к текущему каталогу GCC.

-x c
-x C ++
-x Objective-C
-x ассемблер-с-cpp
Укажите исходный язык: C, C ++, Objective-C или ассемблер. Это не имеет ничего общего
с соответствием или расширениями стандартов; он просто выбирает, какой базовый синтаксис
ожидать. Если вы не укажете ни один из этих параметров, cpp определит язык из
расширение исходного файла: .c, .cc, .mили .S. Некоторые другие распространенные расширения для
Также распознаются C ++ и сборка. Если cpp не распознает расширение, он
будет рассматривать файл как C; это самый общий режим.

Примечание: Предыдущие версии cpp принимали -ланг вариант, который выбрал как
язык и уровень соответствия стандартам. Эта опция была удалена, потому что
это противоречит -l опцию.

-std =стандарт
-анси
Укажите стандарт, которому должен соответствовать код. В настоящее время CPP знает о C
и стандарты C ++; другие могут быть добавлены в будущем.

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

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

Команда -анси вариант эквивалентен -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 варианты до -Я-
искал только заголовки, запрошенные с "#include"файл""; их не ищут
"#включаютфайл> ". Если дополнительные каталоги указаны с -I варианты после
-Я-, в этих каталогах выполняется поиск всех #включают директивы.

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

-ностдинк
Не ищите файлы заголовков в стандартных системных каталогах. Только каталоги
вы указали с -I опции (и каталог текущего файла, если
соответствующие) ищутся.

-nostdinc ++
Не ищите файлы заголовков в стандартных каталогах C ++, но все же выполняйте поиск.
поиск в других стандартных каталогах. (Эта опция используется при сборке C ++
библиотека.)

-включают файл
Разработка файл как если бы "#include" файл "" появился как первая строка первичного источника
файл. Однако первый каталог искал файл препроцессор работает
каталог вместо of каталог, содержащий основной исходный файл. Если не найден
там он ищется в оставшейся части поисковой цепочки "#include" ... "" как
Normal.

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

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

Все файлы, указанные -имакрос обрабатываются до того, как все файлы, указанные в -включают.

-идирафтер директория
Поиск директория для файлов заголовков, но сделайте это после все каталоги, указанные с помощью -I и
стандартные системные каталоги исчерпаны. директория рассматривается как система, включающая
каталог. Если директория начинается с "=", затем "=" будет заменен системным корнем
приставка; видеть --sroot и -isysroot.

-iпрефикс префикс
Указывать префикс в качестве префикса для последующих -iс префиксом параметры. Если приставка
представляет каталог, вы должны включить последний /.

-iс префиксом директория
-iwithprefixbefore директория
присоединять директория к префиксу, указанному ранее с -iпрефикс, и добавляем полученный
каталог в путь поиска включения. -iwithprefixbefore кладет в то же место -I
бы; -iс префиксом кладет это где -идирафтер бы.

-isysroot директория
Этот вариант похож на --sroot вариант, но применяется только к файлам заголовков (кроме
Darwin, где он применяется как к файлам заголовков, так и к библиотекам). Увидеть
--sroot вариант для получения дополнительной информации.

-имультилиб директория
Используйте директория в качестве подкаталога каталога, содержащего заголовки C ++ для конкретных целей.

-система директория
Поиск директория для файлов заголовков после всех каталогов, указанных -I но до
стандартные системные каталоги. Отметьте его как системный каталог, чтобы он был таким же
специальный режим, применяемый к стандартным системным каталогам. Если директория начинается
с "=", тогда "=" будет заменен префиксом sysroot; видеть --sroot и
-isysroot.

-я цитирую директория
Поиск директория только для файлов заголовков, запрошенных с "#include"файл""; они не
искал "#includeфайл> ", перед всеми каталогами, указанными -I и перед
стандартные системные каталоги. Если директория начинается с "=", затем "=" заменяется на
префикс sysroot; видеть --sroot и -isysroot.

-fdirectives-только
При предварительной обработке обрабатывайте директивы, но не расширяйте макросы.

Поведение опции зависит от -E и -fпредварительно обработанный настройки.

В -E, предварительная обработка ограничивается обработкой таких директив, как "#define",
«#ifdef» и «#error». Другие операции препроцессора, такие как расширение макроса и
преобразование триграфа не выполняется. В дополнение -дД опция неявно
включен.

В -fпредварительно обработанный, предопределение командной строки и большинства встроенных макросов
отключен. Обрабатываются такие макросы, как «__LINE__», которые зависят от контекста.
как обычно. Это позволяет компилировать файлы, предварительно обработанные с помощью "-E".
-fdirectives-only ".

С обоими -E и -fпредварительно обработанный, правила для -fпредварительно обработанный имеют приоритет. Этот
включает полную предварительную обработку файлов, предварительно обработанных с помощью "-E"
-fdirectives-only ".

-fdollars-в-идентификаторах
Принять $ в идентификаторах.

-fextended-идентификаторы
Принимайте универсальные символьные имена в идентификаторах. Это экспериментальный вариант; в
в будущей версии GCC он будет включен по умолчанию для C99 и C ++.

-fno-canonical-system-заголовки
При предварительной обработке не сокращайте пути системных заголовков канонизацией.

-fпредварительно обработанный
Сообщите препроцессору, что входной файл уже был предварительно обработан. Этот
подавляет такие вещи, как расширение макроса, преобразование триграфа, экранирование сращивания новой строки,
и обработка большинства директив. Препроцессор по-прежнему распознает и удаляет
комментарии, чтобы вы могли передать файл, предварительно обработанный с помощью -C компилятору без
проблемы. В этом режиме интегрированный препроцессор - это не что иное, как токенизатор.
для передних концов.

-fпредварительно обработанный неявно, если входной файл имеет одно из расширений .i, .ii or .mi.
Это расширения, которые GCC использует для предварительно обработанных файлов, созданных -сохранение темпов.

-ftabstop =ширина
Установите расстояние между позициями табуляции. Это помогает препроцессору сообщить правильный столбец.
числа в предупреждениях или ошибках, даже если в строке появляются табуляции. Если значение меньше
чем 1 или больше 100, опция игнорируется. По умолчанию - 8.

-fdebug-cpp
Эта опция полезна только для отладки GCC. При использовании с -E, выводит отладку
информация о картах расположения. Каждому токену на выходе предшествует дамп
карта, к которой принадлежит его местоположение. Дамп карты с местонахождением токена
было бы:

{"ПФ ; "F": F ; "L": ; "C": ; "S": ; "М": ; "E": , "loc": }

При использовании без -E, этот параметр не действует.

-ftrack-macro-extension[=уровень]
Отслеживайте расположение токенов в расширениях макросов. Это позволяет компилятору выдавать
диагностика текущего стека расширения макроса при возникновении ошибки компиляции в
расширение макроса. Использование этой опции заставляет препроцессор и компилятор потреблять
больше памяти. В уровень параметр может использоваться для выбора уровня точности токена
отслеживание местоположения, что при необходимости снижает потребление памяти. Ценить 0 of
уровень отключает эту опцию, как если бы нет -ftrack-macro-extension присутствовал на
командная строка. Ценить 1 отслеживает расположение токенов в деградированном режиме ради
минимальные накладные расходы на память. В этом режиме все жетоны, полученные в результате расширения
аргумент функционально-подобного макроса находится в том же месте. Ценить 2 отслеживает токены
локации полностью. Это значение больше всего требует памяти. Когда предоставляется этот вариант
без аргумента, значение параметра по умолчанию 2.

Обратите внимание, что -ftrack-macro-extension = 2 активирован по умолчанию.

-fexec-charset =кодировок
Установите набор символов выполнения, используемый для строковых и символьных констант. По умолчанию
это UTF-8. кодировок может быть любой кодировкой, поддерживаемой системной библиотекой "iconv"
рутина.

-fwide-exec-charset =кодировок
Установите широкий набор символов выполнения, используемый для широких строковых и символьных констант.
По умолчанию используется UTF-32 или UTF-16, в зависимости от того, что соответствует ширине wchar_t. В качестве
-fexec-кодировка, кодировок может быть любой кодировкой, поддерживаемой системным "iconv"
библиотечная рутина; однако у вас будут проблемы с кодировками, которые не подходят
именно в "wchar_t".

-finput-charset =кодировок
Установите набор символов ввода, используемый для перевода из набора символов ввода
в исходный набор символов, используемый GCC. Если языковой стандарт не указан, либо GCC
не может получить эту информацию из локали, по умолчанию используется UTF-8. Это может быть
переопределено либо локалью, либо этой опцией командной строки. В настоящее время команда
опция line имеет приоритет в случае конфликта. кодировок может быть любая кодировка
поддерживается подпрограммой библиотеки "iconv" системы.

-рабочий-каталог
Включите генерацию линейных маркеров в выводе препроцессора, что позволит компилятору
знать текущий рабочий каталог во время предварительной обработки. Когда эта опция
включен, препроцессор будет выдавать после начального линейного маркера второй линейный маркер.
с текущим рабочим каталогом с двумя косыми чертами. GCC будет использовать это
каталог, когда он присутствует в предварительно обработанных входных данных, поскольку каталог создается как
текущий рабочий каталог в некоторых форматах отладочной информации. Этот вариант
неявно включен, если включена отладочная информация, но это можно запретить с помощью
отрицательная форма -fno-рабочий-каталог, Если -P флаг присутствует в команде
line, эта опция не действует, так как никакие директивы "#line" не испускаются вообще.

-fno-show-столбец
Не печатайте номера столбцов в диагностике. Это может быть необходимо, если диагностика
сканирование программой, которая не понимает номера столбцов, например
Дежагну.

-A сказуемое=ответ
Сделайте утверждение с предикатом сказуемое и ответ ответ. Эта форма
предпочтительнее более старой формы -A сказуемое(ответ), который все еще поддерживается, потому что он
не использует специальные символы оболочки.

-A -сказуемое=ответ
Отменить утверждение с предикатом сказуемое и ответ ответ.

-dCHARS
СИМВОЛЫ представляет собой последовательность из одного или нескольких следующих символов и не может быть
предшествует пробел. Остальные символы интерпретируются компилятором, или
зарезервировано для будущих версий GCC и поэтому игнорируется. Если вы укажете
персонажи, поведение которых противоречит, результат не определен.

M Вместо обычного вывода сгенерируйте список #define директивы для всех
макросы, определенные во время выполнения препроцессора, включая предопределенные
макросы. Это дает вам возможность узнать, что предопределено в вашей версии
препроцессор. Предполагая, что у вас нет файла фу.ч, команда

прикоснитесь к foo.h; cpp -dM foo.h

покажет все предопределенные макросы.

Если вы используете -дМ без -E вариант, -дМ интерпретируется как синоним
-fdump-rtl-mach.

D Подобно M за исключением двух аспектов: это делает включить предопределенные макросы, и
выходы изоферменты печени #define директивы и результат предварительной обработки. Оба вида
вывода идут в стандартный выходной файл.

N Подобно D, но выдают только имена макросов, а не их расширения.

I Результат #включают директивы в дополнение к результату предварительной обработки.

U Подобно D за исключением того, что только макросы, которые раскрываются или чья определенность проверяется
в директивах препроцессора выводятся; вывод задерживается до использования или
тест макроса; а также #ундеф директивы также выводятся для протестированных макросов, но
не определено в то время.

-P Запретить создание линейных маркеров на выходе препроцессора. Это может быть
полезно при запуске препроцессора на чем-то, что не является кодом C, и будет отправлено
программе, которая может быть сбита с толку маркерами линий.

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

Будьте готовы к побочным эффектам при использовании -C; это заставляет препроцессор
рассматривать комментарии как самостоятельные токены. Например, комментарии, появляющиеся в
начало того, что было бы строкой директивы, привело бы к превращению этой строки в
обычная исходная строка, так как первый токен в строке больше не является #.

-CC Не отбрасывайте комментарии, в том числе при раскрытии макроса. Это похоже на -C, Кроме
что комментарии, содержащиеся в макросах, также передаются в выходной файл, где
макрос расширен.

Помимо побочных эффектов -C вариант, -CC опция вызывает все C ++ - стиль
комментарии внутри макроса, которые будут преобразованы в комментарии в стиле C. Это сделано для предотвращения в будущем
использование этого макроса из-за непреднамеренного комментирования оставшейся части исходной строки.

Команда -CC опция обычно используется для поддержки комментариев lint.

-традиционный-cpp
Попробуйте имитировать поведение устаревших препроцессоров C, в отличие от ISO C
препроцессоры.

-триграфы
Обработка последовательностей триграфов. Это трехсимвольные последовательности, начинающиеся с
??, которые определены ISO C для обозначения одиночных символов. Например, ?? / стоит
для \, так '?? / n' - символьная константа для новой строки. По умолчанию GCC игнорирует
триграфы, но в стандартных режимах он их преобразует. Увидеть -стандарт и -анси
настройки.

Девять триграфов и их замены:

Триграф: ?? (??) ?? <??> ?? = ?? / ?? ' ??! ?? -
Замена: [] {} # \ ^ | ~

-переназначить
Включите специальный код для работы с файловыми системами, которые разрешают только очень короткие файлы
имена, такие как MS-DOS.

--Помогите
--target-помощь
Напечатайте текст, описывающий все параметры командной строки, вместо предварительной обработки чего-либо.

-v Подробный режим. Распечатайте номер версии GNU CPP в начале выполнения и
сообщить окончательную форму пути включения.

-H Выведите имя каждого используемого файла заголовка в дополнение к другим обычным действиям. Каждый
имя выделено, чтобы показать, насколько глубоко #включают стек это есть. Предварительно скомпилированный заголовок
файлы также распечатываются, даже если они признаны недействительными; недействительный предварительно скомпилированный
заголовочный файл печатается с ...Икс и действительный с ! ... .

-версия
--версия
Распечатайте номер версии GNU CPP. С одним тире переходите к предварительной обработке как обычно.
С двумя дефисами немедленно выйти.

Прохождение Опции в Ассемблер
Вы можете передать параметры ассемблеру.

-Ва,вариант
Проходить вариант как вариант ассемблеру. Если вариант содержит запятые, он разделен
на несколько вариантов через запятую.

-Xассемблер вариант
Проходить вариант как вариант ассемблеру. Вы можете использовать это для предоставления специфичных для системы
параметры ассемблера, которые GCC не распознает.

Если вы хотите передать параметр, который принимает аргумент, вы должны использовать -Xассемблер дважды,
один раз за вариант и один раз за аргумент.

Опции для Связывающий
Эти параметры вступают в игру, когда компилятор связывает объектные файлы с исполняемым файлом.
выходной файл. Они бессмысленны, если компилятор не выполняет шаг ссылки.

имя-файла-объекта
Имя файла, не оканчивающееся на специальный распознанный суффикс, считается именем файла.
объектный файл или библиотека. (Объектные файлы отличаются от библиотек компоновщиком
в соответствии с содержимым файла.) Если связывание выполнено, эти объектные файлы используются как
ввод в компоновщик.

-c
-S
-E Если используется какой-либо из этих параметров, компоновщик не запускается, а имена файлов объектов
не следует использовать в качестве аргументов.

-lбиблиотека
-l библиотека
Найдите библиотеку с именем библиотека при связывании. (Вторая альтернатива с
библиотека в качестве отдельного аргумента предназначена только для соответствия POSIX и не рекомендуется.)

Имеет значение, где в команде вы пишете эту опцию; компоновщик ищет
и обрабатывает библиотеки и объектные файлы в указанном порядке. Таким образом, фу.о
-лз бар.о поиск в библиотеке z после файла фу.о но прежде бар.о. Если бар.о относится к
функций в z, эти функции могут не быть загружены.

Компоновщик ищет библиотеку в стандартном списке каталогов, который на самом деле
файл с именем библиотека.а. Затем компоновщик использует этот файл, как если бы он был указан
именно по имени.

Поисковые каталоги включают несколько стандартных системных каталогов, а также все, что вы
указать с -L.

Обычно файлы, найденные таким образом, являются файлами библиотек --- архивными файлами, членами которых являются
объектные файлы. Компоновщик обрабатывает архивный файл, сканируя его на предмет участников.
которые определяют символы, которые до сих пор упоминались, но не были определены. Но если
Найденный файл является обычным объектным файлом, он связан обычным образом. В
единственная разница между использованием -l вариант и указание имени файла заключается в том, что -l
окружает библиотека Lib и .a и ищет в нескольких каталогах.

-lobjc
Вам нужен этот особый случай -l вариант, чтобы связать Objective-C или
Программа Objective-C ++.

-nostartfiles
При связывании не используйте стандартные файлы запуска системы. Стандартная система
библиотеки используются нормально, если только -nostdlib or -nodefaultlibs используется.

-nodefaultlibs
При компоновке не используйте стандартные системные библиотеки. Только указанные вами библиотеки
передаются компоновщику, а параметры, определяющие связывание системных библиотек, такие
как "-static-libgcc" или "-shared-libgcc" игнорируются. Стандартные файлы запуска:
используется нормально, если только -nostartfiles используется.

Компилятор может генерировать вызовы «memcmp», «memset», «memcpy» и «memmove». Эти
записи обычно разрешаются записями в libc. Эти точки входа должны быть
доставляется через какой-либо другой механизм, когда указана эта опция.

-nostdlib
При компоновке не используйте стандартные файлы или библиотеки запуска системы. Нет запуска
файлы и только указанные вами библиотеки передаются компоновщику, а параметры
указание связывания системных библиотек, например "-static-libgcc" или
"-shared-libgcc" игнорируются.

Компилятор может генерировать вызовы «memcmp», «memset», «memcpy» и «memmove». Эти
записи обычно разрешаются записями в libc. Эти точки входа должны быть
доставляется через какой-либо другой механизм, когда указана эта опция.

Одна из стандартных библиотек, обошедшая -nostdlib и -nodefaultlibs is libgcc.a, чтобы
библиотека внутренних подпрограмм, которую GCC использует для преодоления недостатков отдельных
машины или специальные потребности для некоторых языков.

В большинстве случаев вам понадобится libgcc.a даже если вы хотите избежать использования других стандартных библиотек.
Другими словами, когда вы указываете -nostdlib or -nodefaultlibs ты должен обычно
указывать -lgcc также. Это гарантирует, что у вас нет неразрешенных ссылок на
подпрограммы внутренней библиотеки GCC. (Пример такой внутренней подпрограммы:
__главный, используется для обеспечения вызова конструкторов C ++.)

-пирог
Создайте независимый от позиции исполняемый файл для целей, которые его поддерживают. Для предсказуемой
результатов, вы также должны указать тот же набор параметров, который используется для компиляции (-fpie,
-fPIE, или подопции модели), когда вы указываете эту опцию компоновщика.

-рдинамический
Передать флаг -экспорт-динамический к компоновщику ELF на целевых объектах, которые его поддерживают. Этот
указывает компоновщику добавить в динамический символ все символы, а не только используемые.
стол. Эта опция необходима для некоторых случаев использования "dlopen" или для получения
следы внутри программы.

-s Удалите из исполняемого файла всю таблицу символов и информацию о перемещении.

-статический
В системах, поддерживающих динамическое связывание, это предотвращает связывание с общим
библиотеки. В других системах этот параметр не действует.

-общий
Создайте общий объект, который затем можно связать с другими объектами, чтобы сформировать
исполняемый файл. Не все системы поддерживают эту опцию. Для предсказуемых результатов вы должны
также укажите тот же набор параметров, который используется для компиляции (-fpic, -fPIC, или модель
подопции), когда вы указываете эту опцию компоновщика. [1]

-shared-libgcc
-статический-libgcc
В системах, которые обеспечивают libgcc как разделяемая библиотека, эти параметры заставляют использовать
либо общая, либо статическая версия соответственно. Если нет общей версии libgcc законопроект
созданные при настройке компилятора, эти параметры не действуют.

Есть несколько ситуаций, в которых приложение должно использовать общий libgcc
вместо статической версии. Самый распространенный из них - когда приложение
хочет генерировать и перехватывать исключения в разных разделяемых библиотеках. В этом случае,
каждая из библиотек, а также само приложение должны использовать общие libgcc.

Поэтому драйверы G ++ и GCJ автоматически добавляют -shared-libgcc всякий раз, когда вы строите
разделяемая библиотека или основной исполняемый файл, поскольку программы на C ++ и Java обычно используют
исключения, так что это правильный поступок.

Если вместо этого вы используете драйвер GCC для создания общих библиотек, вы можете обнаружить, что они
не всегда связаны с общим libgcc. Если GCC найдет, в его конфигурации
время, когда у вас есть компоновщик, отличный от GNU, или компоновщик GNU, который не поддерживает опцию
--eh-frame-hdr, он связывает общую версию libgcc в общие библиотеки
дефолт. В противном случае он использует преимущества компоновщика и оптимизирует связывание.
с общей версией libgcc, связавшись со статической версией libgcc,
дефолт. Это позволяет исключениям распространяться через такие разделяемые библиотеки без
расходы на перемещение во время загрузки библиотеки.

Однако, если предполагается, что библиотека или основной исполняемый файл генерирует или перехватывает исключения, вы
должен связать его с помощью драйвера G ++ или GCJ, в зависимости от языков, используемых в
программа, или используя опцию -shared-libgcc, так что он связан с общим
libgcc.

-статический-libasan
Когда -fsanitize = адрес опция используется для связывания программы, драйвер GCC
автоматически ссылается на либасан. Если либасан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либасан.
Команда -статический-libasan опция указывает драйверу GCC на ссылку либасан статически, без
обязательно статическое связывание других библиотек.

-static-libtsan
Когда -fsanitize = поток опция используется для связывания программы, драйвер GCC
автоматически ссылается на либцан. Если либцан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либцан.
Команда -static-libtsan опция указывает драйверу GCC на ссылку либцан статически, без
обязательно статическое связывание других библиотек.

-static-liblsan
Когда -fsanitize = утечка опция используется для связывания программы, драйвер GCC
автоматически ссылается на либлсан. Если либлсан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либлсан.
Команда -static-liblsan опция указывает драйверу GCC на ссылку либлсан статически, без
обязательно статическое связывание других библиотек.

-статический-libubsan
Когда -fsanitize = undefined опция используется для связывания программы, драйвер GCC
автоматически ссылается на либубсан. Если либубсан доступен как общая библиотека,
и -статический опция не используется, то эта ссылка на общую версию
либубсан, -статический-libubsan опция указывает драйверу GCC на ссылку либубсан
статически, без обязательного статического связывания других библиотек.

-статическая-libstdc ++
Когда г ++ программа используется для связывания программы на C ++, обычно она автоматически связывает
против которого выступает большинство исследователей в области общественного здравоохранения. libstdc ++. Если libstdc ++ доступен как общая библиотека, а -статический
опция не используется, то эта ссылка на общую версию libstdc ++, То есть
нормально нормально. Однако иногда бывает полезно заморозить версию libstdc ++
используется программой без перехода к полностью статической ссылке. В
-статическая-libstdc ++ вариант направляет г ++ драйвер для ссылки libstdc ++ статически, без
обязательно статическое связывание других библиотек.

-символический
При создании общего объекта привязывайте ссылки к глобальным символам. Предупреждать о любых
неразрешенные ссылки (если они не отменены опцией редактора ссылок -Xlinker -z
-Xlinker определение). Только несколько систем поддерживают эту опцию.

-T скрипт
Используйте скрипт как скрипт компоновщика. Этот вариант поддерживается большинством систем, использующих
Компоновщик GNU. Для некоторых целей, например для целей без операционной системы,
-T опция может потребоваться при связывании, чтобы избежать ссылок на неопределенные символы.

-Xlinker вариант
Проходить вариант как вариант для компоновщика. Вы можете использовать это для предоставления специфичных для системы
параметры компоновщика, которые GCC не распознает.

Если вы хотите передать параметр, который принимает отдельный аргумент, вы должны использовать -Xlinker
дважды, один раз для варианта и один раз для аргумента. Например, передать -утверждать
Определенияты должен написать -Xlinker -утверждать -Xlinker Определения. Это не работает
написать -Xlinker "-утверждать определения ", потому что это передает всю строку как
единственный аргумент, чего не ожидает компоновщик.

При использовании компоновщика GNU обычно удобнее передавать аргументы компоновщику
варианты с использованием вариант=ценностное синтаксис, чем отдельные аргументы. Например, вы
можно указать -Xlinker -Map = output.map , а не -Xlinker -Карта -Xlinker вывод.карта.
Другие компоновщики могут не поддерживать этот синтаксис для параметров командной строки.

-Вл,вариант
Проходить вариант как вариант для компоновщика. Если вариант содержит запятые, он разбит на
несколько вариантов в запятых. Вы можете использовать этот синтаксис для передачи аргумента в
вариант. Например, -Wl, -Map, output.map проходит -Карта вывод.карта компоновщику. Когда
используя компоновщик GNU, вы также можете получить тот же эффект с -Wl, -Map = output.map.

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях для LDFLAGS параметр -Wl, -z, relro используется.
Чтобы отключить, используйте -Wl, -z, норелро.

-u символ
Представьте себе символ символ не определено, чтобы связать модули библиотеки для определения
Это. Вы можете использовать -u несколько раз с разными символами для принудительной загрузки
дополнительные библиотечные модули.

Опции для Каталог Поиск
Эти параметры указывают каталоги для поиска файлов заголовков, библиотек и деталей.
компилятора:

-Iдиректория
Добавить каталог директория в начало списка каталогов для поиска по заголовку
файлы. Это можно использовать для переопределения файла системного заголовка, заменяя ваш собственный
версия, так как эти каталоги ищутся перед файлом заголовка системы
каталоги. Однако вы не должны использовать эту опцию для добавления каталогов, содержащих
файлы заголовков системы, предоставляемые поставщиком (используйте -система для этого). Если вы используете более одного
-I опция, каталоги просматриваются слева направо; стандартная система
каталоги идут после.

Если стандартная система включает каталог или каталог, указанный с помощью -система, Является
также указано с -I, -I опция игнорируется. Каталог все еще ищется, но
как системный каталог в его обычном положении в цепочке системных включений. Это для
убедитесь, что процедура GCC для исправления ошибочных системных заголовков и порядок для
Директива include_next не изменяется случайно. Если тебе действительно нужно изменить
порядок поиска для системных каталогов, используйте -ностдинк и / или -система настройки.

-iplugindir =директория
Установите каталог для поиска плагинов, которые передаются через -fplugin =имя вместо
-fplugin =путь/имя.так. Этот параметр не предназначен для использования пользователем, а только
проехал водитель.

-я цитируюдиректория
Добавить каталог директория в начало списка каталогов для поиска по заголовку
файлы только для случая #включают "файл"; их не ищут #включают <файл>,
в остальном точно так же, как -I.

-Lдиректория
Добавить каталог директория в список каталогов для поиска -l.

-Bпрефикс
Этот параметр указывает, где найти исполняемые файлы, библиотеки, включаемые файлы и
файлы данных самого компилятора.

Программа драйвера компилятора запускает одну или несколько подпрограмм. CPP, cc1, as и ld.
Он пытается префикс в качестве префикса для каждой программы, которую он пытается запустить, как с, так и без
машина/версия/.

Для каждой запускаемой подпрограммы драйвер компилятора сначала пытается -B префикс, если есть.
Если это имя не найдено, или если -B не указано, драйвер пробует два стандартных
префиксы, / usr / lib / gcc / и / usr / местные / библиотека / gcc /. Если ни один из этих результатов не
имя найденного файла, неизмененное имя программы ищется с помощью
каталоги, указанные в вашем PATH переменная среды.

Компилятор проверяет, не указан ли путь -B относится к каталогу, а
при необходимости в конце пути добавляется символ-разделитель каталогов.

-B префиксы, которые эффективно определяют имена каталогов, также применяются к библиотекам в
компоновщик, потому что компилятор переводит эти параметры в -L параметры для компоновщика.
Они также применяются для включения файлов в препроцессор, поскольку компилятор переводит
эти варианты в -система параметры препроцессора. В этом случае компилятор
добавляет включают к приставке.

Файл поддержки времени выполнения libgcc.a также можно искать, используя -B префикс, если
нужный. Если он там не найден, пробуются два стандартных префикса, указанные выше, и это
это все. Файл не попадает в ссылку, если он не найден с помощью этих средств.

Другой способ указать префикс, очень похожий на -B префикс - использовать среду
переменная GCC_EXEC_PREFIX.

Как особый кладж, если путь, предоставленный -B is [dir /] stageN /, Где N это число
в диапазоне от 0 до 9, то он заменяется на [dir /] включить. Это поможет с загрузкой-
обвязка компилятора.

-specs =файл
Разработка файл после того, как компилятор прочитает в стандарте функции файл, чтобы переопределить
значения по умолчанию, которые GCC программа-драйвер использует при определении, какие переключатели передать
в cc1, cc1plus, as, ldи т. д. Более одного -specs =файл можно указать на
в командной строке, и они обрабатываются в порядке слева направо.

--sysroot =директория
Используйте директория как логический корневой каталог для заголовков и библиотек. Например, если
компилятор обычно ищет заголовки в / usr / include и библиотеки в / USR / Lib, Он
вместо этого ищет каталог / usr / include и каталог / usr / lib.

Если вы используете и эту опцию, и -isysroot вариант, затем --sroot вариант
применяется к библиотекам, но -isysroot опция применяется к файлам заголовков.

Компоновщик GNU (начиная с версии 2.16) имеет необходимую поддержку для этого.
вариант. Если ваш компоновщик не поддерживает эту опцию, аспект файла заголовка
--sroot все еще работает, но аспект библиотеки - нет.

--no-sysroot-суффикс
Для некоторых целей к корневому каталогу, указанному с помощью --sroot,
в зависимости от других используемых опций, так что заголовки могут, например, быть найдены в
каталог / суффикс / usr / включить вместо каталог / usr / include. Эта опция отключает добавление
такого суффикса.

-Я- Эта опция устарела. Пожалуйста, используйте -я цитирую вместо этого для -I каталоги до
-Я- и удалите -Я-. Любые каталоги, которые вы укажете с помощью -I варианты до
-Я- вариант ищется только в случае #включают "файл"; их не обыскивают
для #включают <файл>.

Если дополнительные каталоги указаны с -I варианты после -Я-эти
каталоги ищутся по всем #включают директивы. (Обычно ВСЕ -I каталоги
используются таким образом.)

Кроме того, -Я- опция запрещает использование текущего каталога (где
текущий входной файл был получен из) в качестве первого каталога поиска для #включают "файл".
Невозможно отменить этот эффект -Я-. С -I. вы можете указать поиск
каталог, который является текущим при вызове компилятора. Это не совсем то
то же, что и препроцессор по умолчанию, но часто бывает удовлетворительным.

-Я- не запрещает использование стандартных системных каталогов для файлов заголовков.
Таким образом, -Я- и -ностдинк независимы.

Указание цель Машина и составитель Версия
Обычный способ запустить GCC - запустить исполняемый файл с именем GCCили машина-gcc когда перекрестно
компиляция, или машина-gcc-версия запустить версию, отличную от той, которая была установлена
последний.

Аппаратные средства Модели и Конфигурации
У каждого целевого типа машины могут быть свои особые параметры, начиная с -m, выбирать
среди различных моделей или конфигураций оборудования - например, 68010 против 68020, плавающий
сопроцессор или нет. Одна установленная версия компилятора может компилироваться для любой модели.
или конфигурации, в соответствии с указанными опциями.

Некоторые конфигурации компилятора также поддерживают дополнительные специальные параметры, обычно для
совместимость с другими компиляторами на той же платформе.

AAArch64 Опции

Эти параметры определены для реализаций AArch64:

-mabi =имя
Сгенерируйте код для указанной модели данных. Допустимые значения ilp32 для SysV-
как модель данных, где int, long int и указатель являются 32-битными, и lp64 для SysV-подобного
модель данных, где int - 32-битный, а long int и указатель - 64-битные.

Значение по умолчанию зависит от конкретной целевой конфигурации. Обратите внимание, что LP64 и
ABI ILP32 несовместимы с каналом связи; вы должны скомпилировать всю свою программу с одним и тем же
ABI и компоновка с совместимым набором библиотек.

-mbig-endian
Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию, когда GCC настроен для
aarch64_be - * - * цель.

-mgeneral-regs-only
Сгенерируйте код, который использует только общие регистры.

-с младшим порядком байтов
Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию, когда GCC настроен для
aarch64 - * - * но не aarch64_be - * - * цель.

-mcmodel = крошечный
Сгенерируйте код для крошечной модели кода. Программа и ее статически определенные символы
должны находиться в пределах 1 ГБ друг от друга. Указатели 64-битные. Программы могут быть статически
или динамически связаны. Эта модель реализована не полностью и в основном рассматривается как
небольшой.

-mcmodel = маленький
Сгенерируйте код для небольшой модели кода. Программа и ее статически определенные
символы должны находиться в пределах 4 ГБ друг от друга. Указатели 64-битные. Программы могут быть
статически или динамически связаны. Это модель кода по умолчанию.

-mcmodel = большой
Сгенерируйте код для большой модели кода. Это не делает никаких предположений об адресах и
размеры секций. Указатели 64-битные. Программы могут быть связаны только статически.

-mstrict-выравнивание
Не предполагайте, что невыровненные ссылки на память будут обрабатываться системой.

-Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра
Пропускайте или сохраняйте указатель фрейма в листовых функциях. Первое поведение - это
по умолчанию.

-mtls-dialect = desc
Используйте дескрипторы TLS в качестве механизма хранения локального потока для динамического доступа к TLS
переменные. Это значение по умолчанию.

-mtls-dialect = традиционный
Используйте традиционный TLS в качестве механизма локального хранилища потока для динамического доступа к TLS.
переменные.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Включите или отключите обходной путь для ошибки номер 53 ARM Cortex-A835769. Это
будет включать в себя вставку инструкции NOP между инструкциями памяти и 64-битными
целочисленные инструкции умножения с накоплением.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Включите или отключите обходной путь для ошибки номер 53 ARM Cortex-A843419. Это
Обход ошибки выполняется во время компоновки, и при этом будет передан только соответствующий флаг
компоновщику.

-март =имя
Укажите имя целевой архитектуры, необязательно с суффиксом одним или несколькими
модификаторы функций. Этот вариант имеет вид -март =арка{+[нет]которая}*, где
только допустимое значение для арка is armv8-а. Допустимые значения для которая
задокументировано в подразделе ниже.

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

GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки.

где -маршировать указывается без любого из -мтюн or -MCPU также уточняется,
код будет настроен для хорошей работы с целым рядом целевых процессоров, реализующих
целевая архитектура.

-mtune =имя
Укажите имя целевого процессора, для которого GCC должен настроить производительность
код. Допустимые значения для этой опции: родовой, Кора-a53, Кора-a57,
Кора-a72, гром, xgene1.

Кроме того, этот параметр может указывать, что GCC должен настраивать производительность кода.
для системы big.LITTLE. Допустимые значения для этой опции:
кора-а57.кора-а53, кора-а72.кора-а53.

Где ни один из -mtune =, -mcpu = or -март = указаны, код будет настроен на
хорошо работать с целым рядом целевых процессоров.

Этот параметр не может быть дополнен модификаторами функций.

-mcpu =имя
Укажите имя целевого процессора, необязательно с суффиксом одной или нескольких функций.
модификаторы. Этот вариант имеет вид -mcpu =процессор{+[нет]которая} *, где допустимые
значения для процессор такие же, как и для -мтюн.

Допустимые значения для которая задокументированы в подразделе ниже.

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

GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки (как будто -маршировать) и определить целевой процессор, для которого нужно
настроить на исполнение (как будто -мтюн). Если эта опция используется вместе с
-маршировать or -мтюн, эти параметры имеют приоритет перед соответствующей частью этого
опцию.

-маршировать и -MCPU модификаторы функций

Модификаторы функций, используемые с -маршировать и -MCPU может быть одним из следующих:

CRC Включите расширение CRC.

крипто-
Включите расширение Crypto. Это означает, что Advanced SIMD включен.

fp Включите инструкции с плавающей запятой.

Симд
Включите расширенные инструкции SIMD. Это означает, что инструкции с плавающей запятой
включено. Это значение по умолчанию для всех текущих возможных значений параметров. -маршировать и
-mcpu =.

Адаптева Богоявление Опции

Эти -m для Адаптева Богоявления определены варианты:

-mhalf-reg-файл
Не размещайте регистры в диапазоне «r32» ... «r63». Это позволяет коду работать на
варианты оборудования, в которых отсутствуют эти регистры.

-mprefer-короткие-insn-regs
Предпочтительно выделять регистры, которые позволяют генерировать короткие инструкции. Это может
приведет к увеличению количества инструкций, так что это может уменьшить или увеличить общее
размер кода.

-mbranch-cost =Num
Установите стоимость веток примерно на Num "простые" инструкции. Эта стоимость всего лишь
эвристический и не гарантирует получение согласованных результатов для всех выпусков.

-mcmove
Включите генерацию условных ходов.

-mnops =Num
Испускают Num NOP перед каждой второй сгенерированной инструкцией.

-mno-soft-cmpsf
Для сравнения с плавающей запятой одинарной точности выдайте инструкцию "fsub" и проверьте
флаги. Это быстрее, чем сравнение программного обеспечения, но может привести к неверным результатам.
в присутствии NaN или когда сравниваются два разных маленьких числа, так что
их разница рассчитывается как ноль. По умолчанию -msoft-cmpsf, Которая использует
более медленное, но совместимое со стандартом IEEE сравнение программного обеспечения.

-mstack-offset =Num
Установите смещение между вершиной стека и указателем стека. Например, значение 8
означает, что восемь байтов в диапазоне "sp + 0 ... sp + 7" могут использоваться листовыми функциями.
без выделения стека. Значения, отличные от 8 or 16 непроверены и вряд ли
Работа. Также обратите внимание, что этот параметр изменяет ABI; составление программы с
другое смещение стека, чем было скомпилировано в библиотеках, обычно не
Работа. Эта опция может быть полезна, если вы хотите оценить, есть ли другое смещение стека.
даст вам лучший код, но на самом деле использовать другое смещение стека для создания
рабочих программ, рекомендуется настроить набор инструментов с соответствующими
--with-stack-offset =Num опцию.

-мно-круглый-ближайший
Сделайте так, чтобы планировщик предполагал, что для режима округления установлено усечение. В
по умолчанию -круг-ближайший.

-mlong-вызовы
Если иное не указано в атрибуте, предположим, что все вызовы могут выходить за пределы
диапазон смещения инструкций "b" / "bl" и, следовательно, загрузка адреса функции
в регистр перед выполнением (в противном случае прямого) вызова. Это значение по умолчанию.

-mshort-звонки
Если иное не указано в атрибуте, предположим, что все прямые вызовы находятся в диапазоне
инструкций "b" / "bl", поэтому используйте эти инструкции для прямых вызовов. В
по умолчанию -mlong-вызовы.

-msmall16
Предположим, адреса могут быть загружены как 16-битные беззнаковые значения. Это не относится к
адреса функций, для которых -mlong-вызовы семантика.

-mfp-mode =Режим
Установите преобладающий режим единицы с плавающей запятой. Это определяет плавающий
точечный режим, который предоставляется и ожидается при вызове функции и времени возврата. Изготовление
этот режим соответствует режиму, который вам в основном нужен при запуске функции, может сделать ваш
программы меньше и быстрее, избегая ненужных переключений режимов.

Режим можно установить одно из следующих значений:

гость
Любой режим при вводе функции действителен и сохраняется или восстанавливается, когда функция
возвращается, и когда он вызывает другие функции. Этот режим полезен для компиляции
библиотеки или другие единицы компиляции, которые вы, возможно, захотите включить в различные
программы с различными преобладающими режимами FPU, а также удобство возможности
использование одного объектного файла перевешивает накладные расходы на размер и скорость для любого дополнительного режима
переключение, которое может потребоваться, по сравнению с тем, что потребовалось бы с более
конкретный выбор преобладающего режима FPU.

усекать
Это режим, используемый для вычислений с плавающей запятой с усечением (т. Е. Округление
в сторону нуля) режим округления. Это включает преобразование из числа с плавающей запятой в
целое число.

округлый
Это режим, используемый для вычислений с плавающей запятой с округлением до ближайшего или
даже режим округления.

Int Это режим, используемый для выполнения целочисленных вычислений в FPU, например, целочисленных
умножить или целочисленное умножение и накопление.

По умолчанию используется -mfp-mode = вызывающий

-мносплит-лохи
-мно-постинк
-mno-постмодифицировать
Твики генерации кода, отключающие, соответственно, разделение 32-битных загрузок,
генерация адресов после инкремента и генерация адресов после изменения. В
значения по умолчанию msplit-лохи, -mpost-incи -mpost-изменить.

-мновект-дабл
Измените предпочтительный режим SIMD на SImode. По умолчанию -mvect-двойной, Которая использует
DImode в качестве предпочтительного режима SIMD.

-max-vect-align =Num
Максимальное выравнивание для типов векторных режимов SIMD. Num может быть 4 или 8. По умолчанию
8. Обратите внимание, что это изменение ABI, хотя многие интерфейсы библиотечных функций
не затронуты, если они не используют векторные режимы SIMD в местах, которые влияют на размер и / или
выравнивание соответствующих типов.

-msplit-vecmove-рано
Перед перезагрузкой разделенный вектор перемещается на одно слово. Теоретически это может дать
лучше распределение регистров, но пока что, как правило, имеет место обратное.

-m1reg-Редж
Укажите регистр для хранения константы -1, что делает загрузку небольшого отрицательного значения
константы и определенные битовые маски быстрее. Допустимые значения для Редж r43 и r63,
которые определяют использование этого регистра в качестве фиксированного регистра, и нет, что означает, что нет
Регистр используется для этой цели. По умолчанию -m1reg-нет.

ARC Опции

Следующие параметры управляют вариантом архитектуры, для которого компилируется код:

-баррель-перевертыш
Сгенерируйте инструкции, поддерживаемые переключателем ствола. Это значение по умолчанию, если
-mcpu = ARC601 действует.

-mcpu =процессор
Установите тип архитектуры, использование регистров и параметры планирования инструкций для процессор.
Существуют также варианты ярлыков псевдонимов, доступные для обратной совместимости и
удобство. Поддерживаемые значения для процессор

ARC600
Скомпилировать для ARC600. Псевдонимы: -мА6, -MARC600.

ARC601
Скомпилировать для ARC601. Псевдоним: -MARC601.

ARC700
Скомпилировать для ARC700. Псевдонимы: -мА7, -MARC700. Это значение по умолчанию при настройке
--with-cpu = arc700.

-mdpfp
-mdpfp-компактный
FPX: создание инструкций FPX с двойной точностью, оптимизированных для компактной реализации.

-mdpfp-быстро
FPX: создание инструкций FPX с двойной точностью, оптимизированных для быстрой реализации.

-mno-dpfp-lrsr
Отключите инструкции LR и SR от использования вспомогательных регистров расширения FPX.

-меа
Генерация расширенных арифметических инструкций. В настоящее время только «дива», «добавляет», «подписки»,
и "sat16" поддерживаются. Это всегда включено для -mcpu = ARC700.

-mno-mpy
Не создавайте инструкции MPY для ARC700.

-mmul32x16
Генерация 32x16-битных команд умножения и Mac.

-mmul64
Сгенерируйте инструкции mul64 и mulu64. Действительно только для -mcpu = ARC600.

-мнорм
Сгенерировать инструкцию нормы. Это значение по умолчанию, если -mcpu = ARC700 действует.

-мспфп
-mspfp-компактный
FPX: создание инструкций FPX с одинарной точностью, оптимизированных для компактной реализации.

-mspfp-быстро
FPX: создание инструкций FPX с одинарной точностью, настроенных для быстрой реализации.

-мсимд
Включение генерации инструкций ARC SIMD с помощью встроенных функций для конкретной цели. Только действительный
для -mcpu = ARC700.

-msoft-поплавок
Эта опция проигнорирована; он предоставляется только для целей совместимости. Программное обеспечение
код с плавающей запятой генерируется по умолчанию, и это значение по умолчанию может быть отменено FPX
опции; мспфп, mspfp-компактныйили mspfp-быстро для одинарной точности и мдпфп, мдпфп-
компактныйили mdpfp-быстрый для двойной точности.

-mswap
Сгенерируйте инструкции по обмену.

Следующие параметры передаются ассемблеру, а также определяют препроцессор
символы макросов.

-mdsp-пакет
Передается ассемблеру для включения расширений DSP Pack A. Также устанавливает
символ препроцессора "__Xdsp_packa".

-mdvbf
Передано ассемблеру для включения двойного расширения бабочки viterbi. Также
устанавливает символ препроцессора «__Xdvbf».

-млок
Передается ассемблеру, чтобы включить расширение Locked Load / Store Conditional.
Также устанавливает символ препроцессора «__Xlock».

-mmac-d16
Передал ассемблеру. Также устанавливает символ препроцессора «__Xxmac_d16».

-ммак-24
Передал ассемблеру. Также устанавливает символ препроцессора «__Xxmac_24».

-мртск
Передается ассемблеру для включения 64-битного расширения счетчика отметок времени.
инструкция. Также устанавливает символ препроцессора «__Xrtsc».

-mswape
Передается ассемблеру для включения инструкции расширения порядка байтов подкачки.
Также устанавливает символ препроцессора «__Xswape».

-мелофония
Передается ассемблеру, чтобы включить инструкции двойного и одиночного операнда для
телефония. Также устанавливает символ препроцессора «__Xtelephony».

-мкси
Передается ассемблеру для включения расширения памяти XY. Также устанавливает
символ препроцессора «__Xxy».

Следующие параметры управляют тем, как аннотируется код сборки:

-неправильный размер
Аннотируйте инструкции ассемблера предполагаемыми адресами.

-mannotate-выравнивание
Объясните, какие соображения по выравниванию приводят к решению о составлении инструкции.
короткие или длинные.

Компоновщику передаются следующие параметры:

-Марклинукс
Передается компоновщику, чтобы указать использование эмуляции "arclinux". Этот вариант
включен по умолчанию в цепочках инструментов, созданных для "arc-linux-uclibc" и
"arceb-linux-uclibc" нацеливается, когда профилирование не запрашивается.

-marclinux_prof
Передается компоновщику, чтобы указать использование эмуляции "arclinux_prof". Этот
опция включена по умолчанию в цепочках инструментов, созданных для "arc-linux-uclibc" и
"arceb-linux-uclibc" нацеливается при запросе профилирования.

Следующие параметры управляют семантикой сгенерированного кода:

-mepilogue-cfi
Включение генерации информации о кадрах вызова для эпилогов.

-mno-эпилог-cfi
Отключить создание информации о кадре вызова для эпилогов.

-mlong-вызовы
Генерировать инснс звонков как регистр косвенных звонков, тем самым обеспечивая доступ ко всем
32-битный диапазон адресов.

-mmedium-звонки
Не используйте для вызовов менее 25-битный диапазон адресации, который является доступным смещением.
для безусловной инструкции перехода и ссылки. Условное выполнение функции
вызовы подавляются, чтобы разрешить использование 25-битного диапазона, а не 21-битного диапазона
с условным переходом и ссылкой. Это значение по умолчанию для цепочек инструментов, созданных для
Цели "arc-linux-uclibc" и "arceb-linux-uclibc".

-mno-sdata
Не создавайте ссылки на sdata. Это значение по умолчанию для цепочек инструментов, созданных для
Цели "arc-linux-uclibc" и "arceb-linux-uclibc".

-mucb-mcount
Инструмент с вызовами mcount, используемый в коде UCB. Т.е. делать подсчет в вызываемом,
не звонящий. По умолчанию приборы ARC подсчитываются в вызывающем абоненте.

-mvolatile-кэш
Для непостоянных ссылок используйте доступ к обычно кэшированной памяти. Это значение по умолчанию.

-mno-volatile-кеш
Включите обход кеша для изменчивых ссылок.

Следующие параметры позволяют точно настроить генерацию кода:

злобный звонок
Оптимизируйте выравнивание для инструкций по вызову.

-mauto-modify-reg
Включите использование предварительной / пост-модификации со смещением регистра.

-mbbit-глазок
Включите bbit peephole2.

-mno-brcc
Эта опция отключает проход для конкретной цели в arc_reorg для создания "BRcc"
инструкции. Он не влияет на генерацию BRcc, управляемую проходом комбайнера.

-mcase-вектор-пкрел
Используйте таблицы корпусов переключателей относительно ПК - это позволяет сократить таблицу корпусов. Это
по умолчанию для -Операционные системы.

-mcompact-casei
Включить компактный шаблон casei. Это значение по умолчанию для -Операционные системы.

-mno-cond-exec
Отключите специальный проход ARCompact для генерации инструкций условного выполнения. В связи
для задержки планирования слотов и взаимодействия между номерами операндов, размерами букв,
длины инструкций, а также поддержка условного выполнения, не зависящие от цели
pass для генерации условного выполнения часто отсутствует, поэтому порт ARC сохранил
специальный проход, который пытается найти более условное выполнение, генерирующее
возможности после распределения регистров, сокращения ветвей и планирования слотов задержки
было сделано. Этот проход обычно, но не всегда, улучшает производительность и код.
размер, за счет дополнительного времени компиляции, поэтому есть возможность переключить
это от. Если у вас есть проблема с инструкциями вызова, превышающими их допустимое смещение
диапазон, потому что они условны, вам следует подумать об использовании -mmedium-звонки
.

-крупно-ветвистый
Включите использование шаблона cbranchsi перед перезагрузкой.

-mexpand-adddi
Разверните "adddi3" и "subdi3" во время генерации RTL в "add.f", "adc" и т. Д.

-mindexed-load
Включите использование индексированных нагрузок. Это может быть проблематично, потому что некоторые оптимизаторы
затем предположим, что индексированные хранилища существуют, что не так.

-млра
Включите распределение локальных регистров. Это все еще экспериментальный вариант для ARC, поэтому по умолчанию
компилятор использует стандартную перезагрузку (т.е. -мно-лра).

-млра-приоритет-нет
Не указывайте приоритет для целевых регистров.

-mlra-приоритет-компактный
Укажите приоритет целевого регистра для r0..r3 / r12..r15.

-mlra-priority-некомпактный
Уменьшите приоритет целевого регистратора для r0..r3 / r12..r15.

-мно-милликод
При оптимизации по размеру (используя -Операционные системы), прологи и эпилоги, которые надо сохранить или
восстановление большого количества регистров часто сокращается с помощью вызова специального
функция в libgcc; это называется милликод вызов. Как эти звонки могут ставить
проблемы с производительностью и / или вызывают проблемы при связывании нестандартным способом,
эта опция предназначена для отключения генерации вызовов милликода.

-mixed-code
Настройте распределение регистров, чтобы помочь генерации 16-битных инструкций. Это обычно
эффект уменьшения среднего размера инструкции при увеличении инструкции
сосчитать.

-mq-класс
Включите альтернативные инструкции 'q'. Это значение по умолчанию для -Операционные системы.

-mRcq
Включите обработку ограничений Rcq - от этого зависит генерация большинства сокращенных кодов. Это
по умолчанию.

-mRcw
Включить обработку ограничений Rcw - от этого во многом зависит ccfsm condexec. Это
по умолчанию.

-msize-level =уровень
Точная оптимизация размера в отношении длины команд и выравнивания. В
признанные ценности для уровень составляют:

0 Без оптимизации размера. Этот уровень устарел и рассматривается как 1.

1 Краткие инструкции используются случайно.

2 Кроме того, устраняется выравнивание циклов и кода после удаления барьеров.

3 Кроме того, опциональное выравнивание данных отбрасывается, а опция Os включен.

По умолчанию это 3 когда -Операционные системы действует. В противном случае поведение, когда это не
набор эквивалентен уровню 1.

-mtune =процессор
Установите параметры планирования инструкций для процессор, отменяя любые подразумеваемые -mcpu =.

Поддерживаемые значения для процессор

ARC600
Настройтесь на процессор ARC600.

ARC601
Настройтесь на процессор ARC601.

ARC700
Настройтесь на процессор ARC700 со стандартным блоком умножения.

ARC700-xmac
Настройтесь на процессор ARC700 с блоком XMAC.

ARC725D
Настройтесь на процессор ARC725D.

ARC750D
Настройтесь на процессор ARC750D.

-mmultcost =Num
Предполагаемая стоимость инструкции умножения с 4 приравнивается к обычной инструкции.

-munalign-prob-threshold =вероятность
Установите порог вероятности для невыровненных ветвей. При настройке на ARC700 и
Оптимизируя скорость, желательно выводить ветви без заполненного слота задержки
невыровненный и длинный, если профилирование не указывает, что вероятность перехода
быть взят ниже вероятность. По умолчанию (REG_BR_PROB_BASE / 2), т.е. 5000.

Следующие параметры поддерживаются для обратной совместимости, но теперь не рекомендуются
и будет удален в следующем выпуске:

-маргонавт
Устаревший FPX.

-mbig-endian
-ЭБ Скомпилируйте код для целей с прямым порядком байтов. Использование этих параметров теперь не рекомендуется. Пользователи
желая использовать код с прямым порядком байтов, следует использовать цели "arceb-elf32" и "arceb-linux-uclibc"
при построении цепочки инструментов, для которой по умолчанию используется прямой порядок байтов.

-с младшим порядком байтов
-EL Скомпилируйте код для целей с прямым порядком байтов. Использование этих параметров теперь не рекомендуется.
Пользователи, которым нужен код с прямым порядком байтов, должны использовать "arc-elf32" и "arc-linux-uclibc".
целей при построении цепочки инструментов, для которых по умолчанию используется прямой порядок байтов.

-mbarrel_shifter
Заменен на -баррель-перевертыш

-mdpfp_compact
Заменен на -mdpfp-компактный

-mdpfp_fast
Заменен на -mdpfp-быстро

-mdsp_packa
Заменен на -mdsp-пакет

-MEA
Заменен на -меа

-mmac_24
Заменен на -ммак-24

-mmac_d16
Заменен на -mmac-d16

-mspfp_compact
Заменен на -mspfp-компактный

-mspfp_fast
Заменен на -mspfp-быстро

-mtune =процессор
Наши ценности arc600, arc601, arc700 и arc700-xmac для процессор заменены на ARC600, ARC601,
ARC700 и ARC700-xmac соответственно

-multcost =Num
Заменен на -mmultcost.

ARM Опции

Эти -m параметры определены для порта ARM:

-mabi =имя
Сгенерировать код для указанного ABI. Допустимые значения: БТР-ГНУ, АТПК, аапс,
AAPCS-Linux и iwmmxt.

-mapcs-рамка
Сгенерируйте кадр стека, соответствующий стандарту вызова процедур ARM для всех
функций, даже если это не является строго необходимым для правильного выполнения кода.
Указание -fomit-frame-pointer с этой опцией заставляет кадры стека не быть
сгенерирован для листовых функций. По умолчанию -мно-БТР-рама.

-карты
Это синоним -mapcs-рамка.

-mthumb-интерворк
Сгенерируйте код, поддерживающий вызов между наборами инструкций ARM и Thumb.
Без этой опции на архитектурах до v5 два набора инструкций не могут быть
надежно используется внутри одной программы. По умолчанию -mno-thumb-взаимодействие, так как немного
код большего размера создается, когда -mthumb-интерворк указан. В конфигурациях AAPCS
эта опция бессмысленна.

-mno-sched-пролог
Предотвратить изменение порядка инструкций в прологе функции или слияние
эти инструкции с инструкциями в теле функции. Это означает, что все
функции начинаются с узнаваемого набора инструкций (или на самом деле с одной из
из небольшого набора различных прологов функций), и эту информацию можно использовать для
найдите начало функций внутри исполняемого фрагмента кода. По умолчанию
-msched-пролог.

-mfloat-abi =имя
Указывает, какой ABI с плавающей запятой использовать. Допустимые значения: легонько, софтфп и
жесткий.

Указание легонько заставляет GCC генерировать вывод, содержащий вызовы библиотеки для плавающих
точечные операции. софтфп позволяет генерировать код с использованием аппаратных средств с плавающей запятой
инструкции, но по-прежнему использует соглашения о вызовах soft-float. жесткий позволяет
генерация инструкций с плавающей запятой и использует соглашения о вызовах, специфичные для FPU.

Значение по умолчанию зависит от конкретной целевой конфигурации. Обратите внимание, что жесткое плавание
и ABI с плавным перемещением не совместимы по ссылкам; вы должны скомпилировать всю свою программу с
тот же ABI и линк с совместимым набором библиотек.

-с младшим порядком байтов
Сгенерируйте код для процессора, работающего в режиме прямого порядка байтов. Это значение по умолчанию для
все стандартные конфигурации.

-mbig-endian
Сгенерировать код для процессора, работающего в режиме прямого байта; по умолчанию компилируется
код для процессора с прямым порядком байтов.

-mwords-little-endian
Этот параметр применяется только при генерации кода для процессоров с прямым порядком байтов. Генерировать
код для порядка слов с прямым порядком байтов, но с прямым порядком байтов. То есть байт
порядок формы 32107654. Примечание: эту опцию следует использовать только в том случае, если вам требуется
совместимость с кодом для процессоров ARM с прямым порядком байтов, созданным версиями
компилятор до 2.8. Эта опция устарела.

-март =имя
Это определяет имя целевой архитектуры ARM. GCC использует это имя для
определить, какие инструкции он может выдавать при генерации ассемблерного кода. Этот
опция может использоваться вместе с или вместо -mcpu = вариант. Допустимый
имена: ARMv2, Armv2a, ARMv3, армв3м, ARMv4, Armv4t, ARMv5, Armv5t, Armv5e,
Armv5te, ARMv6, Armv6j, Armv6t2, Armv6z, Armv6zk, армв6-м, ARMv7, armv7-а, armv7-р,
армв7-м, armv7e-м, Armv7ve, armv8-а, armv8-a + crc, iwmmxt, iwmmxt2, ep9312.

-march = armv7ve это архитектура armv7-a с расширениями виртуализации.

-march = armv8-a + crc позволяет генерировать код для архитектуры ARMv8-A вместе с
необязательные расширения CRC32.

-march = родной заставляет компилятор автоматически определять архитектуру сборки
компьютер. В настоящее время эта функция поддерживается только в GNU / Linux, а не во всех
архитектуры признаны. Если автоопределение не помогло, у опции нет
Эффект.

-mtune =имя
Этот параметр указывает имя целевого процессора ARM, для которого GCC должен настраиваться.
производительность кода. Для некоторых реализаций ARM лучшая производительность может быть
получается с помощью этой опции. Допустимые имена: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, рука7м, рука7д, рука7дм, Arm7di, Arm7dmi, arm70,
arm700, рука700i, arm710, рука710c, arm7100, arm720, arm7500, рука7500fe, Arm7tdmi,
Arm7tdmi-s, рука710т, рука720т, рука740т, сильная рука, сила110, сила1100,
сила1110, arm8, arm810, arm9, рука9е, arm920, рука920т, рука922т, рука946е-с,
рука966е-с, рука968е-с, рука926ej-s, рука940т, Arm9tdmi, Arm10tdmi, рука1020т, рука1026ej-s,
рука10е, рука1020е, рука1022е, рука1136j-s, рука1136jf-s, mpcore, mpcorenovfp, рука1156т2-с,
рука1156т2ф-с, рука1176jz-s, рука1176jzf-s, Кора-a5, Кора-a7, Кора-a8, Кора-a9,
Кора-a12, Кора-a15, Кора-a53, Кора-a57, Кора-a72, кора-r4, кора-r4f,
кора-r5, кора-r7, Кора-m7, Кора-m4, Кора-m3, Кора-m1, Кора-m0,
кора-m0plus, cortex-m1.small-множить, cortex-m0.small-множить,
cortex-m0plus.small-множить, чудо-pj4, масштаб, iwmmxt, iwmmxt2, ep9312, fa526,
fa626, fa606te, fa626te, фмп626, fa726te, xgene1.

Кроме того, этот параметр может указывать, что GCC должен настраивать производительность кода.
для системы big.LITTLE. Допустимые имена: кора-а15.кора-а7,
кора-а57.кора-а53, кора-а72.кора-а53.

-mtune = generic-арка указывает, что GCC должен настроить производительность для смеси
процессоры в архитектуре арка. Цель состоит в том, чтобы сгенерировать код, который хорошо работает на
текущие самые популярные процессоры, балансировка между оптимизациями, которые приносят пользу некоторым
ЦП в этом диапазоне и избежание проблем с производительностью других ЦП. Эффекты
этот параметр может измениться в будущих версиях GCC по мере того, как модели ЦП приходят и уходят.

-mtune = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в GNU / Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.

-mcpu =имя
Это указывает имя целевого процессора ARM. GCC использует это имя для получения
имя целевой архитектуры ARM (как если бы указано -маршировать) и процессор ARM
тип, для которого настраивается производительность (как если бы -мтюн). Где этот вариант
используется в сочетании с -маршировать or -мтюн, эти параметры имеют приоритет перед
соответствующая часть этого варианта.

Допустимые названия для этой опции такие же, как и для -мтюн.

-mcpu = generic-арка также допустимо и эквивалентно -март =арка
-mtune = generic-арка. Посмотреть -мтюн чтобы получить больше информации.

-mcpu = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в GNU / Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.

-mfpu =имя
Это указывает, какое оборудование с плавающей запятой (или аппаратная эмуляция) доступно на
цель. Допустимые имена: ВФП, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, неоновый, неон-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, неон-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, неон-fp-armv8и крипто-неон-fp-armv8.

If -msoft-поплавок указывается, это определяет формат значений с плавающей запятой.

Если выбранное оборудование с плавающей запятой включает расширение NEON (например, -мфпу=неоновый),
обратите внимание, что операции с плавающей запятой не генерируются проходом автоматической векторизации GCC.
если не -funsafe-математическая-оптимизация также указано. Это потому, что оборудование NEON
не полностью реализует стандарт IEEE 754 для арифметики с плавающей запятой (в
определенные денормальные значения рассматриваются как ноль), поэтому использование инструкций NEON может
привести к потере точности.

-mfp16-format =имя
Укажите формат типа «__fp16» с плавающей запятой половинной точности. Допустимый
имена нет, IEEEи альтернатива; по умолчанию нет, в этом случае "__fp16"
тип не определен.

-m структура-размер-граница =n
Размеры всех конструкций и объединений округляются до кратного количества
биты, установленные этой опцией. Допустимые значения: 8, 32 и 64. Значение по умолчанию.
варьируется для разных наборов инструментов. Для целевой инструментальной цепочки COFF значение по умолчанию -
8. Значение 64 разрешено только в том случае, если базовый ABI поддерживает его.

Указание большего числа может дать более быстрый и эффективный код, но также может
увеличить размер программы. Различные значения потенциально несовместимы.
Код, скомпилированный с одним значением, не обязательно может работать с кодом или библиотеками.
компилируются с другим значением, если они обмениваются информацией с помощью структур или объединений.

-маборт-на-невозврате
Сгенерируйте вызов функции "abort" в конце функции "noreturn". это
выполняется, если функция пытается вернуться.

-mlong-вызовы
-мно-долгие звонки
Сообщает компилятору выполнить вызовы функций, сначала загрузив адрес
функцию в регистр, а затем выполняет вызов подпрограммы в этом регистре. Этот
переключатель необходим, если целевая функция лежит за пределами 64-мегабайтной адресации
диапазон основанной на смещении версии инструкции вызова подпрограммы.

Даже если этот переключатель включен, не все вызовы функций превращаются в длинные вызовы.
Эвристика заключается в том, что статические функции, функции, которые имеют короткий звонок атрибут,
функции, которые находятся в рамках #прагма no_long_calls директива и
функции, определения которых уже были скомпилированы в текущей компиляции
единицы не превращаются в долгие звонки. Исключением из этого правила являются слабые
определения функций, функции с долгий звонок атрибут или . атрибут,
и функции, которые входят в сферу #прагма длинные_звонки директива всегда
превратились в долгие звонки.

По умолчанию эта функция отключена. Указание -мно-долгие звонки восстанавливает
поведение по умолчанию, как и размещение вызовов функций в рамках #прагма
long_calls_off директива. Обратите внимание, что эти переключатели не влияют на то, как компилятор
генерирует код для обработки вызовов функций через указатели функций.

-msingle-pic-база
Считайте регистр, используемый для адресации PIC, доступным только для чтения, а не загружайте его в
пролог для каждой функции. Система времени выполнения отвечает за инициализацию этого
до начала выполнения зарегистрируйтесь с соответствующим значением.

-mpic-register =Редж
Укажите регистр, который будет использоваться для адресации PIC. Для стандартного базового случая PIC
по умолчанию будет любой подходящий регистр, определенный компилятором. Для одной базы ПОС
случае по умолчанию R9 если цель основана на EABI или включена проверка стека,
в противном случае по умолчанию R10 .

-mpic-данные-текст-относительный
Предположим, что каждый сегмент данных относится к текстовому сегменту во время загрузки. Следовательно,
он позволяет обращаться к данным с использованием операций, связанных с ПК. Эта опция включена по умолчанию
для целей, отличных от VxWorks RTP.

-mpoke-имя-функции
Напишите название каждой функции в текстовом разделе, непосредственно перед функцией.
пролог. Сгенерированный код похож на этот:

t0
.ascii "arm_poke_function_name", 0
.выровнять
t1
.слово 0xff000000 + (t1 - t0)
Arm_poke_function_name
мов ip, сп
stmfd sp !, {fp, ip, lr, pc}
sub fp, ip, # 4

При выполнении обратной трассировки стека код может проверять значение «pc», хранящееся в «fp +».
0 ". Если функция трассировки затем смотрит на местоположение" pc - 12 ", и старшие 8 бит
set, то мы знаем, что есть имя функции, встроенное непосредственно перед этим
местоположение и длина "((pc [-3]) & 0xff000000)".

-мпалец
-мам
Выберите между генерацией кода, который выполняется в состояниях ARM и Thumb. По умолчанию для
большинство конфигураций заключается в генерации кода, который выполняется в состоянии ARM, но по умолчанию
можно изменить, настроив GCC с --with-mode =состояние вариант настройки.

-мтпкс-рама
Сгенерируйте кадр стека, соответствующий стандарту вызова процедуры большого пальца для
все нелистовые функции. (Листовая функция - это функция, которая не вызывает никаких других
функций.) По умолчанию -мно-тпкс-рамка.

-мтпкс-створка-рамка
Сгенерируйте кадр стека, соответствующий стандарту вызова процедуры большого пальца для
все функции листа. (Листовая функция - это функция, которая не вызывает никаких других функций.)
По умолчанию используется -mno-apcs-створка-рама.

-mcallee-супер-взаимодействие
Дает всем видимым извне функциям в компилируемом файле инструкцию ARM
установить заголовок, который переключается в режим Thumb перед выполнением остальной функции.
Это позволяет вызывать эти функции из не взаимодействующего кода. Этот вариант
недействителен в конфигурациях AAPCS, поскольку взаимодействие включено по умолчанию.

-mcaller-супер-взаимодействие
Позволяет правильно выполнять вызовы через указатели функций (включая виртуальные функции)
независимо от того, был ли скомпилирован целевой код для взаимодействия или нет.
Есть небольшие накладные расходы на выполнение указателя функции, если эта опция
включен. Эта опция недействительна в конфигурациях AAPCS, потому что взаимодействие
по умолчанию включен.

-mtp =имя
Укажите модель доступа для указателя локального хранилища потока. Действующие модели:
легонько, который вызывает вызовы "__aeabi_read_tp", cp15, который извлекает поток
указатель напрямую от "cp15" (поддерживается в архитектуре arm6k), и автоматический, который
использует лучший доступный метод для выбранного процессора. По умолчанию установлено
автоматический.

-mtls-dialect =диалект
Укажите диалект, который будет использоваться для доступа к локальному хранилищу потока. Два диалектS,
поддерживается ---гну и GNU2, гну диалект выбирает исходную схему GNU для
поддержка локальных и глобальных динамических моделей TLS. В GNU2 диалект выбирает GNU
схема дескриптора, которая обеспечивает лучшую производительность для разделяемых библиотек. GNU
схема дескриптора совместима с исходной схемой, но требует новых
Ассемблер, компоновщик и поддержка библиотек. Начальная и локальная модели exec TLS:
не зависит от этой опции и всегда используйте оригинальную схему.

-mword-перемещений
Создавать только абсолютные перемещения для значений размером в слово (например, R_ARM_ABS32). Это
включен по умолчанию для целей (uClinux, SymbianOS), где загрузчик времени выполнения накладывает
это ограничение, и когда -fpic or -fPIC указан.

-mfix-cortex-m3-ldrd
Некоторые ядра Cortex-M3 могут вызвать повреждение данных, когда инструкции "ldrd" с
используются перекрывающиеся регистры назначения и базовые регистры. Эта опция позволяет избежать генерации
эти инструкции. Эта опция включена по умолчанию, когда -mcpu = кора-м3 is
указано.

-мунифицированный-доступ
-mno-unaligned-доступ
Включает (или отключает) чтение и запись 16- и 32-битных значений из адресов
которые не выровнены по 16 или 32 бита. По умолчанию невыровненный доступ отключен для всех
pre-ARMv6 и все архитектуры ARMv6-M, а также включен для всех других архитектур. Если
невыровненный доступ не включен, тогда будут доступны слова в упакованных структурах данных
байт за раз.

Атрибут ARM "Tag_CPU_unaligned_access" будет установлен в сгенерированном объектном файле.
значение true или false, в зависимости от настройки этого параметра. Если не выровнен
доступ разрешен, тогда символ препроцессора "__ARM_FEATURE_UNALIGNED" также будет
определены.

-mneon-для-64 бит
Позволяет использовать Neon для обработки скалярных 64-битных операций. По умолчанию отключено
поскольку стоимость перемещения данных из регистров ядра в Neon высока.

-mslow-flash-данные
Предположим, загрузка данных из флеш-памяти происходит медленнее, чем загрузка инструкции. Поэтому буквально
нагрузка сведена к минимуму для лучшей производительности. Эта опция поддерживается только тогда, когда
компиляция для ARMv7 M-профиля и отключена по умолчанию.

-mrestrict-это
Ограничивает создание ИТ-блоков в соответствии с правилами ARMv8. ИТ-блоки могут
содержат только одну 16-битную инструкцию из выбранного набора инструкций. Этот
опция включена по умолчанию для режима большого пальца ARMv8.

AVR Опции

Эти параметры определены для реализаций AVR:

-mmcu =БУМ
Укажите архитектуру набора команд Atmel AVR (ISA) или тип MCU.

Значение по умолчанию для этой опции - @ tie {} "avr2".

GCC поддерживает следующие устройства AVR и ISA:

"avr2"
«Классические» устройства с объемом памяти программ до 8 @ tie {}. БУМ@tie {} = "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Классические" устройства с памятью программ до 8 @ tie {} КиБ и с "MOVW"
инструкцию. БУМ@tie {} = "ata5272", "ata6289", "attiny13", "attiny13a",
attiny2313, attiny2313a, attiny24, attiny24a, attiny25, attiny261,
attiny261a, attiny43u, attiny4313, attiny44, attiny44a, attiny45,
attiny461, attiny461a, attiny48, attiny84, attiny84a, attiny85,
attiny861, attiny861a, attiny87, attiny88, at86rf401.

"avr3"
"Классические" устройства с 16 @ связью {} КиБ до 64 @ связью {} КиБ программной памяти.
БУМ@tie {} = "at43usb355", "at76c711".

"avr31"
«Классические» устройства с 128 @ связью {} КиБ программной памяти. БУМ@tie {} = "atmega103",
"at43usb320".

"avr35"
"Классические" устройства с 16 @ tie {} KiB до 64 @ tie {} KiB программной памяти и с
инструкция "MOVW". БУМ@tie {} = "ata5505", "atmega16u2", "atmega32u2",
«atmega8u2», «attiny1634», «attiny167», «at90usb162», «at90usb82».

"avr4"
«Улучшенные» устройства с памятью программ объемом до 8 @ {} КиБ. БУМ@tie {} = "ata6285",
"ata6286", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8",
"atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a",
«atmega88p», «atmega88pa», «at90pwm1», «at90pwm2», «at90pwm2b», «at90pwm3»,
«at90pwm3b», «at90pwm81».

"avr5"
"Улучшенные" устройства с 16 @ связью {} КиБ до 64 @ связью {} КиБ программной памяти.
БУМ@tie {} = "ata5790", "ata5790n", "ata5795", "atmega16", "atmega16a",
"atmega16hva", "atmega16hva2", "atmega16hvb", "atmega16hvbrevb", "atmega16m1",
"atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a", "atmega164p",
"atmega164pa", "atmega165", "atmega165a", "atmega165p", "atmega165pa",
"atmega168", "atmega168a", "atmega168p", "atmega168pa", "atmega169", "atmega169a",
«atmega169p», «atmega169pa», «atmega26hvg», «atmega32», «atmega32a», «atmega32c1»,
"atmega32hvb", "atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega3250pa",
"atmega328", "atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406",
"atmega48hvf", "atmega64", "atmega64a", "atmega64c1", "atmega64hve", "atmega64m1",
"atmega64rfa2", "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
"atmega644p", "atmega644pa", "atmega645", "atmega645a", "atmega645p",
"atmega6450", "atmega6450a", "atmega6450p", "atmega649", "atmega649a",
«atmega649p», «atmega6490», «atmega6490a», «atmega6490p», «at90can32»,
"at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646",
«at90usb647», «at94k», «m3000».

"avr51"
«Улучшенные» устройства с 128 @ связью {} КиБ программной памяти. БУМ@tie {} = "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".

"avr6"
"Усовершенствованные" устройства с 3-х байтовым ПК, т.е. с более чем 128 @ связью {} КиБ программы
Память. БУМ@tie {} = "atmega2560", "atmega2561".

"avrxmega2"
Устройства "XMEGA" с более чем 8 @ tie {} KiB и до 64 @ tie {} памяти программ.
БУМ@tie {} = "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega32a4", "atxmega32a4u",
"atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".

"avrxmega4"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
Память. БУМ@tie {} = "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
памяти и более 64 @ галстук {} КиБ ОЗУ. БУМ@tie {} = "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти. БУМ@tie {} =
"atmxt540s", "atmxt540sreva", "atxmega128a3", "atxmega128a3u", "atxmega128b1",
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".

"avrxmega7"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти и более
64 @ tie {} КБ ОЗУ. БУМ@tie {} = "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avr1"
Этот ISA реализуется минимальным ядром AVR и поддерживается только для ассемблера.
БУМ@tie {} = "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-маккумулировать-аргументы
Накопить исходящие аргументы функции и получить / освободить необходимое пространство стека для
исходящие аргументы функции один раз в прологе / эпилоге функции. Без этой опции
исходящие аргументы помещаются перед вызовом функции и выводятся после нее.

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

Эта опция может привести к уменьшению размера кода для функций, которые выполняют несколько вызовов
функции, которые получают свои аргументы в стеке, как вызовы функций, подобных printf.

-mbranch-cost =стоят
Установите стоимость перехода для инструкций условного перехода на стоят. Разумные ценности
для стоят маленькие неотрицательные целые числа. Стоимость ветки по умолчанию равна 0.

-mcall-прологи
Прологи / эпилоги функций раскрываются как вызовы соответствующих подпрограмм. Код
размер меньше.

-мята8
Предположим, что int - это 8-битное целое число. Это влияет на размеры всех типов: char - это 1.
byte, int - 1 байт, long - 2 байта, long long - 4 байта. Пожалуйста
обратите внимание, что этот параметр не соответствует стандартам C, но приводит к уменьшению
размер кода.

-мно-прерывания
Сгенерированный код несовместим с аппаратными прерываниями. Размер кода меньше.

-мелакс
Попробуйте заменить "ЗВОНОК" соотв. Инструкция "JMP" более короткой "RCALL" соотв. «РЖМП»
инструкция, если применимо. Установка "-mrelax" просто добавляет параметр "--relax" к
Командная строка компоновщика при вызове компоновщика.

Ослабление перехода выполняется компоновщиком, потому что смещения перехода ранее не были известны.
код находится. Следовательно, код ассемблера, сгенерированный компилятором, такой же,
но инструкции в исполняемом файле могут отличаться от инструкций в ассемблере
код.

Если нужны заглушки компоновщика, необходимо включить расслабление, см. Раздел «EIND» и
заглушки компоновщика ниже.

-msp8
Рассматривать регистр указателя стека как 8-битный регистр, т.е. принимать старший байт
указатель стека равен нулю. В общем, вам не нужно устанавливать эту опцию вручную.

Этот параметр используется внутри компилятора для выбора и построения мультибиблиотек для
архитектуры "avr2" и "avr25". Эти архитектуры смешивают устройства с и без
«СПХ». Для любого параметра, кроме «-mmcu = avr2» или «-mmcu = avr25», драйвер компилятора
добавит или удалит этот параметр из командной строки компилятора, потому что
затем компилятор знает, есть ли у устройства или архитектуры 8-битный указатель стека и, следовательно,
нет регистрации "SPH" или нет.

-mstrict-X
Используйте регистр адреса «X» способом, предложенным оборудованием. Это означает, что "X" - это
используется только при косвенной адресации, адресации с постинкрементом или до декремента.

Без этой опции регистр «X» может использоваться так же, как «Y» или «Z», которые
затем эмулируется дополнительными инструкциями. Например, загрузка значения с помощью
Адресация "X + const" с небольшим неотрицательным "const <64" в регистр Rn is
выполнен как

adiw r26, const; X + = const
ld , ИКС ; = * Х
sbiw r26, const; X - = const

-mtiny-стек
Измените только младшие 8 битов @ tie {} указателя стека.

-Waddr-space-конвертировать
Предупреждать о преобразованиях между адресными пространствами в случае, если полученный адрес
пространство не содержится во входящем адресном пространстве.

«EIND» и устройства с более чем 128 байтами Ki Flash

Указатели в реализации имеют ширину 16 @ tie {} бит. Адрес функции или метки
представлен как адрес слова, так что косвенные переходы и вызовы могут быть нацелены на любой код
адрес в диапазоне 64 @ tie {} Ki слов.

Для облегчения непрямого перехода на устройства с более чем 128 @ tie {} байтов Ki
область памяти программ, есть специальный функциональный регистр, называемый "EIND", который служит
наиболее значимая часть целевого адреса, когда команды "EICALL" или "EIJMP"
используемый.

Косвенные переходы и вызовы на этих устройствах обрабатываются компилятором следующим образом и
с некоторыми ограничениями:

· Компилятор никогда не устанавливает «EIND».

· Компилятор неявно использует «EIND» в инструкциях «EICALL» / «EIJMP» или может читать
"EIND" напрямую для имитации косвенного вызова / перехода с помощью "RET"
инструкцию.

· Компилятор предполагает, что "EIND" никогда не изменяется во время запуска кода или во время
заявление. В частности, "EIND" не сохраняется / не восстанавливается в функции или прерывании.
служебная рутина пролог / эпилог.

· Для косвенных вызовов функций и вычисленного goto компоновщик генерирует заглушки. Заглушки
прыжковые площадки иногда также называют батуты. Таким образом, косвенный вызов / переход переходит к
такая заглушка. Заглушка содержит прямой переход к нужному адресу.

· Должна быть включена релаксация компоновщика, чтобы компоновщик создавал заглушки
правильно вся ситуация. См. Параметр компилятора "-mrelax" и параметр linler.
"--расслабляться". Есть угловые случаи, когда компоновщик должен генерировать заглушки, но
прерывается без релаксации и без полезного сообщения об ошибке.

· Сценарий компоновщика по умолчанию предназначен для кода с «EIND = 0». Если предполагается код
для работы с настройкой с «EIND! = 0» необходимо использовать настраиваемый скрипт компоновщика, чтобы
чтобы поместить разделы, названия которых начинаются с ".trampolines", в сегмент, где
"EIND" указывает на.

· Код запуска из libgcc никогда не устанавливает "EIND". Обратите внимание, что код запуска представляет собой смесь
кода из libgcc и AVR-LibC. О влиянии AVR-LibC на "EIND" см. AVR-
Руководство пользователя LibC ("http://nongnu.org/avr-libc/user-manual/").

· Для пользовательского кода запуска вполне законно заранее установить "EIND", например,
средство инициализации кода находится в разделе ".init3". Такой код запускается до
общий код запуска, который инициализирует ОЗУ и вызывает конструкторы, но после бита
код запуска из AVR-LibC, который устанавливает "EIND" в сегмент, в котором находится векторная таблица.
располагается.

#включают

статическая пустота
__attribute __ ((section (". init3"), naked, used, no_instrument_function))
init3_set_eind (недействительно)
{
__asm ​​volatile ("ldi r24, pm_hh8 (__ trampolines_start) \ n \ t"
"out% i0, r24" :: "n" (& EIND): "r24", "memory");
}

Символ «__trampolines_start» определен в скрипте компоновщика.

· Заглушки создаются компоновщиком автоматически, если выполняются следующие два условия.
встретились:

-
(Короче для порождать заглушки) вот так:

LDI r24, lo8 (GS ( ))
LDI r25, hi8 (GS ( ))

-
внешнюю сегмент, на котором расположены заглушки.

· Компилятор испускает такие модификаторы "gs" для меток кода в следующих ситуациях:

-
-
- -mcall-прологи>
параметр командной строки.

-
таблицы вы можете указать -fno-jump-столы параметр командной строки.

-
-
· Переход к несимвольным адресам, как это при поддержке:

int main (void)
{
/ * Вызов функции по адресу слова 0x2 * /
возврат ((int (*) (void)) 0x2) ();
}

Вместо этого должна быть установлена ​​заглушка, т.е. функция должна вызываться через символ
("func_4" в примере):

int main (void)
{
extern int func_4 (недействительно);

/ * Вызов функции по байтовому адресу 0x4 * /
return func_4 ();
}

и приложение будет связано с "-Wl, - defsym, func_4 = 0x4". В качестве альтернативы "func_4"
можно определить в скрипте компоновщика.

Обработка регистров специальных функций RAMPD, RAMPX, RAMPY и RAMPZ

Некоторые устройства AVR поддерживают доступную память размером более 64 @ tie {} KiB.
с 16-битными указателями. Чтобы получить доступ к ячейкам памяти за пределами этого диапазона 64 @ tie {} KiB,
содержимое регистра «RAMP» используется как старшая часть адреса: «X», «Y», «Z»
адресный регистр объединен со специальной функцией RAMPX, RAMPY, RAMPZ
Зарегистрируйтесь, соответственно, чтобы получить широкий адрес. Аналогичным образом "RAMPD" используется вместе с
прямая адресация.

· Код запуска инициализирует регистры специальной функции "RAMP" нулями.

· Если AVR Названный Адрес Пространства, названные адрес космосе кроме общего или "__flash"
используется, то "RAMPZ" устанавливается по мере необходимости перед операцией.

· Если устройство поддерживает RAM больше 64 @ tie {} KiB и компилятору необходимо изменить
«RAMPZ» для выполнения операции, «RAMPZ» сбрасывается в ноль после операции.

· Если устройство поставляется с определенным регистром RAMP, пролог / эпилог ISR
сохраняет / восстанавливает этот SFR и инициализирует его нулем на случай, если код ISR может
(неявно) использовать его.

· RAM больше 64 @ tie {} KiB не поддерживается GCC для целей AVR. Если вы используете
встроенный ассемблер для чтения из мест за пределами 16-битного диапазона адресов и изменения
один из регистров "RAMP", вы должны сбросить его до нуля после обращения.

Встроенные макросы AVR

GCC определяет несколько встроенных макросов, чтобы пользовательский код мог проверить наличие или
отсутствие особенностей. Практически любой из следующих встроенных макросов выводится из устройства.
возможности и, таким образом, запускается параметром командной строки "-mmcu =".

Дополнительные сведения о встроенных макросах для AVR см. AVR Названный Адрес Spaces и AVR Встроенный
функции.

«__AVR_ARCH__»
Встроенный макрос, который преобразуется в десятичное число, определяющее архитектуру и
зависит от "-mmcu =mcu " вариант. Возможные значения:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

для БУМ= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
«avrxmega2», «avrxmega4», «avrxmega5», «avrxmega6», «avrxmega7» соответственно. Если БУМ
указывает устройство, этот встроенный макрос устанавливается соответствующим образом. Например, с
"-mmcu = atmega8" макрос будет определен как 4.

"__AVR_Устройство__"
Установка "-mmcu =устройство" определяет этот встроенный макрос, который отражает имя устройства.
Например, «-mmcu = atmega8» определяет встроенный макрос «__AVR_ATmega8__»,
«-mmcu = attiny261a» определяет «__AVR_ATtiny261A__» и т. д.

Имена встроенных макросов следуют схеме «__AVR_Устройство__" в котором Устройство это
имя устройства согласно руководству пользователя AVR. Разница между Устройство во встроенном
макро и устройство в "-mmcu =устройство" в том, что последнее всегда в нижнем регистре.

If устройство это не устройство, а только базовая архитектура, такая как "avr51", этот макрос будет
не подлежит определению.

«__AVR_XMEGA__»
Устройство / архитектура принадлежит к семейству устройств XMEGA.

"__AVR_HAVE_ELPM__"
В устройстве есть инструкция «ELPM».

"__AVR_HAVE_ELPMX__"
В аппарате установлен «ЭЛПМ Р».n, Z " и "ELPM Rn, Z + " инструкциями.

"__AVR_HAVE_MOVW__"
В устройстве есть инструкция «MOVW» для выполнения 16-битных перемещений регистр-регистр.

"__AVR_HAVE_LPMX__"
В аппарате установлен «ЛПМ Р».n, Z " и «ЛПМ Рn, Z + " инструкциями.

"__AVR_HAVE_MUL__"
В устройстве есть аппаратный умножитель.

"__AVR_HAVE_JMP_CALL__"
Устройство имеет инструкции «JMP» и «CALL». Это относится к устройствам с
не менее 16 @ tie {} КиБ программной памяти.

"__AVR_HAVE_EIJMP_EICALL__"
«__AVR_3_BYTE_PC__»
Устройство имеет инструкции «EIJMP» и «EICALL». Так обстоит дело с устройствами
с более чем 128 @ tie {} КиБ программной памяти. Это также означает, что программа
counter (PC) имеет ширину 3 @ tie {} байта.

«__AVR_2_BYTE_PC__»
Счетчик программ (ПК) имеет ширину 2 @ tie {} байта. Это относится к устройствам до
128 @ tie {} КиБ программной памяти.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Регистр указателя стека (SP) обрабатывается как 8-битный или 16-битный регистр.
компилятор. На определение этих макросов влияет "-mtiny-stack".

"__AVR_HAVE_SPH__"
«__AVR_SP8__»
Устройство имеет регистр специальной функции SPH (старшая часть указателя стека) или имеет
соответственно 8-битный указатель стека. На определение этих макросов влияет
«-mmcu =», а в случаях «-mmcu = avr2» и «-mmcu = avr25» также «-msp8».

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Устройство имеет регистры специальных функций «RAMPD», «RAMPX», «RAMPY», «RAMPZ»,
соответственно.

«__NO_INTERRUPTS__»
Этот макрос отражает параметр командной строки "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Некоторые устройства AVR (AT90S8515, ATmega103) не должны пропускать 32-битные инструкции из-за
аппаратная ошибка. Инструкции пропуска - это «SBRS», «SBRC», «SBIS», «SBIC» и «CPSE».
Второй макрос определяется, только если также установлено «__AVR_HAVE_JMP_CALL__».

"__AVR_ISA_RMW__"
Устройство имеет инструкции чтения-изменения-записи (XCH, LAC, LAS и LAT).

"__AVR_SFR_OFFSET __ =компенсировать"
Инструкции, которые могут напрямую обращаться к регистрам специальных функций ввода-вывода, например "IN",
«OUT», «SBI» и т. Д. Могут использовать другой адрес, как если бы они были адресованы инструкцией к
доступ к ОЗУ как "LD" или "STS". Это смещение зависит от архитектуры устройства и имеет
следует вычесть из адреса RAM, чтобы получить соответствующий адрес I / O @ tie {}.

«__WITH_AVRLIBC__»
Компилятор настроен для использования вместе с AVR-Libc. Увидеть
Параметр конфигурации "--with-avrlibc".

Blackfin Опции

-mcpu =процессор[-видение]
Задает имя целевого процессора Blackfin. В настоящее время, процессор может быть одним из
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, бф542м,
бф544м, бф547м