англійськафранцузькийіспанська

Запуск серверів | Ubuntu > | Fedora > |


Значок OnWorks

g++-4.7 – Інтернет у хмарі

Запустіть g++-4.7 у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда g++-4.7, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


gcc - компілятор проекту GNU C і C++

СИНТАКСИС


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

Тут наведено лише найбільш корисні параметри; решту дивіться нижче. г ++ приймає
переважно такі ж варіанти, як ПКУ.

ОПИС


Коли ви викликаєте GCC, він зазвичай виконує попередню обробку, компіляцію, збирання та компонування.
«Загальні параметри» дозволяють зупинити цей процес на проміжній стадії. Для
Наприклад, -c опція каже не запускати компонувальник. Тоді вихід складається з object
файли, виведені асемблером.

Інші варіанти передаються на один етап обробки. Деякі параметри контролюють
препроцесор та інші сам компілятор. Ще інші параметри керують асемблером і
лінкер; більшість із них тут не задокументовано, оскільки вам рідко потрібно використовувати будь-який з них.

Більшість параметрів командного рядка, які можна використовувати з GCC, корисні для програм на C; коли
параметр корисний лише з іншою мовою (зазвичай C++), так сказано в поясненні
явно. Якщо в описі певного варіанта не згадується джерело
мову, ви можете використовувати цю опцію з усіма підтримуваними мовами.

повне г, повне г,, показали, від, номер, XNUMX ПКУ програма приймає параметри та імена файлів як операнди. Багато варіантів мають багато-
літерні назви; тому можливі кілька варіантів з однієї літери НЕ бути згрупованим: -дв дуже
відрізняється від -d -v.

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

Багато варіантів мають довгі назви, які починаються з -f або -W---наприклад,
-fmove-loop-інваріанти, - W формат і так далі. Більшість із них мають як позитивні, так і негативні
форми; негативна форма -ффу був би -fno-foo. Цей посібник документує лише один із
ці дві форми, незалежно від того, яка з них не є за замовчуванням.

ВАРІАНТИ


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

Загальний опції
-c -S -E -o файл -без канонічних префіксів -трубка -пропускні коди виходу -x мова -v
-### --допомога[=клас[, ...]] -- target-help -- версія -обгортка @файл -fplugin=файл
-fplugin-arg-ім'я=аргумент -fdump-ada-spec[-струнка] -fdump-go-spec=файл

C Language опції
-ansi -std =standard -fgnu89-inline -допоміжна інформація ім'я файлу
-безпараметрічні-змінні-функції -fno-asm -fno-вбудований -fno-вбудований-функція
-fhosted -автономний -fopenmp -fms-розширення -fplan9-розширення -триграфи
-no-integrated-cpp - традиційний -традиційний-cpp -паровий одинарної точності
-fcond-невідповідність -льон-вектор-перетворення -fsigned-bitfields -fsigned-char
-бітові поля funsigned -funsigned-char

C + + Language опції
-fabi-version=n -fno-контроль доступу -fcheck-новий -fconserve-space
-fconstexpr-depth=n -френд-ін'єкція -fno-elide-конструктори -fno-enforce-eh-specs
-for-scope -fno-for-scope -fno-gnu-ключові слова -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-розширення
-fno-nonansi-builtins -fnothrow-opt -fno-операторів-імена -fno-optional-diags
-дозвільна -fno-pretty-templates -frepo -fno-rtti -fstats -ftemplate-depth=n
-fno-threadsafe-statics -запобіжник-cxa-atexit -fno-слабий -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -Вабі -Wconversion-null
-Wctor-dtor-privacy -Wdelete-non-virtual-dtor -Звуження - Ні, крім
-Wnon-virtual-dtor - Замовлення -Weffc++ -Wstrict-null-sentinel
-Wno-non-template-friend -Лиття в стилі «Wold». -Перевантажений-віртуальний -Wno-pmf-перетворення
-Wsign-promo

Мета-С і Objective-C ++ Language опції
-fconstant-string-class=ім'я класу -fgnu-runtime -fnext-runtime -fno-nil-приймачі
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-виключення
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-класи -fzero-посилання
-gen-decls -Wassign-перехоплення -Протокол Wno -Селектор -Підборник-матч
-Wunddeclared-селектор

Language Незалежний опції
-fmessage-length=n -fdiagnostics-show-location=[один раз|кожен рядок]
-fno-diagnostics-show-option

попередження опції
-fsyntax-only -fmax-errors=n - педантичний -педантичні помилки -w -Векстра -Стінка
-Водреса -Waggregate-return -Warray-bounds -Wno-атрибути
-Wno-вбудований-макро-перевизначення -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual
-Wchar-індекси -Wclobbered -Коментар -Wперетворення -Wcoverage-невідповідність -Wno-cpp
-Wno-застарілий -Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero
-Двійне просування - Пусте тіло -Венум-порівняй -Wno-endif-мітки - Помилка -Помилка=*
-Wфатальні помилки -Wfloat-рівний - W формат -Wformat=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-нелітеральний -Wformat-безпека -Wformat-y2k
-Wframe-більший-ніж=довжина -Wno-free-nonheap-object -Wjump-misses-init
-Проігноровані-кваліфікатори - Прихований -Оголошення функції Wimplicit -Невідомий-інт
-Winit-self - Winline -Wmoybe-неініціалізований -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Більше ніж=довжина -Wunsafe-loop-optimizations
-Wlogical-op -Довго-довго -Wmain -Wmoybe-неініціалізований -Брекети
-Wmissing-field-ініціалізатори -Wmissing-format-attribute -Wmissing-include-dirs
-Wno-бризговик -Wno-multichar -Ненульовий -Без переповнення - Струни неперевершеної довжини -Упаковано
-Wpacked-bitfield-compat -Wpadded -Дужки -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-ариф -Wno-pointer-to-int-cast -Недостатньо-деклс
-Повернення -Wsequence-point - Тінь -Wsign-порівняти -Wsign-перетворення
-Wstack-протектор -Wstack-usage=довжина -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overflow -Wstrict-overflow=n -Wsuggest-attribute=[чистий|сопзЬ|noreturn]
-Вимикач -Wswitch-за замовчуванням -Wwwitch-enum -Wsync-nand -Wsystem-headers - Батути
-Втриграфи -межі типів -Вундеф -Wuninitialized -Wunknown-pragmas -Вно-прагми
-Wunsuffixed-float-constants -Wunused -Wunused-функція -Wunused-мітка
-Wunused-local-typedefs -Wunused-параметр -Wno-unused-result -Wunused-value
-Wunused-змінна -Wunused- but-set-parameter -Wunused-але-встановлена ​​змінна
-Wvariadic-макроси -Wvector-operation-performance -Wvla -Wvolatile-register-var
- Write-strings -Wzero-as-null-pointer-constant

C і Об’єктивно-C-лише попередження опції
-Wbad-function-cast -Wmissing-декларації -Wmissing-parameter-type
-Wmissing-прототипи -Wnested-externs -Декларація по-світу -Wold-style-definition
-Wstrict-прототипи -Традиційний -Wtraditional-перетворення
-Wdeclaration-after-statement -Wpointer-знак

Налагодження опції
-dлітери - dumpspecs - смітник - dumpversion -fdbg-cnt-список -fdbg-cnt=counter-
перелік цінностей -fdisable-ipa-pass_name -fdisable-rtl-pass_name -fdisable-rtl-передати-
ім'я=діапазон-список -fdisable-tree-pass_name -fdisable-tree-пропускне ім'я=діапазон-список
-fdump-noaddr -fdump-ненумерований -fdump-unnumbered-links -fdump-translation-unit[-n]
-fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-pass -fdump-statistics -fdump-tree-all -fdump-tree-original[-n]
-fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[-сирий] -fdump-tree-mudflap[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vrp[-n] -ftree-vectoriz-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=файл -fcompare-debug[=вибирає] -fcompare-debug-second
-feliminate-dwarf2-dups -feliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -придатний-вид-проходити
-придатний-вид-проходити=діапазон-список -fdebug-types-section -fmem-звіт -fpre-ipa-mem-report
-fpost-ipa-mem-report -fprofile-arcs -frandom-seed=рядок -fsched-verbose=n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage
-ftest-покриття -ftime-звіт -fvar-tracking -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gрівень -gtoggle -gcoff -gdwarf-версія -ggdb
-grecord-gcc-перемикачі -gno-record-gcc-перемикачі -gstabs -gstabs+ -gstrict-dwarf
-гно-строгий-карлик -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=старий=новий -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=спец-список] -p -стор
-print-file-name=бібліотека -print-libgcc-ім'я файлу -print-multi-directory
-print-multi-lib -print-multi-os-directory -print-prog-name=програма
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -зберігати темп
-save-temps=cwd -save-temps=obj -час[=файл]

Оптимізація опції
-falign-functions[=n] -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
-фасоціативно-мат -fauto-inc-dec -fгілля-ймовірності -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves -fcheck-data-deps
-fcombine-stack-adjustments -fconserve-stack -fcompare-elim -fcprop-реєстри
-фкросстрибки -fcse-folow-jumps -fcse-skip-blocks -fcx-fortran-rules
-fcx-limited-range -fdata-sections -fdce -fзатримка-гілка -fdelete-null-pointer-checks
-fdevirtualize -fdse -страшно-вставляючи -фіпа-шра -дорогі оптимізації
-ffat-lto-об'єкти -швидка математика -фінітна-математична -флоат-магазин
-fexcess-precision=стиль -поширювати вперед -ffp-contract=стиль -ffunction-sections
-fgcse -fgcse-після перезавантаження -fgcse-las -fgcse-lm -fgraphite-identity -fgcse-sm
-fif-перетворення -fif-перетворення2 -findirect-inlining -finline-функції
-finline-functions-called-once -finline-limit=n -finline-small-functions -fipa-cp
-fipa-cp-clone -fipa-matrix-reorg -фіпа-пта -фіпа-профіль -fipa-pure-const
-фіпа-довідка -fira-algorithm=алгоритм -fira-region=регіон -fira-loop-pressure
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -півопти
-fkeep-inline-functions -fkeep-static-consts -флоп-блок -розплющити
-шлюз-розв'язка -floop-strip-mine -floop-parallize-all -flto
-flto-compression-level -flto-partition=ALG -flto-звіт -fmerge-all-constants
-fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-інваріанти
fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
-fno-defer-pop -fno-function-cse -fno-guess-гілки-ймовірність -fno-inline
-fno-math-errno -fno-глазок -fno-глазок2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zerers -fno-toplevel-reorder -fno-trapping-math
-fno-zero-initialized-in-bss -fomit-frame-pointer -foptimize-register-move
-foptimize-sibling-calls -fpartial-inlining -fpeel-loops -fpredictive-commoning
-fprefetch-loop-arrays -fprofile-correction -fprofile-dir=шлях -fprofile-generate
-fprofile-generate=шлях -fprofile-use -fprofile-use=шлях -fprofile-values
-частотно-мат -вільно - Fregmove -реєстри імен -freorder-блоки
-freorder-blocks-and-partition -freorder-functions -frerun-cse-after-loop
-freschedule-modulo-scheduled-loops -округлення-мат -fsched2-use-superblocks
-fsched-тиск -fsched-spec-load -fsched-spec-load-dangerous
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-group-euristic
-fsched-critical-path-euristic -fsched-spec-insn-евристичний -fsched-rank-euristic
-fsched-last-insn-евристичний -fsched-dep-count-euristic -fschedule-insns
-fschedule-insns2 -fsection-анкери -вибіркове планування -fselective-scheduling2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fstack-протектор -fstack-protector-all -fstrict-aliasing
-fstrict-overflow -fthread-стрибки -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-безкоштовно-безкоштовно -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-parallelize-loops=n
-Free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc -Free-раковина -ftree-sra
-перетворення з трьома перемикачами -ftree-tail-merge -ftree-ter -ftree-vect-loop-version
-ftree-vectorize -ftree-vrp - за раз -закрутити всі петлі -закрутки-петлі
-funsafe-loop-optimizations -funsafe-math-optimizations -перемикачі-петлі
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb -f ціла програма -fwpa
-fuse-ld=Компонувальник -fuse-linker-plugin --парам ім'я=значення -O -O0 -O1 -O2 -O3 -Ос
-Швидко

Препроцесор опції
-Aпитання=відповідь -А-питання[=відповідь] -C -dD -dI -дМ -dN -Dмакрос[=деф] -E -H
-idirafter реж -включати файл -макроси файл -іпрефікс файл -iз префіксом реж
-iwithprefixbefore реж -ісистема реж -мультиліб реж -isysroot реж -M -ММ -MF -МГ
- депутат -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory
- переназначити -триграфи -undef -Uмакрос -Wp,варіант -Xpreprocessor варіант

Асемблер варіант
- Ва,варіант -Xassembler варіант

Linker опції
ім'я файлу-об'єкта -lбібліотека -nostartfiles -нові за замовчуванням -nostdlib - пиріг -rдинамічний -s
-статичний -static-libgcc -static-libstdc++ - поділилися -shared-libgcc - символічний -T сценарій
-Wl,варіант -Xlinker варіант -u символ

каталог опції
-Bпрефікс -Iреж -iplugindir=реж - цитатареж -Lреж -специфікації=файл -Я- --sysroot=реж

машина Залежний опції
AAArch64 опції -big-endian -mlittle-endian -mgeneral-regs-only -mcmodel = крихітний
-mcmodel=мала -mcmodel=великий -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=традиційний -березень=ім'я
-mcpu=ім'я -mtune=ім'я

Адаптєва Богоявлення опції -mhalf-reg-file -mprefer-short-insn-regs -mbranch-cost=Num
-mcmove -mnops=Num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-змінити
-mstack-offset=Num -mround-найближчий -mlong-дзвінки -mshort-calls -msmall16 -mfp-mode=режим
-mvect-подвійний -max-vect-align=Num -msplit-vecmove-early -m1reg-Реджо

ARM опції -mapcs-frame -mno-apcs-frame -mabi=ім'я -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -big-endian
-mwords-little-endian -mfloat-abi=ім'я -mfpe -mfp16-format=ім'я -mthumb-interwork
-mno-thumb-interwork -mcpu=ім'я -березень=ім'я -mfpu=ім'я -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-дзвінки -mno-long-cales -msingle-pic-base
-mno-single-pic-base -mpic-register=Реджо -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-назва-функції -mthumb -марм -mtpcs-frame
-mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking -mtp=ім'я
-mtls-dialect=діалект -mword-переміщення -mfix-cortex-m3-ldrd -муніципальний доступ
-mneon-for-64bits

AVR опції -mmcu=mcu -maccumulate-args -mbranch-cost=коштувати -mcall-prologues -м'ята8
-mno-переривання - розслабитися -mshort-calls -mstrict-X -mtiny-stack

Чорношкірий опції -mcpu=центральний процесор[-огляд] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-аномалія -mno-specld-anomaly -mcsync-аномалія
-mno-csync-аномалія -mlow-64k -mno-low64k -mstack-check-l1 - середня спільна бібліотека
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-дані -mno-sep-data -mlong-дзвінки -mno-long-cales
-mfast-fp -minline-plt - багатоядерний -mcorea -mcoreb -msdram -micplb

C6X опції -big-endian -mlittle-endian -березень=центральний процесор -msim -msdata=sda-type

КРІС опції -mcpu=центральний процесор -березень=центральний процесор -mtune=центральний процесор -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -мно-побічні ефекти
-mstack-align -mdata-align -mconst-align -m32-біт -m16-біт -m8-біт
-мно-пролог-епілог -mno-gotplt -melf -маут -melinux -mlinux -сим -sim2
-mmul-bug-обхідний шлях -mno-mul-bug-обхідний шлях

CR16 опції -mmac -mcr16cplus -mcr16c -msim -м'ята32 -mbit-ops -mdata-model=модель

Дарвін опції -всі_завантаження -allowable_client -арх -arch_errors_fatal -arch_only
-bind_at_load - пучок -bundle_loader -ім'я_клієнта -сумісність_версія
-Поточна версія -мертва_смуга -файл залежностей -dylib_file -dylinker_install_name
-динамічний -dynamiclib -список_експортованих_символів - список файлів -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-база_зображення -у цьому -ім'я_інсталяції -keep_private_externs -багатомодульний
-множення_визначено -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -нопребінд
-noseglinkedit -pagezero_size -передв'язка -prebind_all_twolevel_modules -private_bundle
-relocs_лише_читання -сектальний -сектооб'єкти символи - навіщо навантажувати -seg1addr -sectcreate
-сектооб'єкти символи -секторний -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_name_file -seglinkedit -сегпрот -segs_read_only_addr
-segs_read_write_addr -одномодульний -статичний -під_бібліотека -суб_парасолька
-дворівневий простір імен -парасолька -невизначений -список_неекспортованих_символів
-weak_reference_misparches -що завантажено -F – здогадався -gfull -mmacosx-version-min=версія
-mkernel -mone-byte-bool

Грудень Альфа опції -mno-fp-regs -msoft-float -мальфа-ас -mgas -миее
-міее-з-неточним -mieee-відповідний -mfp-trap-mode=режим -mfp-rounding-mode=режим
-mtrap-precision=режим -mbuild-constants -mcpu=тип процесора -mtune=тип процесора -mbwx -ммакс
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data
-msmall-text -великий текст -memory-latency=час

Грудень Альфа/VMS опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64

FR30 опції -msmall-модель -мно-лсім

FRV опції -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mподвійний -мно-подвійний -mmedia -мно-медіа
-ммуладд -мно-муладд -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
-mlinked-fp -mlong-дзвінки - злоякісні мітки -mlibrary-pic -macc-4 -macc-8 -mpack
-мно-пакет -мно-прапори -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-філія
-mno-vliw-філія -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=центральний процесор

GNU / Linux опції -mglibc -muclibc -мбіонічний -мандоїд -tno-android-cc -tno-android-ld

H8 / 300 опції - розслабитися -мх -РС -мн -м'ята32 -злоякісний-300

HPPA опції -березень=архітектурного типу - великий перемикач -mdisable-fpregs
-mdisable-indexing -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld
-mfixed-range=реєстр-діапазон -mjump-in-delay -mlinker-opt -mlong-дзвінки
-mlong-load-store -mno-big-switch -mno-disable-fpregs -mno-disable-indexing
-mno-швидкі-непрямі-дзвінки -мно-газ -мно-затримка -mno-long-load-store
-mno-portable-runtime -mno-soft-float -mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=тип процесора -mspace-regs
-msio -mwsio -munix=unix-std -nolibdld -статичний -нитки

i386 і x86-64 опції -mtune=тип процесора -березень=тип процесора -mfpmath=блок -masm=діалект
-mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -mno-широко-розмножувати -mrtd
-злоякісний-подвійний -mpreferred-stack-boundary=Num -mincoming-stack-boundary=Num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=вибирати -mvzeroupper -mprefer-avx128 -мммх
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -маес -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -minline-all-stringops
-minline-stringops-динамічно -mstringop-strategy=ALG -mpush-args
-maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double -mregparm=Num
-msseregparm -mveclibabi=тип -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -мно-червона-зона -mno-tls-direct-seg-refs -mcmodel=код-модель
-mabi=ім'я -maddress-mode=режим -м32 -м64 -mx32 -mlarge-data-threshold=Num -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 і x86-64 Windows опції -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread - municode -mwin32 -mwindows -fno-set-stack-executable

IA-64 опції -big-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-Name -msdata -mno-sdata -mconstant-gp -mauto-pic
-змішаний-божевільний -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm - борошнисті стоп-біти
-mfixed-range=реєстр-діапазон -mtls-size=tls-size -mtune=тип процесора -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

IA-64/VMS опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64

LM32 опції -mbarrel-shift-enabled -mdivid-увімкнено -mmultiply-enabled
-msign-extend-enabled -з підтримкою muser

M32R/D опції -m32r2 -m32rx -m32r -mdebug -злоякісні петлі -mno-align-loops
-missue-rate=номер -mbranch-cost=номер -mmodel=код-розмір-тип-модель -msdata=sdata-
тип -mno-flush-func -mflush-func=ім'я -mno-flush-trap -mflush-trap=номер -G Num

M32C опції -mcpu=центральний процесор -msim -memregs=номер

M680x0 опції -березень=арка -mcpu=центральний процесор -mtune=мелодія -м68000 -м68020 -m68020-40
-m68020-60 -м68030 -м68040 -м68060 -mcpu32 -м5200 -m5206e -m528x -м5307 -м5407
-mcfv4e -мбітфілд -mno-бітове поле -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -мно-див -mshort -мно-короткі -mhard-float -м68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-дані -mno-sep-data -mshared-library-id=n
- середня спільна бібліотека -mno-id-shared-library -mxgot -mno-xgot

MCore опції -mhardlit -mno-hardlit -mdiv -мно-див -mrelax-миттєво
-mno-relax-миттєво -mwide-bitfields -mno-wide-bitfields -m4byte-функції
-mno-4byte-функції -mcallgraph-дані -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -мно-лсім -mlittle-endian -big-endian -м210 -м340
-mstack-increment

MeP опції -mabsdiff -mall-opts -maverage -based=n -mbitops -mc=n -mclip
-mconfig=ім'я -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -мел -міо-леткі -мл
-mleadz -мм -mminmax -Мульт -mno-opts - повторити -РС -мсатур -msdram -msim -msimnovec
-mtf -mtiny=n

MicroBlaze опції -msoft-float -mhard-float -msmall-ділить -mcpu=центральний процесор -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-шаблон-порівняти -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-множення-високий -mxl-float-convert -mxl-float-sqrt
-mxl-mode-додаток-модель

MIPS опції -ТО -EB -березень=арка -mtune=арка -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=ABI -mabicalls -mno-abicalls
-mshared -мно-спільний -mplt -мно-плт -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=типу fpu -msmartmips -mno-smartmips -неповноцінний-неодружений
-мнопарно-одинарні -mdmx -mno-mdmx -mips3d -mno-mips3d - ммт -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNum -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -мно-гопт -вбудовані дані
-mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-readable=установка -msplit-адреси -mno-split-адреси -mexplicit-relocs
-mno-explicit-relocs -mcheck-zero-division -мно-перевірка-нуль-ділення -mрозділяти-пастки
-mdivide-breaks -mmemcpy -mno-memcpy -mlong-дзвінки -mno-long-cales -ммад -мно-божевільний
-змішаний-божевільний -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=функц -mno-flush-func -mbranch-cost=Num - імовірно, що гілка
-мно-гілка-ймовірно -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-дзвінки -mno-relax-pic-calls -mmcount-ra-адреса

MMIX опції -mlibfuncs -mno-libfuncs -мепсилон -мно-епсилон -mabi=gnu
-mabi=mmixware -mzero-розширити -mknuthdiv -mtolevel-symbols -melf -mbranch-передбачити
-мно-гілка-передбачити -бази-адреси -mno-base-адреси -msingle-exit
-мно-одновихідні

MN10300 опції -mmult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=ЦП-
тип -mreturn-pointer-on-d0 -mno-crt0 - розслабитися -mliw -msetlb

ПДП-11 опції -mfpu -msoft-float -mac0 -mno-ac0 -м40 -м45 -м10 -mbcopy
-mbcopy-builtin -м'ята32 -mno-int16 -м'ята16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -мно-абши -мфілія-дорого -mbranch-дешево
-munix-asm -mdec-asm

пікочіп опції -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-мно-неефективні-попередження

PowerPC опції Див. Параметри RS/6000 і PowerPC.

RL78 опції -msim -mmul=немає -mmul=g13 -mmul=rl78

RS / 6000 і PowerPC опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель - повноваження
-мно-сила -mpower2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -мальтівець
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
-mnew-mnemonics -мнемотехніка -mfull-toc -mminimal-toc -mno-fp-in-toc
-mno-sum-in-toc -м64 -м32 -mxl-compat -mno-xl-compat -mpe - злоякісна сила
-злоякісний-природний -msoft-float -mhard-float - множинні -мно-множинний -msingle-float
-mdouble-float -msimple-fpu -mstring -мно-рядок -оновити -mno-оновлення
-mavoid-indexed-addresses -mno-уникати-індексованих-адрес -змішаний-божевільний -mno-fused-madd
-mbit-align -mno-bit-align -mstrict-align -mno-strict-align -mrelocatable
-мнопереміщаються -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -маленький
-mlittle-endian -великий -big-endian -mdynamic-no-pic -мальтівець -mswdiv
-msingle-pic-base -mpriritize-restricted-insns=пріоритет
-msched-costly-dep=тип_залежності -minsert-sched-nops=схема -mcall-sysv
-mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=abi-тип -msecure-plt
-mbss-plt -mblock-move-inline-limit=Num -misel -мно-ісел -misel=так -misel=ні -mspe
-мно-спе -mspe=так -mspe=ні - утруднений -mgen-cell-microcode -mwarn-cell-microcode
-mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=так
-mfloat-gprs=ні -mfloat-gprs=один -mfloat-gprs=подвійний -мпрототип -мно-прототип
-msim -mmvme - шалено - жовтий ніж -член -msdata -msdata=вибирати -mvxworks -G Num
-нитка -mrecip -mrecip=вибирати -мно-рецепт -mrecip-точність -мно-рецепт-точність
-mveclibabi=тип -mfriz -mno-friz -mpointers-to-nested-functions
-mno-вказівники-вкладені-функції -msave-toc-indirect -mno-save-toc-indirect

RX опції -m64bit-подвійники -m32bit-подвійники -fpu -nofpu -mcpu= -big-endian-data
-mlittle-endian-data -msmall-data -msim -мно-сім -mas100-синтаксис -mno-as100-синтаксис
- розслабитися -mmax-constant-size= -mint-register= -mpid -msave-acc-in-interrupts

S / 390 і zSeries опції -mtune=тип процесора -березень=тип процесора -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -млонг-подвійний-64 -млонг-подвійний-128 -mbackchain
-мно-бекчейн -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -м64 -м31 -mdebug -mno-налагодження -меса -mzarch -mtpf-trace
-mno-tpf-trace -змішаний-божевільний -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-size -mstack-guard

Рахунок опції -meb -мел -mnhwloop -мулс -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH опції -м1 -м2 -m2e -m2a-nofpu -m2a-лише одиночний -m2a-один -m2a -м3 -m3e
-m4-nofpu -m4-лише одиночний -m4-один -м4 -m4a-nofpu -m4a-лише одиночний -m4a-один
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-компактний
-m5-compact-nofpu -mb -мл -mdalign - розслабитися - велика таблиця -mfmovd -mhitachi -мренеси
-мно-ренеси -mnomacsave -миее -мно-іее -mbitops - неправильний розмір -minline-ic_invalidate
-mpadstruct -mspace -мпрефергот - режим користувача -multcost=номер -mdiv=стратегія
-mdivsi3_libfunc=ім'я -mfixed-range=реєстр-діапазон -налаштувати-розгорнути
-індексована адресація -mgettrcost=номер -mpt-виправлено -maccumulate-outgoing-args
-minvalid-symbols -msoft-atomic -mbranch-cost=Num -mcbranchdi -mcmpeqdi -змішаний-божевільний
-mpend-cmove

Solaris 2 опції -нечистий текст -мно-нечистий-текст -pthreads -нитка

SPARC опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель -модель пам'яті=mem-
модель -м32 -м64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -мно-плоска -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -мунілінізовані-двійники
-mno-невирівняні-подвійники -mv8plus -mno-v8plus -mvis -мно-віс -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

СПУ опції -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-підказки
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=реєстр-діапазон -mea32 -mea64
-madress-space-conversion -mno-адресний простір-перетворення -mcache-size=розмір кешу
-matomic-оновлення -mno-atomic-updates

SYSTEM V опції - Qy -Qn -YP,стежки -Там,реж

TILE-Gx опції -mcpu=центральний процесор -м32 -м64

TILEPro опції -mcpu=центральний процесор -м32

V850 опції -mlong-дзвінки -mno-long-cales -меп -мно-еп -мпролог-функція
-мно-пролог-функція -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-call -mno-disable-call -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 - великий перемикач

VAX опції -мг -mgnu -мунікс

VxWorks опції -mrtp -нестатичні -Бстатичний -Бдинамічний -Xbind-lazy -Xbind-зараз

x86-64 опції Див. Параметри i386 і x86-64.

Xstormy16 опції -msim

Xtensa опції -mconst16 -mno-const16 -змішаний-божевільний -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeries опції Див. Параметри S/390 і zSeries.

код Покоління опції
-fcall-saved-Реджо -fcall-used-Реджо -фіксований-Реджо -фекційні виключення -fnon-call-exceptions
-забавні столики -fasynchronous-unwind-tables -finhibit-size-directive
-функції інструменту -instrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=файл,файл, ... -fno-загальний -fno-ідентифікатор
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-перемикачі
-freg-struct-return -fshort-перерахування -fshort-подвійний -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=Реджо -fstack-limit-symbol=sym
-fno-stack-limit -fsplit-stack -випливає-підкреслення -ftls-model=модель -ftrapv
-fwrapv -fbounds-check - наочність -fstrict-volatile-bitfields

опції Управління la Дитина 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 відноситься до буквальної великої букви М.

файл.mii
Вихідний код Objective-C++, який не слід попередньо обробляти.

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

файл. CC
файл.cp
файл.cxx
файл.cpp
файл.CPP
файл.c++
файл.C
Вихідний код C++, який необхідно попередньо обробити. Зверніть увагу, що в .cxx, останні дві літери
обидва повинні бути буквально x. Так само, .C відноситься до буквальної великої С.

файл.mm
файл.M
Вихідний код Objective-C++, який необхідно попередньо обробити.

файл.mii
Вихідний код Objective-C++, який не слід попередньо обробляти.

файл.hh
файл.H
файл.hp
файл.hxx
файл.hpp
файл.ГЕС
файл.h++
файл.tcc
Заголовковий файл C++, який потрібно перетворити на попередньо скомпільований заголовок або специфікацію Ada.

файл.f
файл.для
файл.ftn
Виправлена ​​форма вихідного коду Fortran, який не слід попередньо обробляти.

файл.F
файл.ЗА
файл.fpp
файл.FPP
файл.FTN
Виправлена ​​форма вихідного коду Fortran, який необхідно попередньо обробити (за допомогою традиційного
препроцесор).

файл.f90
файл.f95
файл.f03
файл.f08
Вихідний код Fortran вільної форми, який не слід попередньо обробляти.

файл.F90
файл.F95
файл.F03
файл.F08
Вихідний код Fortran вільної форми, який необхідно попередньо обробити (за допомогою традиційних
препроцесор).

файл.іди
Перейдіть до вихідного коду.

файл.ади
Файл вихідного коду Ada, який містить оголошення бібліотечного блоку (оголошення a
пакет, підпрограма або загальний, або загальний екземпляр), або бібліотечний блок
оголошення перейменування (оголошення перейменування пакета, загальних даних або підпрограм). Такий
файли також називаються дані.

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

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

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

інший
Об’єктний файл, який буде подано безпосередньо у зв’язування. Будь-яке ім’я файлу, яке не розпізнається
суфікс трактується таким чином.

Ви можете вказати мову введення явно за допомогою -x опції:

-x мова
Вкажіть явно мова для наступних вхідних файлів (замість того, щоб дозволити
компілятор вибирає значення за замовчуванням на основі суфікса імені файлу). Цей варіант стосується всіх
наступні вхідні файли до наступних -x варіант. Можливі значення для мова є:

c-заголовок cpp-виведення
c++ c++-заголовок c++-cpp-output
target-c target-c-header target-c-cpp-output
target-c++ target-c++-header target-c++-cpp-output
асемблер асемблер-з-cpp
Ада
f77 f77-cpp-input f95 f95-cpp-input
go
Ява

-x ніхто
Вимкніть будь-яку специфікацію мови, щоб обробляти наступні файли
відповідно до їх суфіксів назв файлів (як вони якщо -x взагалі не використовувався).

-пропускні коди виходу
Зазвичай ПКУ програма завершить роботу з кодом 1, якщо будь-яка фаза компілятора
повертає неуспішний код повернення. Якщо ви вкажете -пропускні коди виходу, то ПКУ програма
замість цього повернеться з найбільшою чисельною помилкою, створеною будь-якою фазою, яка повернулася
індикація помилки. Інтерфейс C, C++ і Fortran повертає 4, якщо є внутрішнім
виникла помилка компілятора.

Якщо вам потрібні лише деякі етапи компіляції, ви можете використовувати -x (або суфікси назв файлів)
розповісти ПКУ з чого почати, і один з варіантів -c, -Sабо -E сказати де ПКУ є
Стоп. Зверніть увагу, що деякі комбінації (наприклад, -x cpp-вихід -E) інструктувати ПКУ робити
нічого взагалі.

-c Компілюйте або зберіть вихідні файли, але не створюйте посилання. Етап з’єднання просто є
не зроблено. Кінцевий вихід у вигляді об’єктного файлу для кожного вихідного файлу.

За замовчуванням ім'я об'єктного файлу для вихідного файлу створюється шляхом заміни суфікса .c,
.i, .s, тощо, с .o.

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

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

За замовчуванням ім'я файлу ассемблера для вихідного файлу створюється шляхом заміни суфікса
.c, .i, тощо, с .s.

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

-E Зупинити після етапу попередньої обробки; не запускайте компілятор належним чином. Вихід входить
форму попередньо обробленого вихідного коду, який відправляється на стандартний вихід.

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

-o файл
Помістіть вихід у файл файл. Це стосується незалежно від того, який вид виходу
створюється, будь то виконуваний файл, об’єктний файл, файл асемблера або
попередньо оброблений код C.

If -o не вказано, за замовчуванням вставляється виконуваний файл а, об'єкт
файл для джерело.суфікс in джерело.о, його файл асемблера джерело.с, попередньо скомпільований
заголовний файл у source.suffix.gch, і всі попередньо оброблені джерела C на стандартному виводі.

-v Надрукуйте (на виводі стандартної помилки) команди, які виконуються для виконання етапів
компіляція. Також надрукуйте номер версії програми драйвера компілятора та файлу
препроцесор і власне компілятор.

-###
Люблю -v за винятком, що команди не виконуються, а аргументи в лапках, якщо вони
містять лише буквено-цифрові символи або "./-_". Це корисно для сценаріїв оболонки
захопити створені драйвером командні рядки.

-трубка
Використовуйте канали, а не тимчасові файли для зв’язку між різними етапами
компіляція. Це не працює в деяких системах, де асемблер не може читати
з труби; але асемблер GNU не має проблем.

--допомога
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, зрозумілих для
ПКУ, Якщо -v опція також вказується тоді --допомога також буде передано до
різні процеси, викликані ПКУ, щоб вони могли відображати параметри командного рядка
вони приймають. Якщо -Векстра також вказана опція (до --допомога
параметр), потім параметри командного рядка, які не мають пов’язаної з ними документації
також буде відображатися.

-- target-help
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, що стосуються цілі
для кожного інструменту. Для деяких цілей також може бути додаткова інформація про ціль
надруковані.

--help={клас|[^]кваліфікувати}[, ...]
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, зрозумілих для
компілятор, який вписується в усі вказані класи та кваліфікатори. Це такі
підтримувані класи:

оптимізатори
Це відобразить усі параметри оптимізації, які підтримує компілятор.

попередження
Це відобразить усі параметри керування попереджувальними повідомленнями, створеними
компілятор.

мета
Це відобразить параметри, що стосуються цілі. На відміну від -- target-help варіант
однак цільових параметрів компонувальника та асемблера не буде
відображається. Це тому, що ці інструменти наразі не підтримують розширений
--допомога= синтаксис

Титули
Це відобразить значення, розпізнані --парам варіант.

мова
Це відобразить параметри, які підтримуються мова, Де мова це ім'я
однієї з мов, підтримуваних у цій версії GCC.

загальний
Це відобразить параметри, загальні для всіх мов.

Ось підтримувані кваліфікатори:

недокументований
Відображати лише ті параметри, які не задокументовані.

приєднався
Відображати параметри, які беруть аргумент, який з’являється після знака рівності в цьому самому
безперервний фрагмент тексту, наприклад: --допомога=ціль.

окремий
Параметри відображення, беручи аргумент, який з’являється у вигляді окремого слова після
оригінальний варіант, наприклад: -o вихідний файл.

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

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

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

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

Аргумент --допомога= не повинен складатися лише з перевернутих кваліфікаційних.

Можливе поєднання кількох класів, хоча це зазвичай обмежує вихід
настільки, що нема що показати. Однак один випадок, коли це працює, це коли
один із класів мета. Наприклад, щоб відобразити всі цілі
можна використовувати такі параметри оптимізації:

--help=ціль, оптимізатори

повне г, повне г,, показали, від, номер, XNUMX --допомога= опцію можна повторити в командному рядку. Кожне наступне використання буде
відобразити запитаний клас параметрів, пропускаючи ті, які вже були
відображається.

Якщо -Q Параметр з’являється в командному рядку перед --допомога= варіант, потім
описовий текст, який відображається --допомога= змінюється. Замість опису відображеного
параметри, вказується, чи ввімкнено, вимкнено чи встановлено параметр
до певного значення (припускаючи, що компілятор знає це в точці, де
--допомога= використовується варіант).

Ось скорочений приклад з порту ARM ПКУ:

% gcc -Q -mabi=2 --help=target -c
Наступні параметри залежать від цілі:
-mabi= 2
-mabort-on-noreturn [вимкнено]
-mapcs [вимкнено]

Вихід чутливий до впливу попередніх параметрів командного рядка, тому для
На прикладі можна дізнатися, які оптимізації включені -O2 з допомогою:

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

Крім того, ви можете дізнатися, які двійкові оптимізації включені -O3 з допомогою:

gcc -c -Q -O3 --help=optimisers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimisers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep увімкнено

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

-- версія
Відобразити номер версії та авторські права викликаного GCC.

-обгортка
Викликати всі підкоманди під програмою-обгорткою. Ім'я програми-обгортки і
його параметри передаються у вигляді списку, розділеного комами.

gcc -c tc -обгортка gdb,--args

Це викличе всі підпрограми ПКУ при gdb --args, таким чином виклик Cc1
буде gdb --args Cc1 ....

-fplugin=ім'я.тому
Завантажте код плагіна у файл ім'я.so, припускається, що це спільний об'єкт, яким потрібно відкрити
компілятор. Базове ім’я спільного об’єктного файлу використовується для ідентифікації плагіна
для цілей розбору аргументів (Див -fplugin-arg-ім'я-ключ=значення нижче). Кожен
плагін повинен визначати функції зворотного виклику, зазначені в API плагінів.

-fplugin-arg-ім'я-ключ=значення
Визначте аргумент, який називається ключ зі значенням значення для викликаного плагіна ім'я.

-fdump-ada-spec[-струнка]
Для C і C++ вихідних файлів і файлів включення створіть відповідні специфікації Ada.

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

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

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

Компіляція C + + програми
Вихідні файли C++ зазвичай використовують один із суфіксів .C, . CC, .cpp, .CPP, .c++, .cpабо
.cxx; Часто використовуються заголовні файли C++ .hh, .hpp, .H, або (для спільного коду шаблону) .tccІ
попередньо оброблені файли C++ використовують суфікс .ii. GCC розпізнає файли з такими іменами і
компілює їх як програми на C++, навіть якщо ви викликаєте компілятор так само, як і для компіляції
Програми на C (зазвичай з іменем ПКУ).

Однак використання ПКУ не додає бібліотеку C++. г ++ це програма, яка викликає GCC і
відноситься до .c, .h і .i файли як вихідні файли C++ замість вихідних файлів C, якщо -x is
використовується, і автоматично вказує посилання на бібліотеку C++. Ця програма також є
корисно під час попередньої компіляції заголовного файлу C з a .h розширення для використання в компіляціях C++.
На багатьох системах, г ++ також встановлюється з назвою C ++.

Коли ви компілюєте програми на C++, ви можете вказати багато з тих самих параметрів командного рядка, що
ви використовуєте для компіляції програм будь-якою мовою; або параметри командного рядка, що мають значення для C
та споріднені мови; або параметри, які мають значення лише для програм C++.

опції Управління C Діалект
Наступні параметри керують діалектом C (або мов, похідних від C, таких як C++,
Objective-C і Objective-C++), які компілятор приймає:

-ansi
У режимі 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__"
продовжувати працювати незважаючи -ansi. Ви не хотіли б використовувати їх у програмі ISO C,
звичайно, але корисно помістити їх у заголовні файли, які можуть бути включені
компіляції, зроблені з -ansi. Альтернативні попередньо визначені макроси, такі як "__unix__" і
"__vax__" також доступні з або без -ansi.

повне г, повне г,, показали, від, номер, XNUMX -ansi Опція не призводить до безоплатного відхилення програм, що не відповідають стандарту ISO. Для
що, - педантичний необхідний на додаток до -ansi.

Макрос "__STRICT_ANSI__" попередньо визначено, коли -ansi використовується варіант. Якийсь заголовок
файли можуть помітити цей макрос і утриматися від оголошення певних функцій або визначення
певні макроси, які стандарт ISO не вимагає; це для того, щоб уникнути втручання
з будь-якими програмами, які можуть використовувати ці імена для інших речей.

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

-std =
Визначте мовний стандарт. Наразі ця опція підтримується лише тоді, коли
компіляція C або C++.

Компілятор може прийняти кілька базових стандартів, наприклад c90 or c ++ 98, і діалекти GNU
цих стандартів, як-от gnu90 or gnu ++ 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
є відключеними). Такий же, як -ansi для коду C.

iso9899:199409
ISO C90 із змінами в поправці 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Зауважте, що цей стандарт ще не повністю підтримується; побачити
<http://gcc.gnu.org/gcc-4.7/c99status.html> для отримання додаткової інформації. Імена c9x
і iso9899:199x є застарілими.

c11
c1x
iso9899:2011
ISO C11, редакція стандарту ISO C 2011 року. Підтримка неповна і
експериментальний. Ім'я c1x застаріло.

gnu90
gnu89
Діалект GNU ISO C90 (включаючи деякі функції C99). Це значення за замовчуванням для C
Код.

gnu99
gnu9x
Діалект GNU ISO C99. Коли ISO C99 буде повністю реалізовано в GCC, це буде
стати за замовчуванням. Ім'я gnu9x застаріло.

gnu11
gnu1x
Діалект GNU ISO C11. Підтримка є неповною та експериментальною. Ім'я gnu1x
застаріло.

c ++ 98
Стандарт ISO C++ 1998 року з поправками. Такий же, як -ansi для коду C++.

gnu ++ 98
GNU діалект о -std=c++98. Це значення за замовчуванням для коду C++.

c ++ 11
Стандарт ISO C++ 2011 року з поправками. Підтримка C++11 все ще залишається
експериментальний і може змінитися несумісним чином у майбутніх випусках.

gnu ++ 11
GNU діалект о -std=c++11. Підтримка C++11 все ще є експериментальною та може змінитися
несумісними способами в майбутніх випусках.

-fgnu89-inline
Опція -fgnu89-inline наказує GCC використовувати традиційну семантику GNU для "inline"
функціонує в режимі C99.
Цей параметр приймається та ігнорується GCC версіями 4.1.3 до, але не включно
4.3. У версіях GCC 4.3 і пізніших це змінює поведінку GCC в режимі C99. Використання
ця опція приблизно еквівалентна додаванню атрибута функції "gnu_inline" до всіх
вбудовані функції.

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

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

-допоміжна інформація ім'я файлу
Вивести прототип прототипу наданого імені файлу для всіх оголошених функцій та/або
визначені в одиниці перекладу, у тому числі в заголовних файлах. Цей варіант є
мовчки ігнорується будь-якою мовою, крім C.

Окрім декларацій, у файлі в коментарях вказується походження кожної декларації
(вихідний файл і рядок), чи була декларація неявною, прототипною чи
непрототипований (I, N для нових або O для старого, відповідно, у першому символі після
номер рядка та двокрапку), а також те, чи походить це з оголошення чи визначення
(C or F, відповідно, наступним символом). У випадку функції
визначення, список аргументів у стилі K&R, за яким слідують їхні оголошення
надано, внутрішні коментарі, після оголошення.

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

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

-fno-asm
Не розпізнайте "asm", "inline" або "typeof" як ключове слово, щоб код міг використовувати їх
слова як ідентифікатори. Ви можете використовувати ключові слова "__asm__", "__inline__" і
Натомість "__typeof__". -ansi мається на увазі -fno-asm.

У C++ цей перемикач впливає лише на ключове слово "typeof", оскільки "asm" і "inline" є
стандартні ключові слова. Ви можете скористатися -fno-gnu-ключові слова замість прапора, який має
той самий ефект. У режимі C99 (-std=c99 or -std=gnu99), цей перемикач впливає лише на
ключові слова "asm" і "typeof", оскільки "inline" є стандартним ключовим словом в ISO C99.

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

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

З -fno-вбудований-функція опція лише вбудована функція функція вимкнено
функція не слід починати з __вбудований_. Якщо функція названа, яка не є вбудованою
у цій версії GCC цей параметр ігнорується. Немає відповідного
-вбудований-функція варіант; якщо ви бажаєте увімкнути вбудовані функції вибірково, коли
використання -fno-вбудований or -автономний, ви можете визначити такі макроси, як:

#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))

-fhosted
Стверджують, що компіляція відбувається в розміщеному середовищі. Це означає -fбуд.
Розміщене середовище — це середовище, в якому доступна вся стандартна бібліотека та в
який "main" має тип повернення "int". Прикладами є майже все, крім a
ядро. Це еквівалентно -fno-окремий.

-автономний
Стверджують, що компіляція відбувається в окремому середовищі. Це означає
-fno-вбудований. Окреме середовище – це середовище, в якому стандартна бібліотека не може бути використана
існують, і запуск програми не обов'язково може бути в "main". Найбільш очевидний приклад
є ядром ОС. Це еквівалентно -fno-hosted.

-fopenmp
Увімкнути обробку директив OpenMP «#pragma omp» у C/C++ та «!$omp» у Fortran.
Коли -fopenmp вказано, компілятор генерує паралельний код відповідно до
Інтерфейс програми OpenMP версії 3.0http://www.openmp.org/>. Цей варіант
мається на увазі -нитка, і, таким чином, підтримується лише на цілях, які мають підтримку
-нитка.

-fgnu-tm
Коли варіант -fgnu-tm якщо вказано, компілятор згенерує код для Linux
варіант поточного документа специфікації ABI транзакційної пам'яті Intel (Revision
1.1, 6 травня 2009 року). Це експериментальна функція, інтерфейс якої може змінитися
майбутні версії GCC, оскільки офіційна специфікація змінюється. Зверніть увагу, що ні
для цієї функції підтримуються всі архітектури.

Для отримання додаткової інформації про підтримку транзакційної пам’яті GCC,

Зауважте, що функція транзакційної пам’яті не підтримується за винятками, які не є викликами
(-fnon-call-exceptions).

-fms-розширення
Прийміть деякі нестандартні конструкції, які використовуються у файлах заголовків Microsoft.

У коді C++ це дозволяє імена членів у структурах бути подібними до попередніх типів
декларації.

typedef int UOW;
структура ABC {
UOW UOW;
};

Деякі випадки безіменних полів у структурах і спілках приймаються лише з цим
варіант.

-fplan9-розширення
Прийміть деякі нестандартні конструкції, які використовуються в коді Плану 9.

Це дозволяє -fms-розширення, дозволяє передавати покажчики на структури з анонімними
поля до функцій, які очікують покажчиків на елементи типу поля, і
дозволи, які посилаються на анонімні поля, оголошені за допомогою typedef. Це тільки
підтримується для C, а не для C++.

-триграфи
Підтримка триграфів ISO C. The -ansi варіант (і -стандартний опції для суворого ISO C
відповідність) передбачає -триграфи.

-no-integrated-cpp
Виконує компіляцію за два проходи: попередню обробку та компіляцію. Цей варіант дозволяє
користувач надав "cc1", "cc1plus" або "cc1obj" через -B варіант. Користувач надав
Крок компіляції може потім додати додатковий етап попередньої обробки після звичайного
попередньої обробки, але перед компіляцією. За замовчуванням використовується інтегрований cpp
(внутрішній cpp)

Семантика цього параметра зміниться, якщо об’єднати «cc1», «cc1plus» і «cc1obj».

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

-fcond-невідповідність
Дозволити умовні вирази з невідповідними типами в другому та третьому аргументах.
Значення такого виразу є недійсним. Цей параметр не підтримується для C++.

-льон-вектор-перетворення
Дозволити неявні перетворення між векторами з різною кількістю елементів та/або
несумісні типи елементів. Цей параметр не слід використовувати для нового коду.

-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-unsigned-char, що є негативною формою
-funsigned-char. Так само і варіант -fno-signed-char еквівалентна
-funsigned-char.

-fsigned-bitfields
-бітові поля funsigned
-fno-signed-bitfields
-fno-unsigned-bitfields
Ці параметри визначають, чи є бітове поле підписаним чи непідписаним під час оголошення
не використовує ні «підписаний», ні «непідписаний». За замовчуванням таке бітове поле підписане,
оскільки це узгоджено: основні цілі типи, такі як "int", є типами зі знаком.

опції Управління C + + Діалект
Цей розділ описує параметри командного рядка, які мають значення лише для програм C++;
але ви також можете використовувати більшість параметрів компілятора GNU незалежно від вашої мови
Програма входить. Наприклад, ви можете зібрати файл "firstClass.C" таким чином:

g++ -g -frepo -O -c першого класу.C

Тільки в цьому прикладі -frepo це параметр, призначений лише для програм на C++; ви можете використовувати
інші варіанти з будь-якою мовою, яку підтримує GCC.

Ось список варіантів, які є тільки для компіляції програм C++:

-fabi-version=n
Використовуйте версію n C++ ABI. Версія 2 є першою версією C++ ABI
з'явився в G++ 3.4. Версія 1 – це версія C++ ABI, яка вперше з’явилася
G++ 3.2. Версія 0 завжди буде версією, яка найбільше відповідає C++
Специфікація ABI. Таким чином, ABI, отриманий за допомогою версії 0, зміниться як ABI
помилки виправлені.

За замовчуванням є версія 2.

Версія 3 виправляє помилку під час зміни постійної адреси як аргументу шаблону.

Версія 4, яка вперше з’явилася в G++ 4.5, реалізує стандартне змінення для вектора
типи.

Версія 5, яка вперше з’явилася в G++ 4.6, виправляє помилку атрибута
const/volatile для типів покажчиків функцій, decltype звичайного decl та використання a
параметр функції в оголошенні іншого параметра.

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

Дивись також -Вабі.

-fno-контроль доступу
Вимкніть всю перевірку доступу. Цей перемикач в основному корисний для усунення помилок
код контролю доступу.

-fcheck-новий
Перш ніж спробувати, переконайтеся, що покажчик, повернутий оператором new, не є нульовим
змінити виділене сховище. Ця перевірка зазвичай не потрібна, оскільки C++
стандарт визначає, що "оператор new" повертатиме лише 0, якщо він оголошений кинути(),
у цьому випадку компілятор завжди перевірятиме повернуте значення навіть без цього
варіант. У всіх інших випадках, коли "operator new" має непусте виняток
специфікації, виснаження пам'яті сигналізується викидом "std::bad_alloc". Дивись також
новий (не кидати).

-fconserve-space
Помістіть неініціалізовані або ініціалізовані під час виконання глобальні змінні в загальний сегмент, як
C робить. Це заощаджує місце у виконуваному файлі за рахунок відсутності діагностики дублікатів
визначення. Якщо ви компілюєте з цим прапором, і ваша програма таємничим крахом
після завершення "main()" ви можете мати об'єкт, який знищується двічі
оскільки два визначення були об’єднані.

Ця опція більше не корисна для більшості цілей, тепер для них додано підтримку
введення змінних у BSS, не роблячи їх загальними.

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

-fdeduce-init-list
Увімкнути виведення параметра типу шаблону як std::initializer_list із фігурної дужки-
закритий список ініціализаторів, тобто

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

void f()
{
вперед ({1,2}); // переадресація виклику >
}

Цей вирахування було реалізовано як можливе розширення до спочатку запропонованого
семантика стандарту C++11, але не була частиною остаточного стандарту, тому є
за замовчуванням вимкнено. Ця опція застаріла і може бути вилучена в майбутньому
версія G++.

-френд-ін'єкція
Введіть функції друзів у простір імен, що охоплює, щоб вони були видимі зовні
область дії класу, в якому вони оголошені. Функції друзів були задокументовані
щоб працювати таким чином у старому анотованому довідковому посібнику C++ і попередніх версіях G++
4.1 завжди працював так. Однак у ISO C++ друга функція, якої немає
оголошені в охоплюючій області, можна знайти лише за допомогою пошуку в залежності від аргументу.
Ця опція змушує друзів вводити, як вони були в попередніх випусках.

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

-fno-elide-конструктори
Стандарт C++ дозволяє реалізації пропускати створення лише тимчасового
використовується для ініціалізації іншого об’єкта того ж типу. Визначення цієї опції вимикає
ця оптимізація, і змушує G++ у всіх випадках викликати конструктор копіювання.

-fno-enforce-eh-specs
Не створюйте код для перевірки на порушення специфікацій винятків під час виконання.
Цей параметр порушує стандарт C++, але може бути корисним для зменшення розміру коду
виробничі збірки, схожі на визначення NDEBUG. Це не дає дозволу на код користувача
викидати винятки з порушенням специфікацій винятків; компілятор буде
все ще оптимізується на основі специфікацій, тому буде створено несподіване виняток
призводять до невизначеної поведінки.

-for-scope
-fno-for-scope
If -for-scope вказано, область дії змінних, оголошених в a for-init-оператор
обмежується та цінності сам цикл, як зазначено у стандарті C++. Якщо
-fno-for-scope вказано, область дії змінних, оголошених в a for-init-оператор
поширюється до кінця охоплюючої області, як це було у старих версіях G++, і
інші (традиційні) реалізації C++.

За замовчуванням, якщо жоден із прапорів не вказано, щоб відповідати стандарту, але щоб дозволити та надати a
попередження для коду старого стилю, який інакше був би недійсним або відрізнявся б
поведінка.

-fno-gnu-ключові слова
Не розпізнайте "typeof" як ключове слово, щоб код міг використовувати це слово як ключове слово
ідентифікатор. Натомість можна використовувати ключове слово "__typeof__". -ansi мається на увазі
-fno-gnu-ключові слова.

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

-fno-implicit-inline-templates
Також не випускайте код для неявних екземплярів вбудованих шаблонів. За замовчуванням
полягає в тому, щоб обробляти inlines по-різному, щоб компіляція з оптимізацією та без неї
потрібен той самий набір явних екземплярів.

-fno-implement-inlines
Щоб заощадити місце, не випускайте позалінійні копії вбудованих функцій, якими керує
#прагма реалізація. Це призведе до помилок компонувальника, якщо ці функції відсутні
вбудовані всюди, де вони називаються.

-fms-розширення
Вимкніть педантичні попередження щодо конструкцій, які використовуються в MFC, як-от implicit int і
отримання вказівника на функцію-член за допомогою нестандартного синтаксису.

-fno-nonansi-builtins
Вимкніть вбудовані оголошення функцій, які не передбачені ANSI/ISO C. Це
включають "ffs", "alloca", "_exit", "index", "bzero", "conjf" та інші пов'язані
функції.

-fnothrow-opt
Розглядайте специфікацію винятку "throw()" так, ніби це специфікація "noexcept".
щоб зменшити або виключити накладні витрати на розмір тексту відносно функції без винятку
специфікація. Якщо функція має локальні змінні типів з нетривіальними
деструктори, специфікація винятків фактично зменшить функцію
тому що очищення EH для цих змінних можна оптимізувати. Семантичний
ефект полягає в тому, що виняток викидається з функції з таким винятком
специфікація призведе до виклику "завершити", а не "неочікувано".

-fno-операторів-імена
Не розглядайте ключові слова імені оператора "і", "bitand", "bitor", "compl", "not", "або"
і "xor" як синоніми як ключові слова.

-fno-optional-diags
Вимкніть діагностику, про яку за стандартом сказано, що компілятор не повинен видавати.
Наразі єдина така діагностика, яку видає G++, — це діагностика для імені
кілька значень у класі.

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

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

-frepo
Увімкнути автоматичне створення екземпляра шаблону під час посилання. Цей варіант також має на увазі
-fno-implicit-templates.

-fno-rtti
Вимкнути генерацію інформації про кожен клас із віртуальними функціями для використання
функції ідентифікації типу під час виконання C++ (динамічна передача і Напевний). Якщо ви цього не зробите
використовуйте ці частини мови, ви можете заощадити місце, використовуючи цей прапор. Примітка
ця обробка винятків використовує ту саму інформацію, але генеруватиме її за потреби.
повне г, повне г,, показали, від, номер, XNUMX динамічна передача оператор все ще може використовуватися для приведення, які не потребують часу виконання
інформацію про типи, тобто приводить до "void *" або до однозначних базових класів.

-fstats
Надсилайте статистичні дані про обробку інтерфейсу в кінці компіляції. Це
інформація, як правило, корисна лише для команди розробників G++.

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

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

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

-запобіжник-cxa-atexit
Зареєструйте деструктори для об'єктів зі статичною тривалістю зберігання за допомогою "__cxa_atexit"
функція, а не функція "atexit". Цей параметр необхідний для повного
Обробка статичних деструкторів відповідає стандартам, але працюватиме лише якщо ваш C
бібліотека підтримує "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
Не використовуйте підпрограму під час виконання "__cxa_get_exception_ptr". Це спричинить
"std::uncaught_exception" є неправильним, але необхідний, якщо підпрограма виконання
недоступний.

-fvisibility-inlines-hidden
Цей перемикач оголошує, що користувач не намагається порівняти покажчики з вбудованими
функції або методи, де адреси двох функцій були взяті різними
спільні об'єкти.

Результатом цього є те, що GCC може ефективно позначати вбудовані методи
"__attribute__ ((видимість ("прихований")))", щоб вони не з'являлися в експорті
таблицю DSO і не вимагають непрямого PLT при використанні в DSO.
Увімкнення цієї опції може істотно вплинути на навантаження та час з’єднання DSO
значно зменшує розмір таблиці динамічного експорту, коли бібліотека робить важку
використання шаблонів.

Поведінка цього перемикача не зовсім так само, як позначення методів як прихованих
безпосередньо, оскільки це не впливає на статичні змінні, локальні для функції чи причини
компілятор, щоб зробити висновок, що функція визначена лише в одному спільному об’єкті.

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

Явно створені вбудовані методи не впливають на цей параметр як на їх зв’язок
інакше можуть перетнути межі спільної бібліотеки.

-fvisibility-ms-compat
Цей прапор намагається використати параметри видимості для створення моделі зв’язку GCC C++
сумісний з Microsoft Visual Studio.

Прапор вносить такі зміни до моделі зв’язку GCC:

1. Він встановлює видимість за замовчуванням на "прихований", як -fvisibility=приховано.

2. Типи, але не їхні члени, не приховані за замовчуванням.

3. Правило єдиного визначення послаблено для типів без явної видимості
специфікації, які визначені в більш ніж одному спільному об’єкті: ті
декларації дозволені, якщо вони були б дозволені, коли був цей варіант
не використовується.

У новому коді краще використовувати -fvisibility=приховано і експортувати ті класи, які є
призначені для видимості ззовні. На жаль, код може покладатися,
можливо, випадково, щодо поведінки Visual Studio.

Серед наслідків цих змін є статичні члени даних одного типу
з однаковим ім'ям, але визначеними в різних спільних об'єктах, будуть різними, тому
зміна одного не змінить іншого; і що вказує на визначені члени функції
у різних спільних об'єктах можуть не порівнюватися однаковими. Коли дається цей прапор, це a
порушення ODR для різного визначення типів з однаковою назвою.

-fno-слабий
Не використовуйте слабку підтримку символів, навіть якщо вона надається компонувальником. За замовчуванням G++
використовуватиме слабкі символи, якщо вони доступні. Ця опція існує лише для тестування і
не повинні використовуватися кінцевими користувачами; це призведе до неповноцінного коду і не матиме переваг.
Цю опцію може бути вилучено в майбутньому випуску G++.

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

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

-fno-default-inline
Не припускайте вбудований для функцій, визначених всередині області видимості класу.
Зауважте, що ці функції будуть мати зв'язок, як вбудовані функції; вони просто не будуть
бути вбудованим за замовчуванням.

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

Вам слід переписати свій код, щоб уникнути цих попереджень, якщо вас турбує
той факт, що код, створений за допомогою G++, може бути несумісним у двійковому коді з кодом, згенерованим за допомогою
інші компілятори.

Відомі несумісності в -fabi-version=2 (за замовчуванням) включають:

· Шаблон з нетиповим параметром шаблону еталонного типу зіпсовано
неправильно:

зовнішній int N;
шаблон структура S {};
порожнеча п (С ) {2}

Це зафіксовано в -fabi-version=3.

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

Поколювання змінено в -fabi-version=4.

Відомі несумісності в -fabi-version=1 включати:

· Неправильна обробка tail-padding для бітових полів. G++ може спробувати запакувати дані
в той самий байт, що й базовий клас. Наприклад:

struct A { віртуальна пустота f(); int f1 : 1; };
struct B : public A { int f2 : 1; };

У цьому випадку G++ помістить "B::f2" в той самий байт, що й "A::f1"; інші компілятори
не буде. Ви можете уникнути цієї проблеми, явно доповнивши "A", щоб її розмір
є кратним розміру байтів на вашій платформі; це призведе до G++ та інших
компілятори до макета "B" ідентично.

· Неправильне використання tail-padding для віртуальних баз. G++ не використовує хвіст
заповнення під час розкладки віртуальних баз. Наприклад:

struct A { віртуальна пустота f(); char c1; };
struct B { B(); char c2; };
struct C : публічний A, публічний віртуальний B {};

У цьому випадку G++ не поміщатиме "B" у заповнення хвоста для "A"; інший
компілятори будуть. Ви можете уникнути цієї проблеми, явно доповнивши "A", щоб її
розмір кратний його вирівнюванню (ігноруючи віртуальні базові класи); що буде
змушують G++ та інші компілятори макетувати "C" ідентично.

· Неправильна обробка бітових полів із заявленою шириною, більшою за ширину
базові типи, коли бітові поля з'являються в об'єднанні. Наприклад:

об'єднання U { int i : 4096; };

Припускаючи, що "int" не має 4096 біт, G++ зробить об'єднання занадто малим
за кількістю бітів у "int".

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

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

структура B {
А а;
віртуальна порожнеча f ();
};

структура C : публічна B, публічна A {};

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

· Назви функцій шаблону, типи яких включають "typename" або шаблон шаблону
параметри можуть бути зіпсовані неправильно.

шаблон
void f(ім'я типу Q::X) {}

шаблон клас Q>
void f(назва типу Q ::X) {}

Примірники цих шаблонів можуть бути зіпсовані неправильно.

Він також попереджає про зміни, пов’язані з psABI. Відомі зміни psABI на цьому етапі включають:

· Для SYSV/x86-64 при проходженні об'єднання з довгим подвійним воно змінюється на перехід
пам'ять, як зазначено в psABI. Наприклад:

об'єднання U {
довгий подвійний ld;
int i;
};

"union U" завжди буде передаватися в пам'ять.

-Wctor-dtor-privacy (лише C++ та Objective-C++)
Попереджати, коли клас здається непридатним для використання, оскільки в ньому є всі конструктори або деструктори
клас є приватним, і він не має ні друзів, ні публічних статичних функцій-членів.

-Wdelete-non-virtual-dtor (лише C++ та Objective-C++)
Попередити, коли видаляти використовується для знищення екземпляра класу, який має віртуальні функції
і невіртуальний деструктор. Видаляти екземпляр похідного класу небезпечно
через покажчик на базовий клас, якщо базовий клас не має віртуального
деструктор. Це попередження вмикається за допомогою -Стінка.

-Звуження (лише C++ та Objective-C++)
Попереджати, коли всередині відбувається перетворення звуження, заборонене C++11 { }, напр

int i = { 2.2 }; // помилка: звуження від подвійного до int

Цей прапор входить до -Стінка і -Wc++11-compat.

З -std=c++11, -Без звуження пригнічує діагностику, яку вимагає стандарт.
Зауважте, що це не впливає на значення правильно сформованого коду; звуження конверсій
досі вважаються погано сформованими в контексті SFINAE.

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

-Wnon-virtual-dtor (лише C++ та Objective-C++)
Попереджати, коли клас має віртуальні функції та доступний невіртуальний деструктор, в
у цьому випадку було б можливо, але небезпечно видалити екземпляр похідного класу
через покажчик на базовий клас. Це попередження також увімкнено, якщо -Weffc++ is
вказано.

- Замовлення (лише C++ та Objective-C++)
Попереджати, коли порядок ініціалізації членів, наведений у коді, не відповідає порядку
в якому вони повинні бути виконані. Наприклад:

структура A {
int i;
int j;
A(): j (0), i (1) { }
};

Компілятор змінить порядок ініціалізації членів для i і j щоб відповідати
декларації наказу членів з попередженням про це. Це попередження
включена за -Стінка.

Наступні -В... на опції не впливає -Стінка.

-Weffc++ (лише C++ та Objective-C++)
Попереджати про порушення наведених нижче вказівок щодо стилю від Скотта Мейерса Ефективний
C ++, другий видання книга:

· Пункт 11: Визначте конструктор копіювання та оператор присвоєння для класів з
динамічно розподілена пам'ять.

· Пункт 12: Віддавайте перевагу ініціалізації, ніж присвоєнню в конструкторах.

· Пункт 14: Зробіть деструктори віртуальними в базових класах.

· Пункт 15: Нехай "operator=" повертає посилання на *це.

· Пункт 23: Не намагайтеся повернути посилання, коли вам потрібно повернути об'єкт.

Також попереджайте про порушення наведених нижче вказівок щодо стилю від Скотта Мейерса більше
Ефективний C + + книга:

· Пункт 6: Розрізняйте префіксальну та постфіксальну форми приросту та декременту
операторів.

· Пункт 7: Ніколи не перевантажуйте "&&", "||" або ",".

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

-Wstrict-null-sentinel (лише C++ та Objective-C++)
Попередьте також про використання невідведеного "NULL" як дозорного. При компіляції тільки с
GCC це дійсний сторож, оскільки "NULL" визначається як "__null". Хоча це нуль
константа покажчика не є нульовим покажчиком, вона гарантовано матиме той самий розмір, що і a
покажчик. Але це використання не переноситься різними компіляторами.

-Wno-non-template-friend (лише C++ та Objective-C++)
Вимкніть попередження, коли в шаблоні оголошуються нешаблонні функції друзів.
З моменту появи явної підтримки специфікації шаблонів у G++, якщо ім’я файлу
друг є некваліфікованим ідентифікатором (тобто, друг foo(int)), специфікація мови C++
вимагає, щоб друг оголосив або визначив звичайну, нешаблонну функцію. (Розділ
14.5.3). До того, як G++ реалізував явну специфікацію, некваліфіковані ідентифікатори могли бути
інтерпретується як особлива спеціалізація шаблонної функції. Тому що це
невідповідна поведінка більше не є поведінкою за замовчуванням для G++,
-Не шаблонний друг дозволяє компілятору перевірити існуючий код на наявність потенційних проблем
плями й увімкнено за замовчуванням. Цю нову поведінку компілятора можна вимкнути за допомогою
-Wno-non-template-friend, який зберігає відповідний код компілятора, але вимикає
корисне попередження.

-Лиття в стилі «Wold». (лише C++ та Objective-C++)
Попереджати, якщо в програмі на C++ використовується приведення до непустотного типу старого стилю (Стиль).
Актори нового стилю (динамічна передача, static_cast, reinterpret_cast, і const_cast) є
менш вразливий до небажаних впливів і набагато легше шукати.

-Перевантажений-віртуальний (лише C++ та Objective-C++)
Попереджати, коли оголошення функції приховує віртуальні функції базового класу. Для
наприклад, у:

структура A {
віртуальна порожнеча f();
};

структура B: публічна A {
void f(int);
};

версія "f" класу "A" прихована в "B", а такий код:

B* b;
b->f();

не вдасться зібрати.

-Wno-pmf-перетворення (лише C++ та Objective-C++)
Вимкнути діагностику для перетворення зв’язаного покажчика на функцію-член у звичайну
вказівник.

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

структура A {
оператор int ();
Оператор A& = (int);
};

головний ()
{
А а, б;
a = b;
}

У цьому прикладі G++ синтезує значення за замовчуванням A& оператор = (конст A&);, тоді як спереду
використовуватиме визначений користувачем оператор =.

опції Управління Мета-С і Objective-C ++ Діалекти
(ПРИМІТКА. Цей посібник не описує мови Objective-C і Objective-C++
самі

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

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

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

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

Ось список варіантів, які є тільки для компіляції Objective-C і Objective-C++
програми:

-fconstant-string-class=ім'я класу
використання ім'я класу як ім'я класу для створення екземпляра для кожного рядка літералу
задано з синтаксисом "@"...". Ім'я класу за замовчуванням - "NXConstantString", якщо
використовується середовище виконання GNU і "NSConstantString", якщо використовується середовище виконання NeXT
використаний (див. нижче). The -fconstant-cfstrings параметр, якщо він також присутній, замінить параметр
-fconstant-string-class встановити та зробити так, щоб літерали "@"..." були викладені як постійні
рядки CoreFoundation.

-fgnu-runtime
Створення об’єктного коду, сумісного зі стандартним середовищем виконання GNU Objective-C. Це
за замовчуванням для більшості типів систем.

-fnext-runtime
Створення вихідних даних, сумісних із середовищем виконання NeXT. Це значення за замовчуванням для NeXT
системи, включаючи Darwin і Mac OS X. Макрос "__NEXT_RUNTIME__" попередньо визначено, якщо
(і тільки якщо) використовується ця опція.

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

-fobjc-abi-version=n
Використовуйте версію n Objective-C ABI для вибраного середовища виконання. Цей варіант є
наразі підтримується лише для середовища виконання 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
часу виконання, щоб викликати всі такі методи в ієрархії спадкування об’єкта. "- (ідентифікатор)
Методи .cxx_construct" будуть викликані середовищем виконання відразу після нового об'єкта
виділяється екземпляр; будуть викликані методи "- (void) .cxx_destruct".
безпосередньо перед тим, як середовище виконання звільняє екземпляр об'єкта.

На момент написання цієї статті підтримується лише середовище виконання NeXT на Mac OS X 10.4 і новіших версій
виклик методів "- (id) .cxx_construct" і "- (void) .cxx_destruct".

-fobjc-direct-dispatch
Дозволити швидкі переходи до диспетчера повідомлень. На Дарвіні це досягається за допомогою
сторінка комунікацій.

-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. Методи класу та супервиклики ніколи не перевіряються
для нуля таким чином, незалежно від того, на що встановлено цей прапор. Наразі цей прапор діє
нічого, якщо використовується середовище виконання GNU або старіша версія NeXT ABI.

-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) щоб завантажити його під час виконання. Це використовується в
у поєднанні з режимом налагодження «Виправити та продовжити», де входить об’єктний файл
питання можна перекомпілювати та динамічно перезавантажувати в ході програми
виконання, без необхідності перезапускати саму програму. Наразі виправити-і-
Функція Continue доступна лише в поєднанні з середовищем виконання NeXT на Mac
OS X 10.3 і новіших версій.

-fzero-посилання
Під час компіляції для середовища виконання NeXT компілятор зазвичай замінює виклики до
"objc_getClass("...")" (коли ім'я класу відоме під час компіляції) з
статичні посилання на класи, які ініціалізуються під час завантаження, що покращує час виконання
продуктивність. Вказавши -fzero-посилання flag пригнічує цю поведінку та викликає
викликає "objc_getClass("...)", щоб зберегти. Це корисно в Zero-Link
режим налагодження, оскільки він дозволяє змінювати окремі реалізації класу
під час виконання програми. Середовище виконання GNU наразі завжди зберігає виклики до
"objc_get_class("...")" незалежно від параметрів командного рядка.

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

-Wassign-перехоплення (лише Objective-C і Objective-C++)
Попереджати кожного разу, коли збірник сміття перехоплює призначення Objective-C.

-Протокол Wno (лише Objective-C і Objective-C++)
Якщо клас оголошується для реалізації протоколу, для кожного методу видається попередження
в протоколі, який не реалізований класом. Поведінка за замовчуванням – це
видавати попередження для кожного методу, явно не реалізованого в класі, навіть якщо a
Реалізація методу успадкована від суперкласу. Якщо ви використовуєте -Протокол Wno
варіант, тоді методи, успадковані від суперкласу, вважаються реалізованими,
і попередження за них не виноситься.

-Селектор (лише Objective-C і Objective-C++)
Попереджати, якщо під час знайдено кілька методів різних типів для одного селектора
компіляція. Перевірка проводиться за списком методів на завершальному етапі
компіляція. Крім того, перевірка виконується для кожного селектора, що з’являється в a
Вираз "@selector(...)" і відповідний метод для цього селектора
знайдені під час компіляції. Оскільки ці перевірки сканують таблицю методів лише в кінці
компіляції, ці попередження не виробляються, якщо є останній етап компіляції
не досягнуто, наприклад, через те, що під час компіляції виявлено помилку, або через те, що
-fsyntax-only використовується варіант.

-Підборник-матч (лише Objective-C і Objective-C++)
Попереджати, якщо для a знайдено кілька методів з різними аргументами та/або типами повернення
даний селектор під час спроби надіслати повідомлення за допомогою цього селектора одержувачу
введіть "id" або "Class". Коли цей прапор вимкнено (що є поведінкою за замовчуванням),
компілятор пропустить такі попередження, якщо будь-які знайдені відмінності обмежуються типами, які
мають однаковий розмір і вирівнювання.

-Wunddeclared-селектор (лише Objective-C і Objective-C++)
Попереджає, якщо знайдено вираз "@selector(...)", який посилається на неоголошений селектор. А
селектор вважається неоголошеним, якщо раніше не було оголошено жодного методу з такою назвою
вираз "@selector(...)" явно в @interface або @protocol
декларації або неявно в розділі @implementation. Цей варіант працює завжди
його перевіряє, як тільки знайдено вираз "@selector(...)", while -Селектор тільки
виконує свої перевірки на завершальному етапі складання. Це також посилює кодування
Угода про стиль, згідно з якою методи та селектори повинні бути оголошені перед використанням.

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

опції до Контроль Діагностичний повідомлення форматування
Традиційно діагностичні повідомлення форматуються незалежно від пристрою виведення
аспект (наприклад, його ширина, ...). Опції, описані нижче, можна використовувати для керування
Алгоритм форматування діагностичних повідомлень, наприклад, скільки символів у рядку, як часто
слід повідомити інформацію про місцезнаходження джерела. Зараз це може лише інтерфейс C++
враховуйте ці варіанти. Однак очікується, що найближчим часом залишиться фронт
кінці могли б їх правильно перетравити.

-fmessage-length=n
Спробуйте відформатувати повідомлення про помилки так, щоб вони містилися в рядках приблизно n символів.
за замовчуванням 72 символи для г ++ і 0 для решти передніх кінців, які підтримуються
GCC. Якщо n дорівнює нулю, тоді перенесення рядків не виконуватиметься; з'явиться кожне повідомлення про помилку
на одному рядку.

-fdiagnostics-show-location=один раз
Має значення лише в режимі перенесення рядків. Доручає репортеру діагностичних повідомлень
випромінювати один раз інформація про місцезнаходження джерела; тобто на випадок, якщо повідомлення занадто довге, щоб вмістити
на одній фізичній лінії і має бути загорнуто, вихідне розташування не буде випромінюватися
(як префікс) знову і знову, в наступних рядках продовження. Це
поведінка за замовчуванням.

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

-fno-diagnostics-show-option
За замовчуванням кожна діагностика містить текст, що вказує параметр командного рядка
який безпосередньо контролює діагностику (якщо така опція відома діагностиці
техніка). Вказавши -fno-diagnostics-show-option прапор пригнічує це
поведінка.

опції до Запит or Придушити Попередження
Попередження – це діагностичні повідомлення, які повідомляють про конструкції, які не є властивими
помилкові, але це ризиковано або свідчить про те, що, можливо, сталася помилка.

Наступні незалежні від мови параметри не вмикають конкретні попередження, але контролюють їх
види діагностики, вироблені GCC.

-fsyntax-only
Перевірте код на наявність синтаксичних помилок, але не робіть нічого крім цього.

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

-w Блокувати всі попереджувальні повідомлення.

- Помилка
Зробіть усі попередження помилками.

-Помилка=
Зробіть вказане попередження помилкою. Специфікатор для попередження додається,
наприклад -Помилка = перемикач повертає попередження, керовані -Вимикач в помилки.
Цей перемикач приймає негативну форму, щоб використовувати її для заперечення - Помилка для конкретних попереджень,
наприклад -Wno-error=перемикач робить -Вимикач попередження не є помилками, навіть коли - Помилка
діє.

Попередження для кожного контрольованого попередження містить параметр, який контролює
попередження. Потім цю опцію можна використовувати з -Помилка= і -Без помилки= як описано
вище. (Друк параметра в попередженні можна вимкнути за допомогою
-fno-diagnostics-show-option прапор.)

Зверніть увагу, що вказуючи -Помилка=Foo автоматично передбачає -WFoo. Однак -Без помилки=Foo
нічого не означає.

-Wфатальні помилки
Ця опція змушує компілятор переривати компіляцію при першій помилці
замість того, щоб намагатися продовжувати і друкувати нові повідомлення про помилки.

Ви можете надіслати запит на багато спеціальних попереджень із початком опцій -WНаприклад - Прихований
запитувати попередження щодо неявних декларацій. Кожен із цих конкретних варіантів попереджень також
має негативну форму початку -Ні- вимкнути попередження; наприклад, -Без-неявно.
У цьому посібнику наведено лише одну з двох форм, залежно від того, яка з них не є стандартною. Для подальшого,
параметри, специфічні для мови, також стосуються C + + Діалект опції і Мета-С і
Objective-C ++ Діалект опції.

Коли запитується нерозпізнаний варіант попередження (наприклад, -Невідомо-попередження), GCC буде випромінювати
діагностика про те, що параметр не розпізнається. Однак, якщо -Ні- форма є
використовується, поведінка дещо відрізняється: діагностика не проводиться
-Невідомо-попередження якщо не проводиться інша діагностика. Це дозволяє використовувати
новий -Ні- варіанти зі старими компіляторами, але якщо щось піде не так, компілятор попередить
що був використаний нерозпізнаний варіант.

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

Дійсні програми ISO C і ISO C++ повинні правильно компілюватися з цією опцією або без неї
(хоча небагатьом буде потрібно -ansi або -стандартний параметр із зазначенням необхідної версії
ISO C). Однак без цієї опції деякі розширення GNU і традиційні C і
Функції C++ також підтримуються. При цьому варіанті вони відхиляються.

- педантичний не викликає попереджень щодо використання альтернативних ключових слів who
імена починаються і закінчуються на __. Педантичні попередження також відключені у виразі
що слідує за "__extension__". Однак лише системні файли заголовків повинні використовувати їх
шляхи евакуації; прикладні програми повинні уникати їх.

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

Функція повідомлення про будь-яку невідповідність ISO C може бути корисною в деяких випадках,
але вимагатиме значної додаткової роботи і буде зовсім відрізнятися від
- педантичний. Ми не плануємо підтримувати таку функцію найближчим часом.

Де стандарт, зазначений с -стандартний представляє розширений діалект C GNU, наприклад
gnu90 or gnu99, є відповідне база standard, версія ISO C на якій
заснований розширений діалект GNU. Попередження від - педантичний даються там, де вони є
вимагається базовим стандартом. (Не має сенсу робити такі попередження
тільки для функцій, які не належать до вказаного діалекту GNU C, оскільки за визначенням GNU
діалекти Сі включають всі функції, які компілятор підтримує за допомогою даної опції, і
нема про що попереджати.)

-педантичні помилки
Люблю - педантичний, за винятком того, що створюються помилки, а не попередження.

-Стінка
Це дозволяє отримати всі попередження про конструкції, які розглядають деякі користувачі
сумнівні, і їх легко уникнути (або змінити, щоб запобігти попередженню), навіть у
поєднання з макросами. Це також вмикає опис деяких мовних попереджень
in C + + Діалект опції і Мета-С і Objective-C ++ Діалект опції.

-Стінка вмикає такі попереджувальні прапорці:

-Водреса -Warray-bounds (тільки з -O2) -Wc++11-compat -Wchar-індекси
-Венум-порівняй (у C/Objc; це ввімкнено за замовчуванням у C++) -Невідомий-інт (С і
Тільки Objective-C) -Оголошення функції Wimplicit (лише C і Objective-C) -Коментар
- W формат -Wmain (тільки для C/ObjC і якщо -автономний) -Wmoybe-неініціалізований
-Брекети -Ненульовий -Дужки -Wpointer-знак - Замовлення -Повернення
-Wsequence-point -Wsign-порівняти (тільки на C++) -Wstrict-aliasing -Wstrict-overflow=1
-Вимикач -Втриграфи -Wuninitialized -Wunknown-pragmas -Wunused-функція
-Wunused-мітка -Wunused-value -Wunused-змінна -Wvolatile-register-var

Зауважте, що деякі позначки попереджень не мають на увазі -Стінка. Деякі з них попереджають про
конструкції, які користувачі зазвичай не вважають сумнівними, але які
іноді ви можете перевірити; інші попереджають про конструкції, які є
в деяких випадках необхідно або важко уникнути, і немає простого способу змінити
код для придушення попередження. Деякі з них увімкнено -Векстра але багато з них
необхідно ввімкнути окремо.

-Векстра
Це вмикає деякі додаткові позначки попереджень, які не ввімкнені -Стінка. (Використовується цей варіант
Бути покликаним -W. Старіша назва все ще підтримується, але новіша назва більше
описовий.)

-Wclobbered - Пусте тіло -Проігноровані-кваліфікатори -Wmissing-field-ініціалізатори
-Wmissing-parameter-type (лише C) -Декларація по-світу (лише C) -Woverride-init
-Wsign-порівняти -межі типів -Wuninitialized -Wunused-параметр (тільки з -Wunused or
-Стінка) -Wunused- but-set-parameter (тільки з -Wunused or -Стінка)

Опція -Векстра також друкує попереджувальні повідомлення для таких випадків:

· Покажчик порівнюється з цілим нулем з <, <=, >або >=.

· (Тільки C++) І перераховувач, і неперелічувач з'являються в умовному вигляді
вираз.

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

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

· (Тільки C++) Взяття адреси змінної, яка була оголошена реєструвати.

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

-Wchar-індекси
Попереджати, якщо індекс масиву має тип "char". Це поширена причина помилок, як
програмісти часто забувають, що цей тип підписується на деяких машинах. Це попередження
включена за -Стінка.

-Коментар
Попереджати щоразу, коли послідовність коментарів-початків /* з'являється в а /* коментар або будь-коли a
Зворотна коса риса-новий рядок з’являється в a // коментар. Це попередження вмикається за допомогою -Стінка.

-Wno-покриття-невідповідність
Попереджати, якщо профілі зворотного зв’язку не збігаються під час використання -fprofile-use варіант. Якщо
вихідний файл був змінений між -fprofile-gen і -fprofile-use, файли з
відгук про профіль може не відповідати вихідному файлу, і GCC не може використовувати профіль
інформація зворотного зв'язку. За замовчуванням це попередження ввімкнено і розглядається як помилка.
-Wno-покриття-невідповідність можна використовувати для вимкнення попередження або
-Wno-error=невідповідність покриття можна використовувати для вимкнення помилки. Вимкнення помилки
оскільки це попередження може призвести до погано оптимізованого коду і корисно лише у випадку
дуже незначні зміни, такі як виправлення помилок у існуючій базі коду. Повне відключення
попередження не рекомендується.

-Wno-cpp
(лише C, Objective-C, C++, Objective-C++ і Fortran)

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

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

Легко випадково виконати обчислення за допомогою «подвійного», оскільки з плаваючою комою
Літерали неявно мають тип "подвійний". Наприклад, у:

площа плавання (радіус плавання)
{
return 3.14159 * радіус * радіус;
}

компілятор виконає все обчислення з "подвійним", оскільки плаваючий-
точковий літерал є "подвійним".

- W формат
Перевірте виклики «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).

З - W формат також перевіряє аргументи нульового формату для кількох функцій, - W формат
також передбачає -Ненульовий.

- W формат включено до -Стінка. Для додаткового контролю над деякими аспектами перевірки формату,
варіанти -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length,
-Wformat-нелітеральний, -Wformat-безпека, і -Wformat=2 є в наявності, але немає
включені в -Стінка.

ПРИМІТКА. В Ubuntu 8.10 і пізніших версіях цей параметр увімкнено за замовчуванням для C, C++,
ObjC, ObjC++. Щоб вимкнути, використовуйте -Wformat=0.

-Wformat-y2k
If - W формат вказано, також попереджає про формати "strftime", які можуть дати лише a
двозначний рік.

-Wno-format-contains-nul
If - W формат вказано, не попереджати про форматні рядки, які містять NUL-байти.

-Wno-format-extra-args
If - W формат вказано, не попереджати про зайві аргументи для "printf" або "scanf"
функція форматування. Стандарт C визначає, що такі аргументи ігноруються.

Де невикористані аргументи лежать між використаними аргументами, які вказані with $
специфікації номера операнда, зазвичай попередження все ще надаються, оскільки
реалізація не могла знати, який тип передати до "va_arg", щоб пропустити невикористане
аргументи. Однак у випадку форматів "scanf" ця опція пригнічує
попередження, якщо всі невикористані аргументи є покажчиками, починаючи зі специфікації Single Unix
каже, що такі невикористані аргументи допустимі.

-Wno-format-zero-length
If - W формат вказано, не попереджати про формати нульової довжини. Стандарт C
вказує, що дозволені формати нульової довжини.

-Wformat-нелітеральний
If - W формат вказано, також попереджає, якщо рядок форматування не є рядковим літералом і
тому не можна перевірити, якщо функція format не приймає свої аргументи формату як a
"va_list".

-Wformat-безпека
If - W формат вказано, також попереджає про використання функцій форматування, які представляють
можливі проблеми з безпекою. Наразі це попереджає про виклики «printf» і
Функції "scanf", де форматний рядок не є рядковим літералом і немає
аргументи формату, як у "printf (foo);". Це може бути дірою в безпеці, якщо формат
рядок отримано з ненадійного введення та містить %n. (Наразі це підмножина чого
-Wformat-нелітеральний попереджає про, але в майбутньому можуть бути додані попередження
-Wformat-безпека які не входять до -Wformat-нелітеральний.)

ПРИМІТКА. В Ubuntu 8.10 і пізніших версіях цей параметр увімкнено за замовчуванням для C, C++,
ObjC, ObjC++. Щоб вимкнути, використовуйте -Wno-format-security, або вимкнути всі попередження про формат
з -Wformat=0. Щоб зробити попередження безпеки форматування фатальними, вкажіть
-Помилка = формат-безпека.

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

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

-Ненульовий включено до -Стінка і - W формат. Його можна відключити за допомогою -Wno-ненульовий
варіант.

-Winit-self (лише C, C++, Objective-C і Objective-C++)
Попереджати про неініціалізовані змінні, які ініціалізовані самі собою. Зверніть увагу на це
Опцію можна використовувати лише з -Wuninitialized варіант.

Наприклад, GCC попередить про неініціалізацію "i" лише в наступному фрагменті
коли -Winit-self було зазначено:

int f()
{
int i = i;
return i;
}

-Невідомий-інт (лише C і Objective-C)
Попереджати, коли в декларації не вказано тип. Це попередження вмикається за допомогою -Стінка.

-Оголошення функції Wimplicit (лише C і Objective-C)
Видавати попередження щоразу, коли функція використовується перед її оголошенням. У режимі C99
(-std=c99 or -std=gnu99), це попередження ввімкнено за замовчуванням і перетворюється на файл
помилка через -педантичні помилки. Це попередження також увімкнено за допомогою -Стінка.

- Прихований (лише C і Objective-C)
Такий же, як -Невідомий-інт і -Оголошення функції Wimplicit. Це попередження ввімкнено
by -Стінка.

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

Це попередження також увімкнено за допомогою -Векстра.

-Wmain
Попередьте, якщо тип основний є підозрілим. основний має бути функцією із зовнішнім
зв'язування, повертаючи int, беручи або нуль аргументів, два або три аргументи
відповідні види. Це попередження ввімкнено за замовчуванням у C++ і вмикається будь-яким
-Стінка or - педантичний.

-Брекети
Попереджати, якщо ініціализатор агрегату або об’єднання не повністю закріплений у дужках. У наступному
наприклад, ініціализатор для 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++)
Попереджати, якщо наданий користувачем каталог включення не існує.

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

Також попереджати, якщо порівняння подобається x<=y<=z з'являється; це еквівалентно (x<=y ? 1 : 0)
<= z, що відрізняється від інтерпретації звичайного математичного позначення.

Також попереджаємо про конструкції, у яких може виникнути плутанина, щодо якого оператора "if" an
"інша" гілка належить. Ось приклад такого випадку:

{
якщо)
якщо (b)
foo ();
ще
бар ();
}

У C/C++ кожна гілка "else" належить до внутрішнього можливого оператора "if", який
у цьому прикладі «якщо (b)». Це часто не те, чого очікував програміст, як
проілюстрований у наведеному вище прикладі відступом, який вибрав програміст. Коли є
Можливість цієї плутанини, GCC видасть попередження, коли цей прапор стане
вказано. Щоб усунути попередження, додайте явні дужки навколо внутрішнього «якщо»
твердження, тому немає жодного способу, щоб "else" належати до вкладеного "if". The
отриманий код буде виглядати так:

{
якщо)
{
якщо (b)
foo ();
ще
бар ();
}
}

Також попереджайте про небезпечне використання ?: з пропущеним розширенням GNU середнього операнда. Коли
умова в операторі ?: є логічним виразом, яким буде пропущене значення
завжди 1. Часто користувач очікує, що це буде значення, обчислене всередині умовного
вираз замість цього.

Це попередження вмикається -Стінка.

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

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

Не вказано, коли між послідовністю точки змінюються значення
об'єкти вступають в дію. Програми, поведінка яких залежить від цього, мають невизначену поведінку;
стандарти C і C++ визначають, що «Між попередньою та наступною точкою послідовності an
Збережене значення об’єкта має змінюватися щонайбільше один раз за допомогою оцінки an
вираз. Крім того, попереднє значення має зчитуватися лише для визначення значення до
бути збережено.". Якщо програма порушує ці правила, результати на будь-якому конкретному
реалізація абсолютно непередбачувана.

Прикладами коду з невизначеною поведінкою є "a = a++;", "a[n] = b[n++]" і "a[i++] =
i;". Деякі більш складні випадки не діагностуються за допомогою цієї опції, і це може дати
випадковий хибнопозитивний результат, але в цілому він був визнаний досить ефективним при
виявлення таких проблем у програмах.

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

Це попередження вмикається -Стінка для C і C++.

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

Для C++ функція без типу повернення завжди видає навіть діагностичне повідомлення
коли -Wno-return-type вказано. Виняток становлять лише основний та функції
визначені в системних заголовках.

Це попередження вмикається -Стінка.

-Вимикач
Попереджати кожного разу, коли оператор "switch" має індекс перерахованого типу і не містить "case"
для одного або кількох іменованих кодів цього перерахування. (Наявність "за замовчуванням"
label запобігає цьому попередженню.) Мітки "case" також знаходяться за межами діапазону перерахування
викликати попередження, коли використовується ця опція (навіть якщо є позначка «за замовчуванням»). Це
попередження увімкнено за допомогою -Стінка.

-Wswitch-за замовчуванням
Попереджати, коли оператор "перемикання" не має регістру "за замовчуванням".

-Wwwitch-enum
Попереджати кожного разу, коли оператор "switch" має індекс перерахованого типу і не містить "case"
для одного або кількох іменованих кодів цього перерахування. мітки "кейс" за межами
діапазон перерахування також викликає попередження, коли використовується ця опція. Єдина різниця
між -Вимикач і ця опція полягає в тому, що ця опція дає попередження про пропущене
код перерахування, навіть якщо є мітка "за замовчуванням".

-Wsync-nand (лише C і C++)
Попереджати, коли вбудовані функції "__sync_fetch_and_nand" і "__sync_nand_and_fetch"
використаний. Ці функції змінили семантику в GCC 4.4.

-Втриграфи
Попереджати, якщо зустрічаються триграфи, які можуть змінити значення програми
(триграфи в коментарях не попереджуються). Це попередження вмикається за допомогою -Стінка.

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

Щоб придушити це попередження, використовуйте невикористаний атрибут.

Це попередження також увімкнено за допомогою -Wunused Разом з -Векстра.

-Wunused-але-встановлена ​​змінна
Попереджати кожного разу, коли локальна змінна призначена, але в іншому випадку не використовується (окрім її
декларація). Це попередження вмикається за допомогою -Стінка.

Щоб придушити це попередження, використовуйте невикористаний атрибут.

Це попередження також увімкнено за допомогою -Wunused, який увімкнено за допомогою -Стінка.

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

-Wunused-мітка
Попереджати, коли мітка оголошується, але не використовується. Це попередження вмикається за допомогою -Стінка.

Щоб придушити це попередження, використовуйте невикористаний атрибут.

-Wunused-local-typedefs (лише C, Objective-C, C++ та Objective-C++)
Попереджати, коли параметр typedef, визначений локально у функції, не використовується.

-Wunused-параметр
Попереджати, коли параметр функції не використовується, окрім його оголошення.

Щоб придушити це попередження, використовуйте невикористаний атрибут.

-Wno-unused-result
Не попереджати, якщо викликає функцію, позначену атрибутом "warn_unused_result".
не використовувати його повернуте значення. За замовчуванням є -Wunused-результат.

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

Щоб придушити це попередження, використовуйте невикористаний атрибут.

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

Це попередження вмикається -Стінка.

-Wunused
Все вищесказане -Wunused комбіновані варіанти.

Щоб отримати попередження про невикористаний параметр функції, потрібно або вказати
-Векстра -Wunused (зауважте, що -Стінка мається на увазі -Wunused), або вкажіть окремо
-Wunused-параметр.

-Wuninitialized
Попереджати, якщо використовується автоматична змінна без попередньої ініціалізації або якщо змінна
може бути заблоковано викликом "setjmp". У C++ попереджати про нестатичні посилання чи не-
статичний сопзЬ член з'являється в класі без конструкторів.

Якщо ви хочете попередити про код, який використовує неініціалізоване значення змінної in
власний ініціализатор, використовуйте -Winit-self варіант.

Ці попередження виникають для окремих неініціалізованих або пошкоджених елементів конструкції,
об’єднання змінних або змінних масиву, а також для змінних, які не є ініціалізованими або заблокованими
в цілому. Вони не зустрічаються для змінних або елементів, оголошених "нестабільними". Тому що
ці попередження залежать від оптимізації, точні змінні чи елементи для яких існують
Ці попередження залежатимуть від точних параметрів оптимізації та версії використаної GCC.

Зауважте, що може не бути попередження про змінну, яка використовується лише для обчислення a
значення, яке саме по собі ніколи не використовується, оскільки такі обчислення можуть бути видалені потоком даних
аналіз перед друком попереджень.

-Wmoybe-неініціалізований
Для автоматичної змінної, якщо існує шлях від запису функції до використання
змінна, яка ініціалізована, але існують деякі інші шляхи, якими змінна не є
ініціалізований, компілятор видасть попередження, якщо не зможе довести неініціалізоване
шляхи не відбуваються під час виконання. Ці попередження є необов’язковими, оскільки GCC не є обов’язковими
достатньо розумний, щоб побачити всі причини, чому код може бути правильним, незважаючи на його вигляд
є помилка. Ось один приклад того, як це може статися:

{
int x;
перемикач (y)
{
випадок 1: x = 1;
break;
випадок 2: x = 4;
break;
випадок 3: x = 5;
}
foo (x);
}

Якщо значення "y" завжди дорівнює 1, 2 або 3, то "x" завжди ініціалізовано, але GCC
не знає цього. Щоб придушити попередження, користувачеві потрібно вказати регістр за замовчуванням
з стверджувати(0) або подібний код.

Цей параметр також попереджає, коли енергонезалежна автоматична змінна може бути змінена за допомогою a
виклик "longjmp". Ці попередження також можливі лише при оптимізації
складання.

Компілятор бачить лише виклики "setjmp". Він не може знати, де буде "longjmp".
викликаний; фактично, обробник сигналу може викликати його в будь-який момент коду. Як
в результаті ви можете отримати попередження, навіть якщо насправді проблем немає, оскільки "longjmp"
насправді не можна викликати в місце, яке може викликати проблему.

Деяких помилкових попереджень можна уникнути, якщо оголосити всі функції, які ви використовуєте
ніколи не повертатися як "noreturn".

Це попередження вмикається -Стінка or -Векстра.

-Wunknown-pragmas
Попереджати, коли зустрічається директива "#pragma", яка не зрозуміла GCC. Якщо це
використовується параметр командного рядка, попередження будуть навіть видаватися для невідомих прагм у
системні заголовні файли. Це не так, якби попередження було ввімкнено лише за допомогою
-Стінка параметр командного рядка.

-Вно-прагми
Не попереджайте про неправильне використання прагм, таких як неправильні параметри, недійсний синтаксис або
конфлікти між прагмами. Дивись також -Wunknown-pragmas.

-Wstrict-aliasing
Ця опція активна лише тоді, коли -fstrict-aliasing є активним. Він попереджає про код, що
може порушити строгі правила псевдонімів, які компілятор використовує для оптимізації.
Попередження не охоплює всі випадки, але намагається вловити більш поширені
підводних каменів. Він входить в -Стінка. Це еквівалентно -Wstrict-aliasing=3

-Wstrict-aliasing=n
Ця опція активна лише тоді, коли -fstrict-aliasing є активним. Він попереджає про код, що
може порушити строгі правила псевдонімів, які компілятор використовує для оптимізації.
Більш високі рівні відповідають вищій точності (менше помилкових спрацьовувань). Вищі рівні
також відповідають більшим зусиллям, подібно до того, як працює -O. -Wstrict-aliasing is
еквівалентно -Wstrict-aliasing=n, з n=3.

Рівень 1: найбільш агресивний, швидкий, найменш точний. Можливо, корисно, коли вищий рівень
не попереджати, але -fstrict-aliasing все одно порушує код, оскільки в ньому дуже мало помилок
негативи. Однак він має багато помилкових спрацьовувань. Попереджає про всі перетворення покажчика
між можливо несумісними типами, навіть якщо вони ніколи не розіменовуються. Бігає спереду
тільки кінець.

Рівень 2: Агресивний, швидкий, не дуже точний. Може все ще мати багато помилкових спрацьовувань (ні
хоча б рівень 1), і мало помилкових негативних результатів (але, можливо, більше, ніж рівень 1).
На відміну від рівня 1, він попереджає лише тоді, коли адреса отримана. Попереджає про неповні типи.
Працює тільки в передній частині.

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

-Wstrict-overflow
-Wstrict-overflow=n
Ця опція активна лише тоді, коли -fstrict-overflow є активним. Попереджає про випадки
де компілятор оптимізує, виходячи з припущення, що підписане переповнення ні
відбуваються. Зауважте, що він не попереджає про всі випадки, коли код може переповнюватися: it
попереджає лише про випадки, коли компілятор реалізує певну оптимізацію. Таким чином, це
попередження залежить від рівня оптимізації.

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

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

-Wstrict-overflow=2
Також попереджаємо про інші випадки, коли порівняння спрощено до константи. Для
приклад: "абс (x) >= 0". Це можна спростити лише тоді, коли -fstrict-overflow В
ефект, оскільки "abs (INT_MIN)" переповнюється до "INT_MIN", що менше нуля.
-Wstrict-overflow (без рівня) те саме, що -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=[чистий|сопзЬ|noreturn]
Попереджати про випадки, коли додавання атрибута може бути корисним. Атрибути на даний момент
підтримувані, наведені нижче.

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

-Warray-bounds
Ця опція активна лише тоді, коли -ftree-vrp активний (за замовчуванням для -O2 і вище). Це
попереджає про індекси до масивів, які завжди виходять за межі. Це попередження
включена за -Стінка.

-Wno-div-by-zero
Не попереджати про ціле ділення на нуль під час компіляції. Ділення з плаваючою комою на
про нуль не попереджається, оскільки це може бути законним способом отримання нескінченності та
NaNs.

-Wsystem-headers
Друк попереджень для конструкцій, знайдених у файлах заголовків системи. Попередження від
системні заголовки, як правило, приховуються, припускаючи, що зазвичай ні
вказують на реальні проблеми і лише ускладнюють читання результатів компілятора. Використання
цей параметр командного рядка повідомляє GCC видавати попередження із заголовків системи, як ніби вони
відбулося в коді користувача. Однак зверніть увагу, що використання -Стінка у поєднанні з цим варіантом
волі НЕ попереджати про невідомі прагми в системних заголовках --- для цього -Wunknown-pragmas
також необхідно використовувати.

- Батути
Попереджати про трампліни, створені для вказівників на вкладені функції.

Батут — це невеликий фрагмент даних або код, який створюється під час запуску
час у стеку, коли береться адреса вкладеної функції, і
використовується для непрямого виклику вкладеної функції. Для деяких цілей це
складається лише з даних і, таким чином, не потребує спеціальної обробки. але,
для більшості цілей він складається з коду і, таким чином, вимагає стека
бути виконаним, щоб програма працювала належним чином.

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

Ідея полягає в тому, що іноді це зручно (для програміста).
розглядати значення з плаваючою комою як наближення до нескінченно точних дійсних чисел.
Якщо ви робите це, то вам потрібно обчислити (проаналізувавши код або в якомусь
іншим способом) максимальна або ймовірна максимальна помилка, яку вносить обчислення, і
допускайте це під час виконання порівнянь (і під час виробництва результату, але це a
інша проблема). Зокрема, замість перевірки на рівність ви б перевіряли
щоб побачити, чи два значення мають діапазони, які перекриваються; і це робиться за допомогою
оператори відношень, тому порівняння рівності, ймовірно, помилкові.

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

· Параметри макросу, які з'являються в рядкових літералах у тілі макросу. в
традиційна заміна макросу C відбувається всередині рядкових літералів, але цього не відбувається
в ISO C.

· У традиційному C деякі директиви препроцесора не існували. традиційний
препроцесори розглядатимуть рядок як директиву лише в тому випадку, якщо # з'явився в
графа 1 на рядку. Тому -Традиційний попереджає про директиви, які
традиційний C розуміє, але ігнорує, оскільки # не відображається як
перший символ у рядку. Це також пропонує вам приховати директиви, як #прагма
не розуміє традиційний C, зробивши відступ. Деякі традиційні
реалізації не визнають #elif, тому пропонується уникати його взагалі.

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

· Унарний оператор плюс.

· U цілочисельний константний суфікс або F or L постійні суфікси з плаваючою комою.
(Традиційний C підтримує L суфікс до цілочисельних констант.) Зверніть увагу, ці
суфікси з'являються в макросах, визначених у системних заголовках більшості сучасних систем,
напр _ХВ/_МАКС макроси в " ". Використання цих макросів у коді користувача може
зазвичай призводять до помилкових попереджень, однак інтегрований препроцесор GCC має
достатньо контексту, щоб уникнути попередження в цих випадках.

· Функція, оголошена зовнішньою в одному блоці, а потім використана після закінчення
блок

· Оператор «switch» має операнд типу «long».

· Оголошення не «статичної» функції слід за «статичним». Ця конструкція не є
прийнято деякими традиційними компіляторами C.

· Тип ISO цілочисельної константи має різну ширину або знак
традиційний тип. Це попередження видається лише в тому випадку, якщо основа константи дорівнює десяти.
Тобто шістнадцяткові чи вісімкові значення, які зазвичай представляють бітові шаблони, не є такими
попереджали про.

· Виявлено використання конкатенації рядків ISO.

· Ініціалізація автоматичних агрегатів.

· Ідентифікатор конфліктує з мітками. У традиційному C відсутній окремий простір імен для
етикетки.

· Ініціалізація спілок. Якщо ініціализатор дорівнює нулю, попередження пропущено.
Це робиться в припущенні, що в коді користувача з’являється нульовий ініціализатор
обумовлено, наприклад, "__STDC__", щоб уникнути пропуску попереджень ініціализатора та покладається на
ініціалізація за замовчуванням на нуль у традиційному випадку C.

· Перетворення за прототипами між значеннями фіксованої/з плаваючою комою і навпаки. The
відсутність цих прототипів при компіляції з традиційним C може викликати серйозні проблеми
проблеми. Це підмножина можливих попереджень про перетворення для повного набору
використання -Wtraditional-перетворення.

· Використання визначень функцій стилю ISO C. Це попередження навмисне НЕ випущений
для декларацій прототипів або змінних функцій, оскільки ці функції ISO C будуть
з'являються у вашому коді під час використання традиційних макросів сумісності libiberty з C,
«PARAMS» і «VPARAMS». Це попередження також обходиться для вкладених функцій
оскільки ця функція вже є розширенням GCC і, таким чином, не має відношення до
традиційна сумісність із C.

-Wtraditional-перетворення (лише C і Objective-C)
Попереджати, якщо прототип викликає перетворення типу, яке відрізняється від того, що могло б статися
на той самий аргумент за відсутності прототипу. Це включає перетворення
фіксована точка на плаваючу і навпаки, а перетворення змінюють ширину або
знакові аргументи з фіксованою точкою, за винятком випадків, коли це те саме, що й підвищення за замовчуванням.

-Wdeclaration-after-statement (лише C і Objective-C)
Попереджати, коли оголошення знайдено після оператора в блоці. Ця конструкція відома
із C++, був представлений разом із ISO C99 і за замовчуванням дозволений в GCC. Це не
підтримується ISO C90 і не підтримувався версіями GCC до GCC 3.0.

-Вундеф
Попереджати, якщо невизначений ідентифікатор оцінюється в файлі # якщо Директиви.

-Wno-endif-мітки
Не попереджайте, коли an #else або #endif після них текст.

- Тінь
Попереджати щоразу, коли оголошення локальної змінної або типу затінює іншу змінну,
параметр, тип або член класу (у C++), або коли є вбудована функція
затінений. Зауважте, що в C++ компілятор не попереджає, якщо локальна змінна затінює a
struct/class/enum, але попереджає, якщо він перекриває явний typedef.

-Більше ніж=довжина
Попереджати, коли об’єкт розміром більше ніж довжина байт визначено.

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

-Wno-free-nonheap-object
Не попереджати при спробі звільнити об’єкт, який не був розміщений у купі.

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

Повідомлення відповідає результату -fstack-usage.

· Якщо використання стека повністю статичне, але перевищує вказану кількість, це:

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

· Якщо використання стека (частково) динамічне, але обмежене, це:

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

· Якщо використання стека (частково) динамічне і не обмежене, це:

попередження: використання стека може бути необмеженим

-Wunsafe-loop-optimizations
Попереджати, якщо цикл не може бути оптимізований, тому що компілятор не міг нічого припустити
межі індексів циклу. З -funsafe-loop-optimizations попередити, якщо компілятор
зробив такі припущення.

-Wno-pedantic-ms-format (Лише цілі MinGW)
Вимикає попередження про не-ISO специфікатори ширини формату "printf" / "scanf" "I32",
"I64" і "I" використовуються для цільових пристроїв Windows залежно від середовища виконання MS, коли ви використовуєте
варіанти - W формат і - педантичний без gnu-розширень.

-Wpointer-ариф
Попереджати про все, що залежить від «розміру» типу функції або «void». GNU C
призначає цим типам розмір 1, для зручності в обчисленнях з "void *"
покажчики та покажчики на функції. У C++ попереджати також, коли виконується арифметична операція
включає "NULL". Це попередження також увімкнено за допомогою - педантичний.

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

-Wbad-function-cast (лише C і Objective-C)
Попереджати кожного разу, коли виклик функції приводиться до невідповідного типу. Наприклад, попередити, якщо
"int malloc()" перетворюється на "що завгодно *".

-Wc++-compat (лише C і Objective-C)
Попереджати про конструкції ISO C, які не входять до загальної підмножини ISO C та ISO
C++, наприклад, запит на неявне перетворення з "void *" на вказівник на non-"void"
тип

-Wc++11-compat (лише C++ та Objective-C++)
Попереджайте про конструкції C++, значення яких відрізняється між ISO C++ 1998 і ISO C++ 2011,
наприклад, ідентифікатори в ISO C++ 1998, які є ключовими словами в ISO C++ 2011. Це попередження
включається -Звуження і увімкнено за допомогою -Стінка.

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

Також попереджайте, коли виконуєте переведення, яке вводить кваліфікатор типу небезпечним способом. Для
наприклад, переведення "char **" до "const char **" небезпечно, як у цьому прикладі:

/* p — значення char **. */
const char **q = (const char **) p;
/* Призначення рядка тільки для читання const char * є нормальним. */
*q = "рядок";
/* Тепер покажчик char** вказує на пам'ять лише для читання. */
**p = 'b';

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

- Write-strings
Під час компіляції C надайте рядковим константам тип "const char[довжина]" так що копіювання
адреса одиниці в не-"const" "char *" покажчик отримає попередження. Ці
попередження допоможуть вам знайти під час компіляції код часу, який можна спробувати записати в рядок
константа, але тільки якщо ви дуже обережно використовували "const" в оголошеннях
і прототипи. Інакше це буде просто неприємністю. Ось чому ми не зробили
-Стінка вимагати цих попереджень.

Під час компіляції C++ попереджайте про застаріле перетворення рядкових літералів у "char
*". Це попередження ввімкнено за замовчуванням для програм C++.

-Wclobbered
Попереджати про змінні, які можуть бути змінені longjmp or vfork. Це попередження також є
включена за -Векстра.

-Wперетворення
Попереджати про неявні конверсії, які можуть змінити значення. Це включає конверсії
між дійсним і цілим числом, наприклад "abs (x)", коли "x" є "подвійним"; конверсії між
зі знаком і без знаку, наприклад "unsigned ui = -1"; і перетворення в менші типи, наприклад
"sqrtf (M_PI)". Не попереджайте про явні приведення, як-от "abs ((int) x)" і "ui =
(без знаку) -1", або якщо значення не змінюється перетворенням, як у "abs (2.0)".
Попередження про перетворення між цілими числами зі знаком і без знака можна вимкнути
використання -Wno-sign-перетворення.

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

-Wno-conversion-null (лише C++ та Objective-C++)
Не попереджати про перетворення між типами "NULL" і без вказівника. -Wconversion-null is
увімкнено за замовчуванням.

-Wzero-as-null-pointer-constant (лише C++ та Objective-C++)
Попереджати, коли литерал '0' використовується як константа нульового покажчика. Це може бути корисно для
полегшити перетворення в "nullptr" у C++11.

- Пусте тіло
Попереджати, якщо в an if, ще or do в той час як заяву. Це попередження
також увімкнено за допомогою -Векстра.

-Венум-порівняй
Попереджати про порівняння значень різних перерахованих типів. У C++ перерахування
невідповідності в умовних виразах також діагностуються, і попередження вмикається
за замовчуванням. У C це попередження вмикається за допомогою -Стінка.

-Wjump-misses-init (C, тільки Objective-C)
Попереджати, якщо оператор "goto" або оператор "switch" перейде вперед
ініціалізація змінної, або перехід назад до мітки після того, як змінна була
ініціалізовано. Це лише попереджає про змінні, які ініціалізуються, коли вони є
оголосив. Це попередження підтримується лише для C і Objective-C; в C++ такого роду
гілка в будь-якому випадку є помилкою.

-Wjump-misses-init включено до -Wc++-compat. Його можна відключити за допомогою
-Wno-jump-misses-init варіант.

-Wsign-порівняти
Попереджати, коли порівняння значень зі знаком і без знака може привести до неправильного результату
результат, коли значення зі знаком перетворюється на беззнакове. Це попередження також увімкнено
by -Векстра; щоб отримати інші попередження -Векстра без цього попередження використовуйте -Векстра
-Wno-sign-compare.

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

-Водреса
Попереджати про підозріле використання адрес пам’яті. До них відноситься використання адреси a
функція в умовному виразі, наприклад "void func(void); if (func)", і
порівняння з адресою пам'яті рядкового літералу, наприклад "if (x == "abc")".
Таке використання зазвичай вказує на помилку програміста: адреса функції завжди
оцінюється як істина, тому їх використання в умовному вигляді зазвичай вказує на те, що програміст
забули дужки під час виклику функції; і порівняння з рядковими літералами
призводять до невизначеної поведінки і не переносяться в C, тому зазвичай вказують
що програміст мав намір використовувати "strcmp". Це попередження вмикається за допомогою -Стінка.

-Wlogical-op
Попереджати про підозріле використання логічних операторів у виразах. Це включає використання
логічні оператори в контекстах, де, ймовірно, очікується побітовий оператор.

-Waggregate-return
Попереджати, якщо визначено чи викликано якісь функції, які повертають структури чи об’єднання. (В
мовами, де ви можете повернути масив, це також викликає попередження.)

-Wno-атрибути
Не попереджати, якщо використовується неочікуваний "__attribute__", наприклад, нерозпізнані атрибути,
атрибути функції, застосовані до змінних тощо. Це не зупинить помилки для
неправильне використання підтримуваних атрибутів.

-Wno-вбудований-макро-перевизначення
Не попереджати, якщо певні вбудовані макроси перевизначено. Це пригнічує попередження для
перевизначення "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" і
"__BASE_FILE__".

-Wstrict-прототипи (лише C і Objective-C)
Попереджає, якщо функція оголошена або визначена без вказівки типів аргументів. (Ан
Визначення функції старого стилю дозволяється без попередження, якщо передує a
декларація, яка визначає типи аргументів.)

-Декларація по-світу (лише C і Objective-C)
Попереджати про застаріле використання, відповідно до стандарту C, в декларації. Для
Наприклад, попереджати, якщо специфікатори класу зберігання, як-от "static", не є першими речами в a
декларація. Це попередження також увімкнено за допомогою -Векстра.

-Wold-style-definition (лише C і Objective-C)
Попереджати, якщо використовується визначення функції старого стилю. Попередження надається, навіть якщо воно є
попередній прототип.

-Wmissing-parameter-type (лише C і Objective-C)
Параметр функції оголошується без специфікатора типу у функціях у стилі K&R:

void foo(bar) { }

Це попередження також увімкнено за допомогою -Векстра.

-Wmissing-прототипи (лише C і Objective-C)
Попереджати, якщо глобальна функція визначена без попереднього оголошення прототипу. Це
попередження видається, навіть якщо саме визначення містить прототип. Мета полягає в тому, щоб
виявляти глобальні функції, які не оголошені в заголовних файлах.

-Wmissing-декларації
Попереджати, якщо глобальна функція визначена без попереднього оголошення. Зробіть це, навіть якщо
саме визначення дає прототип. Використовуйте цю опцію для визначення глобального
функції, які не оголошені в заголовних файлах. У C++ попередження не видаються
шаблони функцій, або для вбудованих функцій, або для функцій в анонімних просторах імен.

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

struct s { int f, g, h; };
struct sx = { 3, 4 };

Цей параметр не попереджає про призначені ініціализатори, тому наступна модифікація
не викликає попередження:

struct s { int f, g, h; };
struct sx = { .f = 3, .g = 4 };

Це попередження входить до -Векстра. Щоб отримати інше -Векстра попередження без цього,
використання -Векстра -Без ініціализаторів відсутнього поля.

-Wmissing-format-attribute
Попереджати про покажчики функцій, які можуть бути кандидатами на атрибути «формат». Примітка
це лише можливі кандидати, а не абсолютні. GCC вгадає цю функцію
покажчики з атрибутами "format", які використовуються для присвоєння, ініціалізації,
Оператори передачі або повернення параметрів повинні мати відповідний атрибут "format".
в отриманому типі. Тобто ліва частина призначення або ініціалізації,
тип змінної параметра або тип повернення функції, що містить
відповідно має також мати атрибут "format", щоб уникнути попередження.

GCC також попередить про визначення функцій, які можуть бути кандидатами на «формат»
атрибути. Знову ж таки, це лише можливі кандидати. GCC вгадає цей "формат"
атрибути можуть бути доречними для будь-якої функції, яка викликає таку функцію, як "vprintf"
або "vscanf", але це може бути не завжди так, і деякі функції для цього
"format" атрибути відповідні можуть не виявлятися.

-Wno-multichar
Не попереджати, якщо багатосимвольна константа ('FOOF') використовується. Зазвичай вони вказують на a
помилка в коді користувача, оскільки вони мають значення, визначені реалізацією, і їх бути не повинно
використовується в переносному коді.

-Ненормалізовано=
У 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.
-Ненормалізовано=ідентифікатор пригнічує попередження для цих символів. Сподіваюся, що майбутнє
версії відповідних стандартів виправляють це, тому цього варіанта немає
за замовчуванням.

Ви можете вимкнути попередження для всіх символів, написавши -Ненормалізовано=немає. Ви
хотів би зробити це, лише якщо ви використовуєте іншу схему нормалізації (наприклад
«D»), тому що інакше можна легко створити помилки, які буквально неможливо
бачити.

Деякі символи в ISO 10646 мають різні значення, але виглядають ідентичними в деяких шрифтах
або методології відображення, особливо після застосування форматування. Наприклад
"\u207F", "НАДЗИМНА ЛАТИНСКА МАЛА БУКВА N", відображатиметься як звичайна "n"
що поміщено у верхній індекс. ISO 10646 визначає NFKC нормалізація
схему для перетворення всього цього в стандартну форму, і GCC попередить, якщо ваш
коду немає в NFKC, якщо ви використовуєте -Wnormalized=nfkc. Це попередження можна порівняти з
попередження про кожен ідентифікатор, який містить літеру O, оскільки його можна сплутати
з цифрою 0, і тому не є за замовчуванням, але може бути корисним як локальне кодування
конвенцію, якщо середовище програмування неможливо виправити для їх відображення
характери виразно.

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

-Wno-deprecated-declarations
Не попереджати про використання функцій, змінних і типів, позначені як застарілі
використовуючи атрибут "застарілий".

-Без переповнення
Не попереджати про переповнення часу компіляції в постійних виразах.

-Woverride-init (лише C і Objective-C)
Попереджати, якщо ініціалізоване поле без побічних ефектів замінено під час використання призначеного
ініціалізатори.

Це попередження входить до -Векстра. Щоб отримати інше -Векстра попередження без цього,
використання -Векстра -Wno-override-init.

-Упаковано
Попереджати, якщо структурі надано атрибут packed, але атрибут packed не має
вплив на планування або розмір конструкції. Такі конструкції можуть бути неправильно вирівняними
мало користі. Наприклад, у цьому коді змінна "fx" у "структурному рядку" буде
бути зміщеним, навіть якщо "структурний рядок" сам по собі не має атрибута packed:

struct foo {
int x;
char a, b, c, d;
} __attribute __ ((упакований));
панель структури {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
Серії GCC 4.1, 4.2 і 4.3 ігнорують атрибут "packed" у бітових полях типу
"char". Це було виправлено в GCC 4.4, але ця зміна може призвести до відмінностей у
макет структури. GCC інформує вас, коли зміщення такого поля змінилося в GCC
4.4. Наприклад, тут більше немає 4-бітового заповнення між полями "a" і "b".
структура:

struct foo
{
char a:4;
char b:8;
} __атрибут__ ((упаковано));

Це попередження ввімкнено за замовчуванням. Використовуйте -Wno-packed-bitfield-compat щоб вимкнути це
увага.

-Wpadded
Попереджати, якщо заповнення включено в структуру, щоб вирівняти елемент
структуру або вирівняти всю конструкцію. Іноді, коли це відбувається, це можливо
переставити поля структури, щоб зменшити заповнення і таким чином зробити
структура менша.

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

-Wnested-externs (лише C і Objective-C)
Попереджати, якщо у функції зустрічається "зовнішня" декларація.

- Winline
Попереджати, якщо функція не може бути вбудована і вона була оголошена як вбудована. Навіть з цим
Опція, компілятор не попереджатиме про збої у вбудованих функціях, оголошених в
системні заголовки.

Компілятор використовує різноманітні евристики, щоб визначити, вставляти чи ні
функція. Наприклад, компілятор враховує розмір функції
inlined і кількість вбудовування, яке вже було зроблено в поточній функції.
Тому незначні, здавалося б, зміни у вихідній програмі можуть викликати
попередження, вироблені - Winline з'являтися або зникати.

-Wno-invalid-offsetof (лише C++ та Objective-C++)
Придушити попередження від застосування за межами макрос до типу не-POD. Згідно з
стандарт ISO C++ 1998 року, застосовуючи за межами до типу не-POD не визначено. в
існуючі реалізації C++, однак, за межами зазвичай дає значущі результати
навіть у разі застосування до певних типів не-POD. (наприклад, простий структура Що
не може бути типом POD лише через наявність конструктора.) Цей прапор призначений для
користувачі, які знають, що пишуть непереносний код, і свідомо це зробили
вирішив ігнорувати попередження про це.

Обмеження на за межами може бути послаблено в майбутній версії стандарту C++.

-Wno-int-to-pointer-cast
Придушити попередження від приведення до типу вказівника цілого числа іншого розміру. в
C++, приведення до типу покажчика меншого розміру є помилкою. Wint-to-pointer-cast is
увімкнено за замовчуванням.

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

-Winvalid-pch
Попереджати, якщо в шляху пошуку знайдено попередньо скомпільований заголовок, але його неможливо використати.

-Довго-довго
Попередити, якщо довго довго використовується тип. Це ввімкнено або - педантичний or -Традиційний
в режимах ISO C90 і C++98. Щоб заблокувати попереджувальні повідомлення, використовуйте -Ні-довго-довго.

-Wvariadic-макроси
Попереджати, якщо мінливі макроси використовуються в педантичному режимі ISO C90 або в альтернативному синтаксисі GNU
у педантичному режимі ISO C99. Це за замовчуванням. Щоб заблокувати попереджувальні повідомлення, використовуйте
-Wno-variadic-macros.

-Wvector-operation-performance
Попереджати, якщо векторна операція не реалізована через можливості SIMD архітектури.
В основному корисний для налаштування продуктивності. Може бути реалізована векторна операція
«шматково», що означає, що скалярна операція виконується над кожним вектором
елемент; «паралельно», що означає, що векторна операція реалізується за допомогою
скаляри більш широкого типу, які зазвичай є більш ефективними; і «як одиночний
скаляр», що означає, що вектор вписується в скалярний тип.

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

-Wvolatile-register-var
Попереджати, якщо змінна регістра оголошена непостійною. Модифікатор volatile ні
заборонити всі оптимізації, які можуть виключити читання та/або запис в реєстр
змінні. Це попередження вмикається за допомогою -Стінка.

-Wdisabled-optimization
Попереджати, якщо запит на оптимізацію вимкнено. Це попередження, як правило, не діє
вкажіть, що з вашим кодом щось не так; це лише вказує, що GCC
оптимізатори не змогли ефективно працювати з кодом. Часто проблема полягає в тому
ваш код занадто великий або занадто складний; GCC відмовиться оптимізувати програми, коли
Сама оптимізація, ймовірно, займе надто багато часу.

-Wpointer-знак (лише C і Objective-C)
Попереджати про передачу аргументу вказівника або присвоєння з іншим знаком. Це
параметр підтримується лише для C і Objective-C. Це мається на увазі -Стінка і
- педантичний, який можна вимкнути за допомогою -Wno-вказівник-знак.

-Wstack-протектор
Ця опція активна лише тоді, коли -fstack-протектор є активним. Він попереджає про функції
які не будуть захищені від розбиття стека.

-Wno-бризговик
Приглушити попередження про конструкції, які не можуть бути інструментальними -fmudflap.

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

Обмеження діє після конкатенація рядків і не враховує завершення
NUL. У C90 обмеження становило 509 символів; у C99 його було піднято до 4095. C++98 так
не вказує нормативний мінімальний максимум, тому ми не діагностуємо рядки з надмірною довжиною
C ++.

Цей варіант мається на увазі - педантичний, і його можна вимкнути за допомогою -Wno-наддовжина-струни.

-Wunsuffixed-float-constants (лише C і Objective-C)
GCC видасть попередження для будь-якої плаваючої константи, яка не має суфікса. Коли
використовується разом з -Wsystem-headers він попереджає про такі константи в системному заголовку
файлів. Це може бути корисно під час підготовки коду для використання з "FLOAT_CONST_DECIMAL64"
pragma від десяткового розширення з плаваючою комою до C99.

опції та цінності Налагодження ваш програма or GCC
GCC має різні спеціальні параметри, які використовуються для налагодження вашої програми або GCC:

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

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

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

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

Наступні параметри корисні, коли GCC генерується з можливістю додаткового
ніж один формат налагодження.

-ggdb
Надайте налагоджуючу інформацію для використання GDB. Це означає використовувати найбільш виразні
доступний формат (DWARF 2, stabs або рідний формат, якщо жодного з них немає
підтримується), включаючи розширення GDB, якщо це взагалі можливо.

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

-feliminate-unused-debug-symbols
Надайте налагоджуючу інформацію у форматі stabs (якщо він підтримується) лише для символів
які фактично використовуються.

-femit-class-debug-always
Замість того, щоб видавати інформацію про налагодження для класу C++ лише в одному об’єктному файлі,
видавати його у всі об’єктні файли за допомогою класу. Цей параметр слід використовувати тільки з
налагоджувачі, які не можуть працювати так, як GCC зазвичай видає налагоджуючу інформацію
для класів, оскільки використання цієї опції збільшить розмір налагоджувальної інформації
аж у два рази.

-fno-debug-types-section
За замовчуванням при використанні DWARF версії 4 або вище типи DIE будуть поміщені в свої власні
розділ .debug_types замість того, щоб робити їх частиною розділу .debug_info. це є
ефективніше помістити їх в окремі розділи comdat, оскільки тоді буде компонувальник
можливість видалення дублікатів. Але не всі споживачі DWARF підтримують розділи .debug_types
поки немає.

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

-gcoff
Надайте інформацію про налагодження у форматі COFF (якщо це підтримується). Це
формат, використовуваний SDB на більшості систем System V до версії System V 4.

-gxcoff
Надайте інформацію про налагодження у форматі XCOFF (якщо це підтримується). Це
формат, який використовується налагоджувачем DBX в системах IBM RS/6000.

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

-gdwarf-версія
Надайте налагоджувальну інформацію у форматі DWARF (якщо він підтримується). Це
формат, який використовується DBX на IRIX 6. Значення версія може бути 2, 3 або 4; в
версія за замовчуванням 2.

Зауважте, що з версією 2 DWARF деякі порти вимагають і завжди використовуватимуть деякі не-
конфліктуючих розширень DWARF 3 у таблицях розкручування.

Для версії 4 може знадобитися GDB 7.0 і -fvar-tracking-assignments для максимальної вигоди.

-grecord-gcc-перемикачі
Цей перемикач викликає параметри командного рядка, які використовуються для виклику компілятора, який може
впливають на генерацію коду, який додається до атрибута DW_AT_producer у DWARF
інформація про налагодження. Параметри об’єднані пробілами, що відокремлюють їх
один одного та з версії компілятора. Дивись також -frecord-gcc-перемикачі для іншого
спосіб зберігання параметрів компілятора в об'єктному файлі.

-gno-record-gcc-перемикачі
Заборонити додавання параметрів командного рядка до атрибута DW_AT_producer у DWARF
інформація про налагодження. Це значення за замовчуванням.

-gstrict-dwarf
Заборонити використання розширень пізнішої стандартної версії DWARF, ніж вибрана
-gdwarf-версія. Для більшості цілей використовуються неконфліктні розширення DWARF від пізнішої версії
допускаються стандартні версії.

-гно-строгий-карлик
Дозволити використання розширень пізнішої стандартної версії DWARF, ніж вибрана
-gdwarf-версія.

-gvms
Надайте інформацію про налагодження у форматі налагодження VMS (якщо це підтримується). Це
формат, який використовується DEBUG у системах VMS.

-gрівень
-ggdbрівень
-gstabsрівень
-gcoffрівень
-gxcoffрівень
-gvmsрівень
Запит інформації про налагодження, а також використання рівень щоб вказати, скільки інформації. The
рівень за замовчуванням 2.

Рівень 0 взагалі не дає налагоджувальної інформації. таким чином, -g0 заперечує -g.

Рівень 1 дає мінімум інформації, достатньої для створення зворотних трас у частинах
програму, яку ви не плануєте налагоджувати. Це включає описи функцій і
зовнішні змінні, але немає інформації про локальні змінні та номерів рядків.

Рівень 3 містить додаткову інформацію, таку як усі макровизначення, присутні в файлі
програма. Деякі налагоджувачі підтримують розширення макросів під час використання -g3.

-gdwarf-2 не приймає з'єднаний рівень налагодження, оскільки GCC підтримував файл
варіант -gdwarf що означало створення налагоджувальної інформації у версії 1 DWARF
формат (який сильно відрізняється від версії 2), і це було б занадто заплутаним.
Цей формат налагодження давно застарів, але параметр зараз не можна змінити. Замість цього використовуйте
додатковий -gрівень можливість змінити рівень налагодження для DWARF.

-gtoggle
Вимкніть генерацію налагоджувальної інформації, якщо не використовувати цей параметр, це призведе до її створення,
або увімкніть його на рівні 2 інакше. Позиція цього аргументу в командному рядку
не має значення, воно набирає чинності після того, як усі інші параметри будуть оброблені, і це робиться
тільки один раз, скільки б разів його не давали. Це в основному призначене для використання
з -fcompare-debug.

-fdump-final-insns[=файл]
Дамп остаточного внутрішнього представлення (RTL) до файл. Якщо необов’язковий аргумент
пропущено (або якщо файл є "."), ім'я файлу дампа буде визначено шляхом додавання
".gkd" до назви вихідного файлу компіляції.

-fcompare-debug[=вибирає]
Якщо під час компіляції не виникає жодної помилки, запустіть компілятор вдруге, додавши вибирає і
-fcompare-debug-second до аргументів, переданих до другої компіляції. Киньте
остаточне внутрішнє представлення в обох компіляціях і вивести помилку, якщо вони відрізняються.

Якщо знак рівності опущено, значення за замовчуванням -gtoggle використовується.

Змінна середовища GCC_COMPARE_DEBUG, якщо визначено, не порожнє і відмінне від нуля,
неявно дозволяє -fcompare-debug. Якщо GCC_COMPARE_DEBUG визначається рядком
починаючи з тире, потім використовується для вибирає, інакше значення за замовчуванням -gtoggle is
використаний

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

Щоб перевірити повне покриття під час -fcompare-debug тестування, комплект GCC_COMPARE_DEBUG сказати
-fcompare-debug-not-overridden, який GCC відхилить як недійсний варіант у будь-якому
фактична компіляція (а не попередня обробка, збірка або зв'язування). Щоб отримати лише а
попередження, налаштування GCC_COMPARE_DEBUG до -w%n-fcompare-debug НЕ переосмислений зроблю.

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

Коли цей параметр передається драйверу компілятора, він викликає перший компіляція до
бути пропущено, що робить його корисним лише для налагодження власне компілятора.

-feliminate-dwarf2-dups
Стисніть інформацію про налагодження DWARF2, видаливши дубльовану інформацію про кожен
символ. Цей параметр має сенс лише під час створення налагоджувальної інформації DWARF2
з -gdwarf-2.

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

Цей параметр істотно зменшує розмір налагоджувальної інформації, але при
значні потенційні втрати інформації про типи для налагоджувача. Побачити
-femit-struct-debug-reduced для менш агресивного варіанту. Побачити
-femit-struct-debug-detailed для більш детального контролю.

Ця опція працює тільки з DWARF 2.

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

Цей параметр значно зменшує розмір налагоджувальної інформації
потенційна втрата інформації про тип для налагоджувача. Побачити -femit-struct-debug-baseonly
для більш агресивного варіанту. Побачити -femit-struct-debug-detailed для більш детальної інформації
контролювати.

Ця опція працює тільки з DWARF 2.

-femit-struct-debug-detailed[=спец-список]
Вкажіть структурно-подібні типи, для яких компілятор генеруватиме інформацію про налагодження.
Мета полягає в тому, щоб зменшити дублювання інформації про налагодження структури між різними об’єктами
файли в межах однієї програми.

Цей варіант є детальною версією -femit-struct-debug-reduced і
-femit-struct-debug-baseonly, який буде служити для більшості потреб.

Специфікація має синтаксис[реж:|Інд.:][замовити:|жанр:](будь-який|системний|база|ніхто)

Необов’язкове перше слово обмежує специфікацію структурами, які використовуються безпосередньо
(реж:) або використовується опосередковано (Інд.:). Тип структури використовується безпосередньо, коли це тип
змінної, член. Непряме використання виникає через покажчики на структури. Тобто,
коли використання неповної структури було б законним, використання є непрямим. Прикладом є
структура один прямий; структура два * непрямі;.

Додаткове друге слово обмежує специфікацію звичайними структурами (замовити:) Або
загальні структури (жанр:). Загальні структури трохи складно пояснити. Для C++,
це неявні спеціалізації шаблонних класів або нешаблонних класів
в межах вищезазначеного. Інші мови програмування мають загальні ознаки, але
-femit-struct-debug-detailed ще не реалізує їх.

Третє слово вказує вихідні файли для тих структур, для яких компілятор
видаватиме налагоджувальну інформацію. Цінності ніхто і будь-який мають нормальне значення. The
значення база означає, що основа імені файлу, в якому оголошено тип
має відповідати основі імені основного файлу компіляції. На практиці,
це означає, що типи, оголошені в foo.c і foo.h матиме інформацію про налагодження, але
типи, оголошені в іншому заголовку, не будуть. Значення системний означає ті типи, які задовольняють
база або оголошені в заголовках системи або компілятора.

Можливо, вам доведеться поекспериментувати, щоб визначити найкращі налаштування для вашої програми.

За замовчуванням - -femit-struct-debug-detailed=all.

Ця опція працює тільки з DWARF 2.

-fno-merge-debug-strings
Скеруйте компоновщику не зливати рядки в налагоджувальну інформацію
ідентичні в різних об’єктних файлах. Злиття підтримується не всіма асемблерами або
лінкери. Об’єднання зменшує розмір налагоджувальної інформації у вихідному файлі на
витрати на збільшення часу обробки посилання. Об’єднання ввімкнено за замовчуванням.

-fdebug-prefix-map=старий=новий
При компіляції файлів у каталозі старий, записати інформацію про налагодження, що описує їх як
in новий замість цього.

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

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

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

-Q Змушує компілятор друкувати назву кожної функції під час її компіляції та друкувати деякі
статистику кожного проходу після його завершення.

-ftime-звіт
Змушує компілятор друкувати деякі статистичні дані про час, витрачений кожним проходом
закінчує.

-fmem-звіт
Змушує компілятор друкувати деякі статистичні дані про постійне виділення пам’яті, коли він
закінчує.

-fpre-ipa-mem-report
-fpost-ipa-mem-report
Змушує компілятор друкувати деяку статистику про постійне виділення пам’яті перед або
після міжпроцедурної оптимізації.

-fstack-usage
Виводить компілятор інформацію про використання стека для програми для кожної функції
основи. Ім'я файлу для дампу створюється шляхом додавання .su до auxname. auxname is
генерується з імені вихідного файлу, якщо вказано явно і не є файлом
виконуваний файл, інакше це базове ім'я вихідного файлу. Запис складається з
три поля:

· Назва функції.

· Кількість байтів.

· Один або кілька кваліфікуючих: «статичний», «динамічний», «обмежений».

Кваліфікатор «статичний» означає, що функція статично маніпулює стеком: a
фіксована кількість байтів виділяється для кадру при вході функції та вивільняється
вихід із функції; ніякі коригування стека в іншому випадку не виконуються у функції. Другий
поле - це фіксована кількість байтів.

Кваліфікатор "динамічний" означає, що функція динамічно маніпулює стеком: in
на додаток до статичного розподілу, описаного вище, коригування стека вносяться в
тіло функції, наприклад, щоб натиснути/вивести аргументи навколо викликів функції. Якщо
також присутній специфікатор "bounded", сума цих коригувань обмежена
час компіляції, а друге поле є верхньою межею загальної кількості використаного стека
за функцією. Якщо його немає, сума цих коригувань не обмежена
під час компіляції, а друге поле представляє лише обмежену частину.

-fprofile-arcs
Додайте код, щоб програма проходила дуги обладнані інструментами. Під час виконання програми
записує, скільки разів виконується кожне відділення та виклик і скільки разів воно виконується
або повертає. Коли скомпільована програма завершує роботу, вона зберігає ці дані у файлі
auxname.gcda для кожного вихідного файлу. Дані можуть бути використані для профілю
оптимізації (-fгілля-ймовірності), або для аналізу охоплення тестами
(-ftest-покриття). Кожен об’єктний файл auxname створюється з назви
вихідний файл, якщо вказано явно і він не є остаточним виконуваним файлом, інакше це
є базовим ім'ям вихідного файлу. В обох випадках будь-який суфікс видаляється (напр
foo.gcda для вхідного файлу dir/foo.cабо dir/foo.gcda для вихідного файлу, зазначеного як -o
dir/foo.o).

--покриття
Ця опція використовується для компіляції та зв’язування коду, інструментованого для аналізу покриття. The
параметр є синонімом до -fprofile-arcs -ftest-покриття (при складанні) та -lgcov
(при з'єднанні). Додаткову інформацію дивіться в документації щодо цих параметрів.

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

· Зв’яжіть свої об’єктні файли з -lgcov or -fprofile-arcs (останнє має на увазі
колишній).

· Запустіть програму для репрезентативного робочого навантаження, щоб створити профіль дуги
інформації. Це можна повторювати будь-яку кількість разів. Можна запускати одночасно
екземплярів вашої програми та за умови, що файлова система підтримує блокування, файл
файли даних будуть правильно оновлені. Також виявляються "форк" викликів і
правильно оброблено (подвійний підрахунок не відбудеться).

· Для оптимізації, орієнтованої на профіль, скомпілюйте вихідні файли знову з тим самим
Опції оптимізації та генерації коду плюс -fгілля-ймовірності.

· Для аналізу тестового покриття використовуйте gcov створювати інформацію, зрозумілу людині
la .gcno і .gcda файлів. Зверніться до gcov документація для подальшого
інформація.

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

-ftest-покриття
Створіть файл нотаток, який gcov Утиліта покриття коду може використовуватися для відображення програми
покриття. Викликається файл нотаток кожного вихідного файлу auxname.gcno. Зверніться до
-fprofile-arcs варіант вище для опису auxname та інструкції, як це зробити
генерувати дані тестового покриття. Дані покриття будуть більш точно відповідати вихідним файлам,
якщо не оптимізувати.

-fdbg-cnt-список
Надрукуйте назву та верхню межу лічильника для всіх лічильників налагодження.

-fdbg-cnt=список зустрічних значень
Встановіть верхню межу внутрішнього лічильника налагодження. список зустрічних значень відокремлюється комою
список ім'я:значення пари, яка встановлює верхню межу кожного лічильника налагодження ім'я до
значення. Усі лічильники налагодження мають початкову верхню межу UINT_MAX, таким чином dbg_cnt()
завжди повертає true, якщо верхня межа не встановлена ​​цим параметром. наприклад З
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) поверне true лише для перших 10
виклики

-придатний-вид-проходити
-fdisable-вид-проходити=діапазон-список
Це набір параметрів налагодження, які використовуються для явного вимкнення/включення
оптимізація проходить. Для користувачів компілятора звичайні параметри включення/вимкнення проходів
слід використовувати замість цього.

*<-fdisable-ipa-проходити>
Вимкнути ipa pass проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1.

*<-fdisable-rtl-проходити>
*<-fdisable-rtl-проходити=діапазон-список>
Вимкнути rtl pass проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1. діапазон-список це список, розділений комами
діапазони функцій або імена асемблера. Кожен діапазон — це пара чисел, розділена символом a
товстої кишки. Асортимент включає в себе обидва кінці. Якщо діапазон тривіальний, число
пару можна спростити як одне число. Якщо вузол cgraph функції UID is
потрапляючи в один із зазначених діапазонів, проходити для цього вимкнено
функція. UID показано в заголовку функції файлу дампа, а також пропуск
імена можна скидати за допомогою параметра -fdump-pass.

*<-fdisable-tree-проходити>
*<-fdisable-tree-проходити=діапазон-список>
Вимкнути пропуск дерева проходити, Побачити -fdisable-rtl для опису варіанту
аргументів.

*<-fenable-ipa-проходити>
Увімкнути ipa pass проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1.

*<-fenable-rtl-проходити>
*<-fenable-rtl-проходити=діапазон-список>
Увімкнути rtl pass проходити, Побачити -fdisable-rtl для опису аргументу опції та
приклади

*<-fenable-tree-проходити>
*<-fenable-tree-проходити=діапазон-список>
Увімкнути пропуск дерева проходити, Побачити -fdisable-rtl для опису аргументів опції.

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

-dлітери
-fdump-rtl-проходити
Каже створювати дампи налагодження під час компіляції в часи, визначені літери, це
використовується для налагодження проходів компілятора на основі RTL. Імена файлів для більшості
дампи створюються шляхом додавання номера проходу та слова до ім'я дампу, А
файли створюються в каталозі вихідного файлу. Зверніть увагу, що номер пропуску є
обчислюється статично, коли перепустки реєструються в менеджері пропусків. Таким чином,
нумерація не пов'язана з динамічним порядком виконання пропусків. Зокрема,
пропуск, встановлений плагіном, може мати число понад 200, навіть якщо він виконується цілком
рано. ім'я дампу генерується з імені вихідного файлу, якщо це явно
вказано, і він не є виконуваним файлом, інакше це базове ім'я джерела
файл. Ці перемикачі можуть мати різний ефект, коли -E використовується для попередньої обробки.

Дампи налагодження можна ввімкнути за допомогою a -fdump-rtl перемикач чи щось інше -d варіант літери. Тут
можливі літери для використання в проходити і літерита їх значення:

-fdump-rtl-alignments
Дамп після обчислення вирівнювань гілок.

-fdump-rtl-asmcons
Дамп після виправлення операторів rtl, які мають незадоволені обмеження входу/виходу.

-fdump-rtl-auto_inc_dec
Дамп після виявлення автоматичного включення. Цей пропуск працює лише на архітектурах, які
мати інструкції автоматичного включення або автоматичного розвантаження.

-fdump-rtl-бар'єри
Викиньте після очищення інструкції з шлагбаума.

-fdump-rtl-bbpart
Скидайте після розділення гарячих і холодних базових блоків.

-fdump-rtl-bbro
Дамп після зміни порядку блоку.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 і -fdump-rtl-btl2 увімкнути дампування після цілі двох гілок
оптимізація навантаження проходить.

-fdump-rtl-bypass
Обхід дампу після переходу та оптимізація потоку керування.

-fdump-rtl-combine
Дамп після проходу комбінації інструкцій RTL.

-fdump-rtl-compgotos
Дамп після дублювання обчислених goto.

-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
Дамп після завершення коду обробки EH.

-fdump-rtl-eh_ranges
Дамп після перетворення регіонів діапазону обробки EH.

-fdump-rtl-expand
Дамп після генерації 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-initivals
Дамп після обчислення наборів початкових значень.

-fdump-rtl-into_cfglayout
Дамп після перетворення в режим cfglayout.

-fdump-rtl-ira
Дамп після повторного виділення регістра.

-fdump-rtl-jump
Дамп після другої оптимізації стрибка.

-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-postreload
Дамп після оптимізації після перезавантаження.

-fdump-rtl-pro_and_epilogue
Дамп після створення прологів та епілогів функції.

-fdump-rtl-regmove
Дамп після проходу переміщення реєстру.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 і -fdump-rtl-sched2 увімкнути дамп після основного блоку
перепустки розкладу.

-fdump-rtl-see
Дамп після видалення розширення знака.

-fdump-rtl-seqabstr
Дамп після виявлення загальної послідовності.

-fdump-rtl-shorten
Відвалюють після вкорочення гілок.

-fdump-rtl-sibling
Дамп після оптимізації дзвінків.

-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-stack
Дамп після перетворення з регістрів "плоских регістрів" 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-web
Дамп після розділення діапазону в реальному часі.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Ці дампи визначені, але завжди створюють порожні файли.

-in
-fdump-rtl-all
Виготовте всі перераховані вище відвали.

-dA Анотуйте вихідні дані асемблера різною інформацією про налагодження.

-dD Наприкінці попередньої обробки скиньте всі визначення макросу, крім звичайного
вихід.

-dH Створюйте дамп ядра щоразу, коли виникає помилка.

-dp Позначте вихідний результат асемблера коментарем, що вказує, який шаблон і
була використана альтернатива. Довжина кожної інструкції також друкується.

-dP Скидайте RTL у вивід ассемблера як коментар перед кожною інструкцією. Також
включається -dp анотація

-дв Для кожного з інших вказаних файлів дампу (-fdump-rtl-проходити), дамп а
подання графіка потоку керування, придатного для перегляду за допомогою VCG до
file.pass.vcg.

-dx Просто згенеруйте RTL для функції замість її компіляції. Зазвичай використовується з
-fdump-rtl-expand.

-fdump-noaddr
Під час виконання дампів налагодження придушіть вихід адреси. Це робить його більш здійсненним
використовуйте diff для налагоджувальних дампів для викликів компілятора з різними бінарними файлами компілятора
та/або різні місця початку тексту / bss / data / heap / stack / dso.

-fdump-ненумерований
Виконуючи дамп налагодження, придушіть номери інструкцій та виведення адреси. Це
робить більш можливим використання diff у налагоджувальних дампах для викликів компілятора з
різні варіанти, зокрема з і без -g.

-fdump-unnumbered-links
При виконанні налагоджувальних дампів (див -d вище), придушити номери інструкцій для
посилання на попередні та наступні інструкції в послідовності.

-fdump-translation-unit (лише C++)
-fdump-translation-unit-опції (лише C++)
Дамп у файл представлення деревоподібної структури для всієї одиниці перекладу.
Ім'я файлу створюється шляхом додавання .tu до назви вихідного файлу, і файл є
створюється в тому ж каталозі, що й вихідний файл. Якщо -опції використовується форма,
опції контролює деталі дампу, як описано для -fdump-tree Варіанти.

-fdump-class-hierarchy (лише C++)
-fdump-class-hierarchy-опції (лише C++)
Дамп представлення ієрархії кожного класу та макета таблиці віртуальних функцій у a
файл. Ім'я файлу створюється шляхом додавання .клас до імені вихідного файлу та файлу
створюється в тому ж каталозі, що й вихідний файл. Якщо -опції використовується форма,
опції контролює деталі дампу, як описано для -fdump-tree Варіанти.

-fdump-ipa-перемикання
Керуйте демпінгом на різних етапах міжпроцедурного аналізу дерева мови до a
файл. Ім’я файлу генерується шляхом додавання суфікса, специфічного для перемикача, до джерела
ім’я файлу, і файл створюється в тому самому каталозі, що й вихідний файл. The
можливі такі відвали:

всі Вмикає всі міжпроцедурні дампи аналізу.

cgraph
Видає інформацію про оптимізацію графіка викликів, видалення невикористаної функції та
вбудовані рішення.

вбудований
Дамп після вбудовування функції.

-fdump-pass
Дамп списку проходів оптимізації, які вмикаються та вимикаються поточним
параметри командного рядка.

-fdump-statistics-варіант
Увімкнути та контролювати скидання статистики проходу в окремий файл. Ім'я файлу
утворюється шляхом додавання суфікса, що закінчується на .статистика до імені вихідного файлу та
файл створюється в тому ж каталозі, що й вихідний файл. Якщо -варіант форма є
б / в, - статистика призведе до підсумовування лічильників по всій одиниці компіляції while
- деталі буде скидати кожну подію, коли проходи генерують їх. За замовчуванням з номером
Опція полягає в тому, щоб підсумувати лічильники для кожної скомпільованої функції.

-fdump-tree-перемикання
-fdump-tree-перемикання-опції
Контролювати дампування на різних етапах обробки проміжного дерева мови до
файл. Ім’я файлу генерується шляхом додавання суфікса перемикача до
ім’я вихідного файлу, і файл створюється в тому самому каталозі, що й вихідний файл.
Якщо -опції використовується форма, опції це список - розділені параметри, які контролюють
деталі смітника. Не всі параметри застосовні до всіх дампів; ті, які є
не має значення, буде проігноровано. Доступні наступні варіанти

адреса
Надрукуйте адресу кожного вузла. Зазвичай це не має сенсу, оскільки змінюється
відповідно до середовища та вихідного файлу. Його основне використання - для зв'язування a
файл дампа з середовищем налагодження.

asmname
Якщо "DECL_ASSEMBLER_NAME" встановлено для даного декл, використовуйте це в дампі
замість "DECL_NAME". Його основне використання - це простота використання в зворотному порядку
зіпсовані імена у файлі збірки.

стрункий
Заборонити скидання членів області дії або тіла функції лише тому
обсяг досягнуто. Викидайте такі предмети лише тоді, коли вони безпосередньо доступні
якийсь інший шлях. Під час скидання дерев із красивими надрукованими матеріалами ця опція забороняє вивантаження
органи контролюючих структур.

сировина Надрукуйте необроблене представлення дерева. За замовчуванням дерева надруковано в красивому вигляді
С-подібне представлення.

деталі
Увімкнути детальніші дампи (не враховується кожним варіантом дампу).

статистика
Увімкнути скидання різної статистики про проход (не враховується кожним дампом
варіант).

Блоки
Увімкнути відображення базових меж блоку (вимкнено в необроблених дампах).

vops
Увімкнути відображення віртуальних операндів для кожного оператора.

lineno
Увімкнути відображення номерів рядків для операторів.

UID Увімкнути показ унікального ідентифікатора ("DECL_UID") для кожної змінної.

докладний
Увімкнути відображення дампу дерева для кожного оператора.

eh Увімкнути показ номера регіону EH, що містить кожну заяву.

scev
Увімкнути показ деталей аналізу скалярної еволюції.

всі Увімкніть усі параметри, крім сировина, стрункий, докладний і lineno.

Можливі такі звалища дерев:

оригінал
Дамп перед будь-якою оптимізацією на основі дерева, щоб файл.оригінал.

оптимізований
Дамп все-таки оптимізація на основі дерева, до file.optimized.

Gimple
Дампуйте кожну функцію до та після переходу для полегшення у файл. Файл
назва вноситься шляхом додавання .gimple до імені вихідного файлу.

cfg Дампуйте графік потоку керування для кожної функції у файл. Ім'я файлу створюється
додавання .cfg до імені вихідного файлу.

vcg Дампуйте графік потоку керування для кожної функції у файл у форматі VCG. Файл
назва вноситься шляхом додавання .vcg до імені вихідного файлу. Зверніть увагу, що якщо файл
містить більше однієї функції, створений файл не може використовуватися безпосередньо
VCG. Вам потрібно буде вирізати та вставити графік кожної функції в окремий
файл спочатку.

ch Дамп кожної функції після копіювання заголовків циклу. Ім'я файлу створюється шляхом додавання
.ch до імені вихідного файлу.

сонячна піврічна складова Дамп інформації, пов’язаної з SSA, у файл. Ім'я файлу створюється шляхом додавання .ssa
до імені вихідного файлу.

псевдонім
Дамп інформації про псевдонім для кожної функції. Ім'я файлу створюється шляхом додавання
.псевдонім до імені вихідного файлу.

ccp Дамп кожної функції після CCP. Ім'я файлу створюється шляхом додавання .ccp до
ім'я вихідного файлу.

storeccp
Дамп кожної функції після STORE-CCP. Ім'я файлу створюється шляхом додавання .storeccp
до імені вихідного файлу.

попередньо Висипати дерева після часткового усунення надмірності. Ім'я файлу створюється
додавання .pre до імені вихідного файлу.

частоти Викидайте дерева після повного усунення надмірності. Ім'я файлу створюється шляхом додавання
.фр до імені вихідного файлу.

copyprop
Скидайте дерева після копіювання. Ім'я файлу створюється шляхом додавання .copyprop
до імені вихідного файлу.

store_copyprop
Кидайте дерева після копіювання в магазині. Ім'я файлу створюється шляхом додавання
.store_copyprop до імені вихідного файлу.

dce Дамп кожної функції після видалення мертвого коду. Ім'я файлу створюється за допомогою
додавання .dce до імені вихідного файлу.

брижовий щиток
Скиньте кожну функцію після додавання приладів для бризговика. Ім'я файлу створюється
додавання .бризговик до імені вихідного файлу.

Пан / Пані Дамп кожної функції після виконання скалярної заміни агрегатів. Файл
назва вноситься шляхом додавання .sra до імені вихідного файлу.

раковина
Дамп кожної функції після виконання коду. Ім'я файлу створюється за допомогою
додавання .раковина до імені вихідного файлу.

подарунок Дамп кожної функції після застосування оптимізації дерева домінанта. Ім'я файлу
зроблено шляхом додавання .dom до імені вихідного файлу.

дсе Дамп кожної функції після застосування видалення мертвого магазину. Ім'я файлу створено
шляхом додавання .dse до імені вихідного файлу.

фіопт
Дамп кожної функції після оптимізації вузлів PHI у прямолінійний код. Файл
назва вноситься шляхом додавання .phiopt до імені вихідного файлу.

forwprop
Дамп кожної функції після прямого поширення одноразових змінних. Ім'я файлу
здійснюється шляхом додавання .forwprop до імені вихідного файлу.

copyrename
Дамп кожної функції після застосування оптимізації перейменування копії. Ім'я файлу
зроблено шляхом додавання .copyrename до імені вихідного файлу.

nrv Дамп кожної функції після застосування оптимізації названого значення, що повертається до загального
дерева. Ім'я файлу створюється шляхом додавання .nrv до імені вихідного файлу.

vect
Дамп кожної функції після застосування векторизації циклів. Ім'я файлу створено
шляхом додавання .vect до імені вихідного файлу.

слп Дамп кожної функції після застосування векторизації базових блоків. Ім'я файлу
зроблено шляхом додавання .slp до імені вихідного файлу.

в.п Дамп кожної функції після розповсюдження діапазону значень (VRP). Ім'я файлу створюється за допомогою
додавання .vrp до імені вихідного файлу.

всі Увімкніть усі доступні дампи дерев за допомогою прапорців, наданих у цій опції.

-ftree-vectoriz-verbose=n
Цей параметр керує об’ємом налагоджувальних результатів, які друкує векторізатор. Це
інформація записується зі стандартною помилкою, якщо -fdump-tree-all or -fdump-tree-vect
вказано, у цьому випадку він виводиться до звичайного файлу списку дампу, .vect. Форум
n=0 діагностична інформація не повідомляється. Якщо n=1 векторізатор повідомляє про кожен цикл
які були векторизовані, і загальна кількість циклів, які були векторизовані. Якщо n=2
Vectorizer також повідомляє про невекторизовані цикли, які пройшли першу фазу аналізу
(vect_analyze_loop_form) - тобто злічений, внутрішній, одиничний bb, одиничний вхід/вихід
петлі. Це той самий рівень багатослівності -fdump-tree-vect-stats використовує. Вищий
Рівні детальності означають, що для кожного циклу повідомляється більше інформації, або те саме
кількість інформації, що повідомляється для додаткових циклів: if n=3, модель вартості векторизатора
повідомляється інформація. Якщо n=4, інформація, пов’язана з вирівнюванням, додається до
звіти. Якщо n=5, інформація, пов’язана із посиланнями на дані (наприклад, залежності пам’яті, пам’ять
access-patterns) додається до звітів. Якщо n=6, векторізатор повідомляє також про не
векторизовані більшість внутрішніх циклів, які не пройшли першу фазу аналізу (тобто можуть не пройти
бути рахунковим або мати складний потік керування). Якщо n=7, повідомляє векторізатор
також невекторизовані вкладені цикли. Якщо n=8, інформація, пов’язана з SLP, додається до
звіти. Для n=9, вся інформація, яку векторізатор генерує під час свого аналізу
і повідомляється про трансформацію. Це той самий рівень багатослівності
-fdump-tree-vect-details використовує.

-frandom-seed=рядок
Цей параметр надає початкове значення, яке GCC використовує, коли в іншому випадку він використовує випадкові числа.
Він використовується для створення певних назв символів, які мають відрізнятися в кожному
скомпільований файл. Він також використовується для розміщення унікальних штампів у файлах даних покриття та
об'єктні файли, які їх створюють. Ви можете використовувати -франдом-насіння варіант виготовлення
відтворювано ідентичні об'єктні файли.

повне г, повне г,, показали, від, номер, XNUMX рядок має відрізнятися для кожного файлу, який ви збираєте.

-fsched-verbose=n
Для цілей, які використовують планування інструкцій, цей параметр контролює кількість
виведення налагодження, яке друкує планувальник. Ця інформація записується зі стандартною помилкою,
якщо не -fdump-rtl-sched1 or -fdump-rtl-sched2 вказано, у цьому випадку він виводиться
у звичайний файл списку дампу, .sched1 or .sched2 відповідно. Однак для n
більше дев’яти, вихідні дані завжди друкуються зі стандартною помилкою.

для n більше нуля, -fsched-verbose виводить ту ж інформацію, що і
-fdump-rtl-sched1 і -fdump-rtl-sched2. Форум n більше одиниці, він також виводить базовий
ймовірності блоків, детальна інформація готового списку та інформація про блок/інструкцію. Для n
більше двох, він включає RTL в точці припинення, контрольний потік та інформацію про регіони. І
та цінності n понад чотири, -fsched-verbose також містить інформацію про залежність.

-зберігати темп
-save-temps=cwd
Зберігати звичайні «тимчасові» проміжні файли постійно; помістити їх у струм
каталог і назвіть їх на основі вихідного файлу. Таким чином, компіляція foo.c з -c
-зберігати темп створюватиме файли foo.i і foo.s, А також foo.o. Це створює а
попередньо оброблений foo.i вихідний файл, навіть якщо компілятор тепер зазвичай використовує файл
інтегрований препроцесор.

При використанні в поєднанні з -x параметр командного рядка, -зберігати темп є розумним
достатньо, щоб уникнути перезапису вихідного файлу з тим самим розширенням, що й an
проміжний файл. Відповідний проміжний файл можна отримати шляхом перейменування
вихідний файл перед використанням -зберігати темп.

Якщо ви запускаєте GCC паралельно, компілюючи кілька різних вихідних файлів, які спільно використовують a
спільне базове ім'я в різних підкаталогах або той самий вихідний файл, скомпільований для
кількома адресатами виводу, цілком ймовірно, що різні паралельні компілятори будуть
заважають один одному та перезаписують тимчасові файли. Наприклад:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

може призвести до foo.i і foo.o записується одночасно обома компіляторами.

-save-temps=obj
Зберігайте звичайні «тимчасові» проміжні файли постійно. Якщо -o використовується варіант,
тимчасові файли засновані на об'єктному файлі. Якщо -o опція не використовується,
-save-temps=obj перемикач поводиться як -зберігати темп.

Наприклад:

gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

створив би foo.i, foo.s, 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 куб.см1
0.00 0.01 як

"Час користувача" і "системний час" переміщуються перед назвою програми, а також
відображаються параметри, передані програмі, щоб потім можна було дізнатися, який файл був
компіляції та з якими параметрами.

-fvar-tracking
Запустіть змінну пропуску відстеження. Він обчислює, де зберігаються змінні в кожній позиції
в коді. Потім генерується краща інформація про налагодження (якщо інформація про налагодження
формат підтримує цю інформацію).

Він включений за замовчуванням під час компіляції з оптимізацією (-Ос, -O, -O2, ...),
інформація про налагодження (-g) і формат інформації про налагодження підтримує це.

-fvar-tracking-assignments
Анотуйте призначення змінним користувача на початку компіляції та спробуйте перенести
анотації на протязі всієї компіляції аж до кінця, у спробі
щоб покращити інформацію про налагодження під час оптимізації. Використання -gdwarf-4 рекомендується разом
з ним.

Його можна ввімкнути, навіть якщо відстеження змінних параметрів вимкнено, і в цьому випадку будуть анотації
створено та підтримується, але в кінці відкидається.

-fvar-tracking-assignments-toggle
Перемикати -fvar-tracking-assignments, так само, як і це -gtoggle перемикачі -g.

-print-file-name=бібліотека
Надрукуйте повну абсолютну назву файлу бібліотеки бібліотека який буде використаний, коли
зв'язування --- і більше нічого не робіть. За допомогою цієї опції GCC не компілює та не посилає
будь-що; він просто друкує ім'я файлу.

-print-multi-directory
Надрукуйте ім'я каталогу, що відповідає мультибібліотеці, вибраній будь-якими іншими перемикачами
присутні в командному рядку. Цей каталог має існувати в GCC_EXEC_PREFIX.

-print-multi-lib
Надрукуйте зіставлення з імен каталогів multilib до перемикачів компілятора, які їх увімкнули.
Ім'я каталогу відокремлено від перемикачів за допомогою ;, і кожен перемикач починається з символу
@ замість -, без пробілів між кількома перемикачами. Це має бути
полегшити обробку оболонки.

-print-multi-os-directory
Надрукуйте шлях до бібліотек ОС для вибраної мультибібліотеки відносно деяких либ
підкаталог. Якщо бібліотеки ОС присутні в либ підкаталог і без мультибібліотеки
використовуються, зазвичай це просто ., якщо бібліотеки ОС присутні в libsuffix рідний брат
каталоги, які друкуються, наприклад ../lib64, ../ lib or ../lib32, або якщо бібліотеки ОС є
присутній в lib/subdir підкаталоги, які він друкує, наприклад amd64, sparcv9 or ev6.

-друк-мультиарх
Надрукуйте шлях до бібліотек ОС для вибраної мультиархів відносно деяких либ
підкаталог.

-print-prog-name=програма
Люблю -print-file-name, але шукає програму, наприклад cpp.

-print-libgcc-ім'я файлу
Такий же, як -print-file-name=libgcc.a.

Це корисно, коли ви використовуєте -nostdlib or -нові за замовчуванням але ви хочете зв’язатися з
libgcc.a. Ви можете зробити

gcc -nostdlib ... `gcc -print-libgcc-ім'я-файлу`

-print-search-dirs
Надрукуйте назву налаштованого каталогу встановлення та список програм і
бібліотечні довідники ПКУ буде шукати---і більше нічого не робити.

Це корисно, коли ПКУ друкує повідомлення про помилку установка проблема не може Exec
cpp0: Немає такі файл or каталог. Щоб вирішити це, потрібно або поставити cpp0 і
інші компоненти компілятора де ПКУ очікує знайти їх, або ви можете встановити
змінна оточення GCC_EXEC_PREFIX до каталогу, куди ви їх встановили. Не треба
забудьте про кінець /.

-print-sysroot
Надрукуйте цільовий каталог sysroot, який буде використовуватися під час компіляції. Це
цільовий sysroot, зазначений під час налаштування або за допомогою --sysroot варіант
можливо з додатковим суфіксом, який залежить від параметрів компіляції. Якщо немає цілі
sysroot вказано, параметр нічого не друкує.

-print-sysroot-headers-suffix
Надрукуйте суфікс, доданий до цільового sysroot під час пошуку заголовків, або вкажіть
помилка, якщо компілятор не налаштований з таким суфіксом---і нічого не робити
інше.

- смітник
Надрукуйте цільову машину компілятора (наприклад, i686-pc-linux-gnu)---і не робіть
щось ще.

- dumpversion
Роздрукуйте версію компілятора (наприклад, 3.0)---і більше нічого не роби.

- dumpspecs
Роздрукуйте вбудовані специфікації компілятора --- і більше нічого не робіть. (Це використовується, коли
Сам GCC будується.)

-feliminate-unused-debug-types
Зазвичай, під час створення виводу DWARF2, GCC видає інформацію про налагодження для всіх
типи, оголошені в одиниці компіляції, незалежно від того, є вони насправді чи ні
використовується в цьому компіляційному блоці. Іноді це корисно, наприклад, якщо в налагоджувачі,
ви хочете привести значення до типу, який насправді не використовується у вашій програмі (але є
оголошено). Однак частіше це призводить до значної втрати простору.
За допомогою цього параметра GCC уникає виведення символів налагодження для таких типів
ніде не використовується у вихідному файлі, який компілюється.

опції Що Контроль Оптимізація
Ці параметри керують різними видами оптимізації.

Без будь-якої опції оптимізації мета компілятора - знизити вартість компіляції
і щоб налагодження дало очікувані результати. Твердження незалежні: якщо ви
зупинити програму з точкою зупину між операторами, потім можна призначити нове значення
будь-яку змінну або змінити лічильник програми на будь-який інший оператор у функції та отримати
саме ті результати, які ви очікуєте від вихідного коду.

Увімкнення прапорів оптимізації змушує компілятор намагатися покращити продуктивність та/або
розмір коду за рахунок часу компіляції та, можливо, можливості налагоджувати
програми.

Компілятор виконує оптимізацію на основі знань, які він має про програму.
Компіляція кількох файлів одночасно в режим одного вихідного файлу дозволяє компілятору використовувати
інформацію, отриману з усіх файлів під час компіляції кожного з них.

Не всі оптимізації контролюються безпосередньо за допомогою прапорця. Лише оптимізації, які мають a
прапор перелічено в цьому розділі.

Більшість оптимізацій увімкнено, лише якщо -O рівень встановлюється в командному рядку. Інакше
вони вимкнені, навіть якщо вказано окремі прапорці оптимізації.

Залежно від цілі та того, як GCC був налаштований, дещо інший набір
оптимізацію можна ввімкнути на кожному -O рівня, ніж перераховані тут. Ви можете викликати GCC
з -Q --help=оптимизатори щоб дізнатися точний набір оптимізацій, які ввімкнено на
кожен рівень.

-O
-O1 Оптимізація. Оптимізація компіляції займає трохи більше часу і набагато більше пам’яті
велика функція.

з -O, компілятор намагається зменшити розмір коду та час виконання без виконання
будь-які оптимізації, які займають багато часу на компіляцію.

-O вмикає такі прапорці оптимізації:

-fauto-inc-dec -fcompare-elim -fcprop-реєстри -fdce -fdefer-pop -fзатримка-гілка
-fdse -fguess-гіл-ймовірність -fif-перетворення2 -fif-перетворення -fipa-pure-const
-фіпа-профіль -фіпа-довідка -fmerge-constants -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -безкоштовно-безкоштовно -ftree-phiprop -ftree-sra
-ftree-pta -ftree-ter - за раз

-O також включається -fomit-frame-pointer на машинах, де це не заважає
з налагодженням.

-O2 Оптимізуйте ще більше. GCC виконує майже всі підтримувані оптимізації, які не виконуються
передбачають компроміс між швидкістю простору. У порівнянні з -O, ця опція збільшує обидва
час компіляції та продуктивність згенерованого коду.

-O2 вмикає всі прапорці оптимізації, зазначені в -O. Він також включає наступне
прапорці оптимізації: -fthread-стрибки -falign-functions -falign-стрибки -Falign-loops
-falign-етикетки -fcaller-saves -фкросстрибки -fcse-folow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fdevirtualize -дорогі оптимізації -fgcse
-fgcse-lm -finline-small-functions -findirect-inlining -фіпа-шра
-foptimize-sibling-calls -fpartial-inlining -fpeephole2 - Fregmove -freorder-блоки
-freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-overflow
-перетворення з трьома перемикачами -ftree-tail-merge -Free-pre -ftree-vrp

Будь ласка, зверніть увагу на попередження під -fgcse про виклик -O2 на програми, які використовують обчислювальну
gotos.

ПРИМІТКА. В Ubuntu 8.10 і новіших версіях, -D_FORTIFY_SOURCE=2 встановлено за замовчуванням і є
активується, коли -O встановлено на 2 або вище. Це забезпечує додатковий час компіляції та
перевірки під час виконання кількох функцій libc. Щоб вимкнути, вкажіть будь-яке
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Оптимізуйте ще більше. -O3 вмикає всі оптимізації, зазначені в -O2 і також включається
la -finline-функції, -перемикачі-петлі, -fpredictive-commoning, -fgcse-після перезавантаження,
-ftree-vectorize, -ftree-partial-pre і -fipa-cp-clone Варіанти.

-O0 Скоротіть час компіляції та змусьте налагодження дати очікувані результати. Це
за замовчуванням.

-Ос Оптимізувати за розміром. -Ос дозволяє все -O2 оптимізації, які зазвичай не збільшуються
розмір коду. Він також виконує подальшу оптимізацію, призначену для зменшення розміру коду.

-Ос вимикає такі прапорці оптимізації: -falign-functions -falign-стрибки
-Falign-loops -falign-етикетки -freorder-блоки -freorder-blocks-and-partition
-fprefetch-loop-arrays -ftree-vect-loop-version

-Швидко
Нехтуйте суворим дотриманням стандартів. -Швидко дозволяє все -O3 оптимізації. Це також
дозволяє оптимізації, які не дійсні для всіх стандартних програм. Це
включається -швидка математика і специфічні для Fortran -fno-protect-parens і -fstack-масиви.

Якщо ви використовуєте кілька -O варіанти, з номерами рівнів або без них, останній такий варіант
той, який ефективний.

Варіанти форми -fпрапор вкажіть машинно-незалежні прапори. Більшість прапорів мають обидва
позитивні та негативні форми; негативна форма -ффу був би -fno-foo. У таблиці
нижче перелічено лише одну з форм --- та, яку ви зазвичай використовуєте. Можна придумати
витягніть іншу форму, видаливши ні- або додавши його.

Наведені нижче параметри керують конкретними оптимізаціями. Вони або активуються за допомогою -O
варіанти або пов’язані з такими, які є. Ви можете використовувати наступні прапори в рідкісних
випадки, коли бажана «точна настройка» оптимізації.

-fno-default-inline
Не робіть функції-члени вбудованими за замовчуванням лише тому, що вони визначені всередині
область дії класу (тільки C++). Інакше, коли ви вкажете -O, визначені функції-члени
внутрішня область видимості класу за замовчуванням компілюється вбудовано; тобто вам не потрібно додавати вбудований
перед назвою функції-члена.

-fno-defer-pop
Завжди вводьте аргументи для кожного виклику функції, як тільки ця функція повертається. Для
компілятор зазвичай дозволяє машинам, які повинні виводити аргументи після виклику функції
Аргументи накопичуються в стеку для кількох викликів функцій і виводять їх усі на
один раз

Вимкнено на рівнях -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-розрядних Linux x86 і 32-розрядних Darwin x86 змінено на
-fomit-frame-pointer. За замовчуванням можна повернутися до -fno-omit-frame-pointer by
налаштування GCC за допомогою --enable-frame-pointer налаштувати параметр.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-foptimize-sibling-calls
Оптимізуйте однотипні та хвостові рекурсивні виклики.

Увімкнено на рівнях -O2, -O3, -Ос.

-fno-inline
Не розгортайте вбудовані функції, крім тих, які позначені символом "always_inline"
атрибут. Це значення за замовчуванням, якщо не оптимізовано.

Окремі функції можна звільнити від вбудовування, позначивши їх символом "noinline"
атрибут.

-finline-small-functions
Інтегруйте функції в викликані, коли їх тіло менше очікуваного
код виклику функції (тому загальний розмір програми стає меншим). Компілятор
евристично вирішує, які функції досить прості, щоб їх варто інтегрувати
сюди. Це вбудовування застосовується до всіх функцій, навіть тих, які не оголошені вбудованими.

Увімкнено на рівні -O2.

-findirect-inlining
Вбудовані також непрямі виклики, які виявляються відомими під час компіляції завдяки
попередня підкладка. Ця опція має будь-який ефект лише тоді, коли ввімкнено саме вбудовування
по -finline-функції or -finline-small-functions Варіанти.

Увімкнено на рівні -O2.

-finline-функції
Розглянемо всі функції для вбудовування, навіть якщо вони не оголошені вбудованими. The
Компілятор евристично вирішує, які функції варто інтегрувати таким чином.

Якщо всі виклики даної функції інтегровані, і функція оголошується
"статичний", то функція зазвичай не виводиться як код асемблера самостійно.

Увімкнено на рівні -O3.

-finline-functions-called-once
Розглянемо всі «статичні» функції, викликані один раз для вбудовування в їх виклик, навіть якщо
вони не позначені як «вбудовані». Якщо виклик даної функції інтегрований, то
функція не виводиться як код асемблера самостійно.

Увімкнено на рівнях -O1, -O2, -O3 і -Ос.

-страшно-вставляючи
Вбудовані функції, позначені як "always_inline", і функції, тіло яких здається меншим
накладні витрати на виклик функції перед тим, як це зробити -fprofile-generate приладів та
справжній пас. Це значно дешевше і зазвичай робить профільування
вбудовування швидше в програмах, що мають великі ланцюжки вкладених функцій обгортки.

Увімкнено за замовчуванням.

-фіпа-шра
Виконати міжпроцедурну скалярну заміну агрегатів, видалення невикористаних параметрів
і заміна параметрів, переданих за посиланням, параметрами, переданими за значенням.

Увімкнено на рівнях -O2, -O3 і -Ос.

-finline-limit=n
За замовчуванням GCC обмежує розмір функцій, які можуть бути вбудовані. Цей прапор дозволяє
грубий контроль цієї межі. n це розмір функцій, які можна вбудувати
кількість псевдоінструкцій.

Вбудовування насправді контролюється рядом параметрів, які можна вказати
індивідуально за допомогою --парам ім'я=значення, -finline-limit=n параметр встановлює деякі з
ці параметри наступним чином:

max-inline-insns-single
встановлений в n/ 2.

max-inline-insns-auto
встановлений в n/ 2.

Нижче дивіться документацію щодо окремих параметрів, що керують вбудовуванням і
для значень за замовчуванням цих параметрів.

Примітка: може не мати ніякої цінності -finline-limit що призводить до поведінки за замовчуванням.

Примітка: псевдоінструкція являє собою, в цьому конкретному контексті, абстрактний
вимірювання розміру функції. У жодному разі це не означає кількість зборів
інструкції, і тому його точне значення може змінитися від одного випуску до an
інший.

-fno-keep-inline-dllexport
Це більш дрібнозерниста версія -fkeep-inline-functions, що стосується лише
функції, які оголошуються за допомогою атрибута "dllexport" або declspec

-fkeep-inline-functions
У C випускати "статичні" функції, які оголошені "вбудованими" в об'єктний файл, навіть якщо
функція була вбудована в усі її виклики. Цей перемикач не впливає
функції за допомогою розширення "extern inline" в GNU C90. У C++ випускайте будь-який і все
вбудовані функції в об’єктний файл.

-fkeep-static-consts
Видавати змінні, оголошені як "статичні константи", коли оптимізація не ввімкнена, навіть якщо
змінні не посилаються.

GCC вмикає цю опцію за замовчуванням. Якщо ви хочете змусити компілятор перевірити, чи
на змінну, незалежно від того, увімкнено чи ні оптимізацію, використовуйте
la -fno-keep-static-consts варіант.

-fmerge-constants
Спроба об’єднати ідентичні константи (рядкові константи та константи з плаваючою комою)
через одиниці компіляції.

Цей параметр є стандартним для оптимізованої компіляції, якщо асемблер і компонувальник
підтримайте це. Використовуйте -fno-merge-constants гальмувати цю поведінку.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fmerge-all-constants
Спробуйте об’єднати ідентичні константи та ідентичні змінні.

Цей варіант має на увазі -fmerge-constants. На додаток до -fmerge-constants це
розглядає, наприклад, навіть постійні ініціалізовані масиви або ініціалізовані постійні змінні з
цілі чи з плаваючою комою. Такі мови, як C або C++, вимагають кожної змінної,
включаючи кілька екземплярів однієї змінної в рекурсивні виклики, щоб мати різні
розташування, тому використання цієї опції призведе до невідповідної поведінки.

-fmodulo-sched
Виконайте планування swing за модулем безпосередньо перед першим проходом планування. Це
pass розглядає внутрішні цикли і змінює порядок їх інструкцій, накладаючи різні
ітерацій.

-fmodulo-sched-allow-regmoves
Виконуйте більш агресивне модульне планування на основі SMS з дозволеними переміщеннями в реєстрі. За
встановлення цього прапора певні краї антизалежностей будуть видалені, що спрацює
генерування reg-ходів на основі аналізу життєвого діапазону. Цей варіант є
ефективний тільки з -fmodulo-sched включений.

-fno-branch-count-reg
Не використовуйте інструкції «зменшення та розгалуження» в регістрі підрахунку, а замість цього
генерувати послідовність інструкцій, які зменшують регістр, порівнюють його з
нуль, потім розгалужується на основі результату. Ця опція має значення лише на
архітектури, які підтримують такі інструкції, до яких належать x86, PowerPC, IA-64 і
S/390.

За замовчуванням - -fbranch-count-reg.

-fno-function-cse
Не розміщуйте адреси функцій в регістрах; зробіть кожну інструкцію, яка викликає a
константна функція містить адресу функції явно.

Цей параметр призводить до менш ефективного коду, але деякі дивні хаки, які змінюють
Вихід асемблера може бути заплутаний оптимізаціями, що виконуються, коли ця опція є
не використовується.

За замовчуванням - -ffunction-cse

-fno-zero-initialized-in-bss
Якщо ціль підтримує розділ BSS, GCC за замовчуванням розміщує змінні, які є
ініціалізується на нуль у BSS. Це може заощадити місце в отриманому коді.

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

За замовчуванням - -fzero-ініціалізовано-в-bss.

-fmudflap -fmudflapth -fmudflapir
Для інтерфейсів, які це підтримують (C і C++), інструментуйте всі ризиковані покажчики/масиви
операції розіменування, деякі стандартні бібліотечні рядкові/кучі функції та деякі інші
пов'язані конструкції з тестами діапазону/валідності. Модулі мають бути таким чином обладнані
несприйнятливий до переповнення буфера, недійсного використання купи та деяких інших класів C/C++
помилки програмування. Прилади покладаються на окрему бібліотеку часу виконання
(libmudflap), який буде пов’язано з програмою if -fmudflap надається під час посилання.
Поведінка інструментованої програми під час виконання контролюється MUDFLAP_OPTIONS
змінна середовища. Перегляньте параметри "env MUDFLAP_OPTIONS=-help a.out".

використання -fmudflapth замість -fmudflap компілювати та зв’язати, якщо ваша програма багато-
різьбовий. Використовуйте -fmudflapir, На додаток до -fmudflap or -fmudflapth, Якщо
прилади повинні ігнорувати читання покажчика. Це створює менше інструментів (і
тому швидше виконання) і все ще забезпечує певний захист від прямої пам'яті
пошкоджує запис, але дозволяє помилково прочитаним даним поширюватися в програмі.

-fthread-стрибки
Виконайте оптимізацію, коли ми перевіряємо, чи розгалужується стрибок до місця, де
знайдено інше порівняння, яке включається до першого. Якщо так, то перша гілка
негайно перенаправляється або до місця призначення другої гілки, або до точки
слідуючи йому, залежно від того, чи відомо умова істинна чи хибна.

Увімкнено на рівнях -O2, -O3, -Ос.

-fsplit-wide-types
При використанні типу, який займає кілька регістрів, наприклад "long long" на 32-бітному
системи, розділити регістри та розподілити їх незалежно. Це нормально
генерує кращий код для цих типів, але може ускладнити налагодження.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fcse-folow-jumps
У загальному виключенні підвиразів (CSE), скануйте інструкції переходу, коли
ціль стрибка не досягається іншим шляхом. Наприклад, коли CSE зустрічається
оператор "if" з пунктом "else", CSE буде слідувати за переходом, коли умова
перевірено хибне.

Увімкнено на рівнях -O2, -O3, -Ос.

-fcse-skip-blocks
Це схоже на -fcse-folow-jumps, але змушує CSE слідувати цим стрибкам
умовно пропускати блоки. Коли CSE зустрічає простий оператор "if" з номером
інше положення, -fcse-skip-blocks змушує CSE слідувати за стрибком навколо тіла
"якщо".

Увімкнено на рівнях -O2, -O3, -Ос.

-frerun-cse-after-loop
Повторно запустіть видалення загального підвиразу після виконання оптимізації циклу.

Увімкнено на рівнях -O2, -O3, -Ос.

-fgcse
Виконайте глобальний загальний прохід видалення підвиразів. Цей пропуск також виконує
глобальна константа і поширення копій.

Примітка: Під час компіляції програми з використанням обчислених gotos, розширення GCC, ви можете отримати
кращу продуктивність під час виконання, якщо вимкнути ліквідацію загального підвиразу
пройти шляхом додавання -fno-gcse до командного рядка.

Увімкнено на рівнях -O2, -O3, -Ос.

-fgcse-lm
Коли -fgcse-lm увімкнено, буде намагатися видалити глобальний загальний підвираз
переміщувати в себе вантажі, які тільки вбивають магазини. Це дозволяє створити петлю
що містить послідовність завантаження/збереження, яка має бути змінена на навантаження поза циклом, і a
копіювати/зберігати в циклі.

Увімкнено за замовчуванням, коли ввімкнено gcse.

-fgcse-sm
Коли -fgcse-sm увімкнено, після глобального спільного запускається проходження магазину
усунення підвиразів. Цей перехід намагатиметься вивести магазини з циклів. Коли
використовується разом з -fgcse-lm, цикли, що містять послідовність завантаження/збереження, можуть бути
змінено на навантаження перед циклом і збереження після циклу.

Не ввімкнено на жодному рівні оптимізації.

-fgcse-las
Коли -fgcse-las увімкнено, глобальне загальне видалення підвиразів проходить
усуває надлишкові навантаження, які надходять після зберігання в одне й те саме місце пам’яті (обидва
часткове та повне звільнення).

Не ввімкнено на жодному рівні оптимізації.

-fgcse-після перезавантаження
Коли -fgcse-після перезавантаження увімкнено, виконується прохід зняття зайвого навантаження
після перезавантаження. Метою цього проходу є очищення зайвих розливів.

-funsafe-loop-optimizations
Якщо вказано, оптимізатор циклу вважатиме, що індекси циклу не переповнюються, і це
цикли з умовою нетривіального виходу не є нескінченними. Це дозволяє отримати більш широкий діапазон
оптимізації циклу, навіть якщо сам оптимізатор циклу не може довести, що ці
припущення справедливі. Використання -Wunsafe-loop-optimizations, компілятор попередить вас
якщо він знайде такий цикл.

-фкросстрибки
Виконайте трансформацію у стрибках. Це перетворення уніфікує еквівалентний код і
зберегти розмір коду. Отриманий код може або не працювати краще, ніж без перехресних
стрибки.

Увімкнено на рівнях -O2, -O3, -Ос.

-fauto-inc-dec
Комбінуйте збільшення або зменшення адрес з доступом до пам’яті. Цей пропуск є
завжди пропускав архітектури, які не мають інструкцій для підтримки цього.
Увімкнено за замовчуванням о -O і вище на архітектурах, які це підтримують.

-fdce
Виконайте видалення мертвого коду (DCE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fdse
Виконайте ліквідацію мертвих магазинів (DSE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fif-перетворення
Спроба перетворити умовні стрибки в еквіваленти без гілок. Сюди входить використання
умовних ходів, мін, максимум, інструкції встановлення прапорців та абс, а також деякі трюки
за стандартною арифметикою. Використання умовного виконання на фішках там, де воно є
доступний контролюється за допомогою "if-conversion2".

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fif-перетворення2
Використовуйте умовне виконання (якщо доступне) для перетворення умовних переходів
еквіваленти без галузей.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fdelete-null-pointer-checks
Припустимо, що програми не можуть безпечно розіменовувати нульові покажчики, і що немає коду чи даних
елемент знаходиться там. Це дає змогу прості постійні оптимізації згортання взагалі
рівні оптимізації. Крім того, інші проходи оптимізації в GCC використовують цей прапор
контроль глобального аналізу потоків даних, який усуває марні перевірки на нульові покажчики;
вони припускають, що якщо покажчик перевіряється після того, як він уже розіменований, він
не може бути нульовим.

Однак зауважте, що в деяких середовищах це припущення не відповідає дійсності. Використовуйте
-fno-delete-null-pointer-checks щоб вимкнути цю оптимізацію для програм, які залежать
на таку поведінку.

Деякі цілі, особливо вбудовані, вимикають цю опцію на всіх рівнях. Інакше
він увімкнений на всіх рівнях: -O0, -O1, -O2, -O3, -Ос. Перепустки, які використовують інформацію
включаються незалежно на різних рівнях оптимізації.

-fdevirtualize
Спроба перетворити виклики у віртуальні функції на прямі виклики. Це робиться обидва
всередині процедури та міжпроцедурно як частина непрямого вбудовування
("-findirect-inlining") і міжпроцедурне поширення константи (-fipa-cp). Увімкнено
на рівнях -O2, -O3, -Ос.

-дорогі оптимізації
Виконайте ряд незначних оптимізацій, які є відносно дорогими.

Увімкнено на рівнях -O2, -O3, -Ос.

-вільно
Спробуйте видалити зайві інструкції розширення. Це особливо корисно для
архітектура x86-64, яка неявно розширюється до нуля в 64-бітних регістрах після
запис до їх нижньої 32-розрядної половини.

Увімкнено для x86 на рівнях -O2, -O3.

-foptimize-register-move
- Fregmove
Спробуйте перепризначити номери регістрів в інструкціях переміщення та як операнди інших
прості інструкції, щоб максимізувати кількість прив'язування реєстрів. Це
особливо корисно на машинах з двооперандними інструкціями.

примітки - Fregmove і -foptimize-register-move та ж оптимізація.

Увімкнено на рівнях -O2, -O3, -Ос.

-fira-algorithm=алгоритм
Використовуйте вказаний алгоритм фарбування для інтегрованого розподільника регістрів. The
алгоритм аргумент може бути пріоритет, який визначає пріоритетне забарвлення Чоу, або CB,
який визначає забарвлення Чайтіна-Бріггса. Забарвлення Чайтіна-Бріггса не реалізовано
для всіх архітектур, але для тих цілей, які її підтримують, це значення за замовчуванням
тому що він генерує кращий код.

-fira-region=регіон
Використовуйте вказані регіони для інтегрованого розподільника регістрів. The регіон аргумент
має бути одним із наступних:

всі Використовуйте всі цикли як області розміщення регістрів. Це може дати найкращі результати для
машини з невеликим та/або неправильним набором регістрів.

змішаний
Використовуйте всі цикли, окрім циклів з невеликим тиском у регістрі, як області. Це
value зазвичай дає найкращі результати в більшості випадків і для більшості архітектур, і
увімкнено за замовчуванням під час компіляції з оптимізацією для швидкості (-O, -O2, ...).

один Використовуйте всі функції як єдиний регіон. Зазвичай це призводить до найменшого коду
розмір і ввімкнено за замовчуванням для -Ос or -O0.

-fira-loop-pressure
Використовуйте IRA для оцінки тиску регістра в циклах для прийняття рішень щодо переміщення інваріантів циклу.
Цей параметр зазвичай призводить до генерації швидшого та меншого коду на машинах з
великі файли регістрів (>= 32 регістри), але це може сповільнити роботу компілятора.

Цей параметр увімкнено на рівні -O3 для деяких цілей.

-fno-ira-share-save-slots
Вимкніть спільне використання слотів стека, які використовуються для збереження використаних жорстких регістрів
дзвінок. Кожен жорсткий регістр отримує окремий слот стека, і, як результат, стек функцій
рамки більші.

-fno-ira-share-spill-slots
Вимкнути спільний доступ до слотів стека, виділених для псевдореєстрів. Кожен псевдореєстр
що не отримує жорсткий регістр, отримує окремий слот стека, і як результат функцію
стекові рамки більші.

-fira-verbose=n
Контролюйте детальність файлу дампа для інтегрованого розподільника регістрів. The
значення за замовчуванням дорівнює 5. Якщо значення n більше або дорівнює 10, вихідний дамп надсилається
до stderr, використовуючи той самий формат, що й n мінус 10.

-fзатримка-гілка
Якщо це підтримується для цільової машини, спробуйте змінити порядок інструкцій для використання
Слоти інструкцій доступні після відкладених інструкцій переходу.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fschedule-insns
Якщо це підтримується для цільової машини, спробуйте змінити порядок інструкцій, щоб видалити
виконання зупиняється через недоступність необхідних даних. Це допомагає машинам, що
мати повільні інструкції з плаваючою комою або завантаження пам’яті, дозволяючи іншим інструкціям
видаватися до тих пір, поки не знадобиться результат інструкції навантаження або з плаваючою комою.

Увімкнено на рівнях -O2, -O3.

-fschedule-insns2
Як і в -fschedule-insns, але вимагає додаткового проходження планування інструкцій
після розміщення реєстру. Це особливо корисно на машинах з a
відносно невелика кількість регістрів і де інструкції завантаження пам'яті займають більше ніж
один цикл.

Увімкнено на рівнях -O2, -O3, -Ос.

-fno-sched-interblock
Не плануйте інструкції між основними блоками. Зазвичай це ввімкнено за замовчуванням
при плануванні перед виділенням регістру, тобто з -fschedule-insns або, по крайней -O2 or
вище.

-fno-sched-spec
Не допускайте спекулятивного руху інструкцій без завантаження. Зазвичай це вмикається за допомогою
за замовчуванням при плануванні перед виділенням регістра, тобто з -fschedule-insns або, по крайней
-O2 або вище.

-fsched-тиск
Увімкнути чутливе до тиску регістр планування insn перед виділенням регістра.
Це має сенс лише в разі планування до ввімкнення виділення регістрів, тобто з
-fschedule-insns або, по крайней -O2 або вище. Використання цієї опції може покращити згенерований
коду та зменшити його розмір, запобігаючи збільшення тиску в регістрі понад число
наявних жорстких реєстрів і, як наслідок, реєструвати розливи в реєстрі
виділення.

-fsched-spec-load
Дозволити спекулятивний рух деяких інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -O2 або вище.

-fsched-spec-load-dangerous
Дозволити спекулятивний рух більшої кількості інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -O2 або вище.

-fsched-stalled-insns
-fsched-stalled-insns=n
Визначте, скільки insns (якщо такі є) можна передчасно перемістити з черги зупинених
insns у готовий список під час другого проходу планування.
-fno-sched-stalled-insns означає, що жодні заклади не будуть передчасно переміщені,
-fsched-stalled-insns=0 означає, що немає обмежень щодо кількості переміщених закладів у черзі
передчасно. -fsched-stalled-insns без значення еквівалентно
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Визначте, скільки груп (циклів) insn буде перевірено на залежність від зупинки
insn, який є кандидатом на передчасне видалення з черги зупинених insn. Це
діє лише під час другого проходу планування, і тільки якщо
-fsched-stalled-insns використовується. -fno-sched-stalled-insns-dep еквівалентна
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep без значення еквівалентно
до -fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
Під час планування після виділення регістра використовуйте алгоритм планування суперблоку.
Планування суперблоків дозволяє переміщатися через межі базових блоків, що призводить до прискорення
графіки. Цей варіант є експериментальним, оскільки не всі описи машин використовуються GCC
моделюйте ЦП досить точно, щоб уникнути ненадійних результатів алгоритму.

Це має сенс лише при плануванні після виділення регістру, тобто з
-fschedule-insns2 або, по крайней -O2 або вище.

-fsched-group-euristic
Увімкніть групову евристику в планувальнику. Ця евристика сприяє інструкції
що належить до групи розкладу. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -O2 або вище.

-fsched-critical-path-euristic
Увімкніть евристики критичного шляху в планувальнику. Ця евристичність сприяє
інструкції на критичному шляху. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -O2 або вище.

-fsched-spec-insn-евристичний
Увімкніть евристику спекулятивних інструкцій у планувальнику. Ця евристичність сприяє
спекулятивні інструкції з більшою слабкістю залежності. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -O2
або вище.

-fsched-rank-euristic
Увімкніть евристичний рейтинг у планувальнику. Ця евристика сприяє інструкції
належність до базового блоку з більшим розміром або частотою. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -O2
або вище.

-fsched-last-insn-евристичний
Увімкніть евристику останньої інструкції в планувальнику. Ця евристика сприяє
інструкція, яка менш залежить від останнього запланованого інструкції. Це ввімкнено
за замовчуванням, коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2
або, по крайней -O2 або вище.

-fsched-dep-count-euristic
Увімкніть евристику залежного підрахунку в планувальнику. Ця евристика сприяє
інструкція, яка містить більше інструкцій залежно від неї. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -O2
або вище.

-freschedule-modulo-scheduled-loops
Планування за модулем передує традиційному плануванню, якщо цикл був за модулем
заплановано, ми можемо захотіти запобігти зміні пізніших пропусків розкладу
розклад, ми використовуємо цю опцію, щоб контролювати це.

-вибіркове планування
Плануйте інструкції за допомогою алгоритму вибіркового планування. Вибіркове планування
замість першого проходу планувальника.

-fselective-scheduling2
Плануйте інструкції за допомогою алгоритму вибіркового планування. Вибіркове планування
замість другого проходу планувальника.

-fsel-sched-pipelining
Увімкнути програмну конвеєрію внутрішніх циклів під час вибіркового планування. Це
опція не діє до одного з -вибіркове планування or -fselective-scheduling2 is
включено.

-fsel-sched-pipelining-outer-loops
Під час вибору конвеєрних циклів під час вибіркового планування також конвейерні зовнішні цикли. Це
опція не діє доки -fsel-sched-pipelining увімкнено.

-fshrink-wrap
Функція Emit виступає лише перед частинами функції, які цього потребують, а не в
верхня частина функції. Цей прапор увімкнено за замовчуванням в -O і вище.

-fcaller-saves
Дозволити розподіляти значення в регістрах, які будуть забиті викликами функцій,
шляхом видачі додаткових інструкцій для збереження та відновлення реєстрів навколо таких викликів.
Такий розподіл виконується лише тоді, коли здається, що це призводить до кращого коду, ніж було б
в іншому випадку виробляти.

Цей параметр завжди ввімкнено за замовчуванням на певних машинах, як правило, на тих, які мають
замість них немає регістрів, що зберігаються за викликом.

Увімкнено на рівнях -O2, -O3, -Ос.

-fcombine-stack-adjustments
Відстежує коригування стеку (натискання та вибухання) та посилання на пам’ять стека, а потім намагається
знайти способи їх поєднання.

Увімкнено за замовчуванням о -O1 і вище.

-fconserve-stack
Намагайтеся мінімізувати використання стека. Компілятор намагатиметься використовувати менше місця в стеку,
навіть якщо це робить програму повільнішою. Цей параметр передбачає налаштування великий стек-
кадр параметр до 100 і big-stack-frame-growth параметр до 400.

-ftree-reassoc
Виконайте реасоціацію на деревах. Цей прапор увімкнено за замовчуванням в -O і вище.

-Free-pre
Виконайте часткове усунення надмірності (PRE) на деревах. Цей прапор увімкнено за допомогою
за замовчуванням на -O2 і -O3.

-ftree-partial-pre
Зробіть часткове усунення надмірності (PRE) більш агресивним. Цей прапор увімкнено за допомогою
за замовчуванням на -O3.

-ftree-forwprop
Виконайте пряме розмноження на деревах. Цей прапор увімкнено за замовчуванням в -O і
вище.

-безкоштовно-безкоштовно
Виконайте повне усунення надмірності (FRE) на деревах. Різниця між FRE і
PRE полягає в тому, що FRE розглядає лише вирази, які обчислюються на всіх шляхах, що ведуть до
надлишкове обчислення. Цей аналіз швидший, ніж PRE, хоча розкриває менше
скорочення штатів. Цей прапор увімкнено за замовчуванням в -O і вище.

-ftree-phiprop
Виконувати підйом вантажів від умовних покажчиків на деревах. Цей пропуск увімкнено за допомогою
за замовчуванням на -O і вище.

-ftree-copy-prop
Виконайте копіювання на деревах. Цей пропуск усуває непотрібні операції копіювання.
Цей прапор увімкнено за замовчуванням в -O і вище.

-fipa-pure-const
Дізнайтеся, які функції є чистими чи постійними. Увімкнено за замовчуванням о -O і вище.

-фіпа-довідка
Дізнайтеся, які статичні змінні не екрануються, не можуть уникнути блоку компіляції.
Увімкнено за замовчуванням о -O і вище.

-фіпа-пта
Виконайте міжпроцедурний аналіз покажчиків та міжпроцедурну модифікацію та
довідковий аналіз. Цей параметр може призвести до надмірного використання пам’яті та часу компіляції
великі одиниці компіляції. Він не включений за замовчуванням на жодному рівні оптимізації.

-фіпа-профіль
Виконайте міжпроцедурне поширення профілю. Функції викликаються тільки з холоду
функції позначені як холодні. Також функції, що виконуються один раз (наприклад, "холодний",
«noreturn», статичні конструктори або деструктори). Холодні функції і
Частини функцій, які виконуються один раз, оптимізуються за розміром. Увімкнено
за замовчуванням на -O і вище.

-fipa-cp
Виконайте міжпроцедурне поширення константи. Ця оптимізація аналізує програму
щоб визначити, коли значення, передані функціям, є константами, а потім оптимізувати
відповідно. Ця оптимізація може істотно підвищити продуктивність, якщо
додаток має константи, передані функціям. Цей прапорець увімкнено за замовчуванням в
-O2, -Ос і -O3.

-fipa-cp-clone
Виконайте клонування функції, щоб посилити поширення міжпроцедурної константи. Коли
увімкнено, міжпроцедурне поширення константи виконуватиме клонування функції, коли
видиму ззовні функцію можна викликати з постійними аргументами. Тому що це
оптимізація може створити кілька копій функцій, вона може значно збільшитися
розмір коду (див --парам ipcp-unit-growth=значення). Цей прапор увімкнено за замовчуванням в
-O3.

-fipa-matrix-reorg
Виконайте сплющення та транспонування матриці. Вирівнювання матриці намагається замінити an
m-вимірна матриця з її еквівалентною n-вимірною матрицею, де n < m. Це
зменшує рівень опосередкованості, необхідного для доступу до елементів матриці. The
Друга оптимізація - це транспонування матриці, яка намагається змінити порядок
розміри матриці, щоб покращити локальність кешу. Обидві оптимізації потребують
-f ціла програма прапор. Транспонування ввімкнено, лише якщо інформація профілю є
в наявності.

-Free-раковина
Виконуйте рух вперед по деревах. Цей прапор увімкнено за замовчуванням в -O і
вище.

-ftree-bit-ccp
Виконайте розріджене розповсюдження константи умовного біта на деревах та розповсюджуйте покажчик
інформація про вирівнювання. Цей перехід працює лише з локальними скалярними змінними і є
увімкнено за замовчуванням на -O і вище. Це вимагає цього -ftree-ccp активовано

-ftree-ccp
Виконайте розріджене умовне постійне поширення (CCP) на деревах. Тільки цей пропуск
працює з локальними скалярними змінними і вмикається за замовчуванням на -O і вище.

-перетворення з трьома перемикачами
Виконайте перетворення простих ініціалізацій в комутаторі на ініціалізації з a
скалярний масив. Цей прапор увімкнено за замовчуванням в -O2 і вище.

-ftree-tail-merge
Шукайте ідентичні кодові послідовності. Коли знайдете, замініть один стрибком на інший.
Ця оптимізація відома як злиття хвостів або перехресний стрибок. Цей прапор увімкнено за допомогою
за замовчуванням на -O2 і вище. Час компіляції в цьому проході можна обмежити за допомогою
max-tail-merge-comparations параметр і max-tail-merge-iterations параметр.

-ftree-dce
Виконайте видалення мертвого коду (DCE) на деревах. Цей прапорець увімкнено за замовчуванням в -O
і вище.

-ftree-builtin-call-dce
Виконайте умовне видалення мертвого коду (DCE) для викликів вбудованих функцій, які
може встановлювати "errno", але в іншому випадку вони не мають побічних ефектів. Цей прапор увімкнено за замовчуванням
at -O2 і вище, якщо -Ос також не вказано.

-ftree-dominator-opts
Виконуйте різноманітні прості скалярні очищення (поширення константи/копіювання, надмірність
усунення, поширення діапазону та спрощення виразу) на основі домінатора
обхід дерева. Це також виконує стрибкові потоки (щоб скоротити стрибки до стрибків). Це
прапор увімкнено за замовчуванням на -O і вище.

-ftree-dse
Виконайте ліквідацію мертвих магазинів (DSE) на деревах. Мертвий магазин - це запас у пам'яті
розташування, яке пізніше перезаписується іншим магазином без будь-яких проміжних завантажень. в
у цьому випадку попередній магазин можна видалити. Цей прапор увімкнено за замовчуванням в -O і
вище.

-ftree-ch
Виконайте копіювання заголовка циклу на деревах. Це корисно, оскільки воно збільшується
ефективність оптимізації руху коду. Це також економить один стрибок. Цей прапор є
увімкнено за замовчуванням на -O і вище. Це не ввімкнено для -Ос, оскільки зазвичай
збільшує розмір коду.

-ftree-loop-optimize
Виконуйте оптимізацію циклу на деревах. Цей прапор увімкнено за замовчуванням в -O і
вище.

-ftree-loop-linear
Виконайте циклові перетворення на дереві. Такий же, як -шлюз-розв'язка. Використовувати
це перетворення коду, GCC має бути налаштований --with-ppl і --with-cloog до
увімкнути інфраструктуру перетворення циклу Graphite.

-шлюз-розв'язка
Виконайте перетворення циклів обміну на циклах. Зміна двох вкладених циклів
перемикає внутрішній і зовнішній цикли. Наприклад, заданий цикл, наприклад:

DO J = 1, М
DO I = 1, N
A(J, I) = A(J, I) * C
ENDDO
ENDDO

Обмін циклами перетворить цикл так, ніби користувач написав:

DO I = 1, N
DO J = 1, М
A(J, I) = A(J, I) * C
ENDDO
ENDDO

що може бути корисним, коли "N" більше, ніж кеш, тому що у Fortran,
Елементи масиву зберігаються в пам'яті безперервно за стовпцями та оригіналом
цикл повторює рядки, потенційно створюючи при кожному доступі промах кешу. Це
оптимізація застосовується до всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --with-ppl
і --with-cloog щоб увімкнути інфраструктуру перетворення циклу Graphite.

-floop-strip-mine
Виконуйте перетворення видобутку циклів на петлях. Видобуток смуги розбиває цикл на
два вкладених цикли. Зовнішня петля має кроки, рівні розміру смужки і внутрішню
петля має кроки вихідної петлі всередині смужки. Довжину смужки можна змінювати
використання loop-block-tile-size параметр. Наприклад, заданий цикл, наприклад:

DO I = 1, N
A(I) = A(I) + C
ENDDO

майнінг смугового циклу перетворить цикл так, ніби користувач написав:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

Ця оптимізація стосується всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --with-ppl
і --with-cloog щоб увімкнути інфраструктуру перетворення циклу Graphite.

-флоп-блок
Виконайте перетворення блокування циклів у циклах. Блокування смуги мін кожної петлі в
Розташування циклів так, що доступ до пам’яті циклів елемента поміщається в кеші. The
Довжину смуги можна змінити за допомогою loop-block-tile-size параметр. Наприклад,
дано цикл, як:

DO I = 1, N
DO J = 1, М
A(J, I) = B(I) + C(J)
ENDDO
ENDDO

Блокування циклу трансформує цикл так, ніби користувач написав:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, хв (JJ + 50, M)
A(J, I) = B(I) + C(J)
ENDDO
ENDDO
ENDDO
ENDDO

що може бути корисно, коли "M" більше, ніж кеш, тому що внутрішній цикл
буде перебирати меншу кількість даних, які можуть зберігатися в кеші. Це
оптимізація застосовується до всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --with-ppl
і --with-cloog щоб увімкнути інфраструктуру перетворення циклу Graphite.

-fgraphite-identity
Увімкнути перетворення ідентичності для графіту. Для кожного SCoP ми створюємо
багатогранне представлення та перетворіть його назад у Gimple. Використання -fgraphite-identity
ми можемо перевірити витрати або переваги трансформації GIMPLE -> GRAPHITE -> GIMPLE.
Деякі мінімальні оптимізації також виконуються генератором коду CLooG, як індекс
розщеплення та усунення мертвого коду в циклах.

-розплющити
Видаляє структуру вкладення циклу: перетворює гніздо циклу в один цикл. Це
трансформація може бути корисною як вмикаюче перетворення для векторизації та
розпаралелювання. Ця функція є експериментальною. Щоб використовувати це перетворення коду, GCC
має бути налаштовано з --with-ppl і --with-cloog щоб увімкнути графітовий цикл
трансформаційна інфраструктура.

-floop-parallize-all
Використовуйте аналіз залежності даних Graphite, щоб визначити цикли, які можна розпаралелювати.
Розпаралелюйте всі цикли, які можна проаналізувати, щоб не містити залежностей, що передаються циклом
не перевіряючи, що вигідно розпаралелювати петлі.

-fcheck-data-deps
Порівняйте результати кількох аналізаторів залежності даних. Цей параметр використовується для
налагодження аналізаторів залежності даних.

-ftree-loop-if-convert
Спробуйте перетворити умовні стрибки у внутрішніх циклах у безвідгалужливі
еквіваленти. Мета полягає в тому, щоб видалити контрольний потік з внутрішніх циклів по порядку
щоб покращити здатність проходу векторизації обробляти ці цикли. Це
увімкнено за замовчуванням, якщо ввімкнено векторизацію.

-ftree-loop-if-convert-stores
Спробуйте також перетворити умовні стрибки, що містять записи в пам'яті. Це
перетворення може бути небезпечним для багатопоточних програм, оскільки воно перетворює умовні
пам'ять записує в безумовні записи в пам'ять. Наприклад,

для (i = 0; i < N; i++)
якщо (умовно)
A[i] = вираз;

було б перетворено на

для (i = 0; i < N; i++)
A[i] = cond? вираз: A[i];

потенційно створюють гонки даних.

-ftree-loop-distribution
Виконайте розподіл циклу. Цей прапор може покращити продуктивність кешу на великих тілах циклу
і дозволяє проводити подальші оптимізації циклу, такі як паралелізація або векторізація
місце. Наприклад, петля

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO

трансформується в

DO I = 1, N
A(I) = B(I) + C
ENDDO
DO I = 1, N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
Виконайте цикловий розподіл шаблонів, які можна генерувати за допомогою викликів a
бібліотека. Цей прапор увімкнено за замовчуванням в -O3.

Цей прохід розподіляє цикли ініціалізації та генерує виклик нульового набору мем.
Наприклад, петля

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
ENDDO

трансформується в

DO I = 1, N
A(I) = 0
ENDDO
DO I = 1, N
B(I) = A(I) + I
ENDDO

і цикл ініціалізації перетворюється на виклик нульового мемсету.

-ftree-loop-im
Виконуйте рух по деревах без змін у циклі. Цей прохід переміщує лише інваріанти, які б
важко обробляти на рівні RTL (виклики функцій, операції, які розширюються до нетривіальних
послідовності insns). З -перемикачі-петлі він також переміщує операнди умов, які
є інваріантними поза циклом, тому ми можемо використовувати лише тривіальний аналіз інваріантності
в циклі відключення. Пропуск також включає рух магазину.

-ftree-loop-ivcanon
Створіть канонічний лічильник кількості ітерацій у циклах, для яких визначається
кількість ітерацій вимагає складного аналізу. Пізніші оптимізації можуть
легко визначити число. Корисно, особливо у зв'язку з розгортанням.

-півопти
Виконайте оптимізацію індукційної змінної (зменшення міцності, змінна індукції
злиття та усунення змінних індукцій) на деревах.

-ftree-parallelize-loops=n
Розпаралелізуйте цикли, тобто розділіть їх простір ітерацій для виконання в n потоках. Це
можливо лише для циклів, ітерації яких є незалежними і можуть бути довільними
перезамовлено. Оптимізація вигідна лише на багатопроцесорних машинах, для циклів
які завантажують процесор, а не обмежені, наприклад, пропускною здатністю пам'яті. Цей варіант
мається на увазі -нитка, і, таким чином, підтримується лише на цілях, які мають підтримку
-нитка.

-ftree-pta
Виконуйте аналіз функцій локальних точок до дерев. Цей прапор увімкнено за замовчуванням
at -O і вище.

-ftree-sra
Виконати скалярну заміну агрегатів. Цей прохід замінює посилання на структуру
зі скалярами, щоб запобігти фіксації структур у пам'ять занадто рано. Цей прапор є
увімкнено за замовчуванням на -O і вище.

-ftree-copyrename
Виконайте копіювання перейменування на деревах. Цей прохід намагається перейменувати тимчасові елементи компілятора в
інші змінні в місцях копіювання, що зазвичай призводить до імен змінних, які більше
дуже схожі на вихідні змінні. Цей прапор увімкнено за замовчуванням в -O і
вище.

-ftree-coalesce-inlined-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
також визначені змінні, але тільки якщо вони були вбудовані з інших функцій. Це
більш обмежена форма -ftree-coalesce-vars. Це може зашкодити такій налагоджувальної інформації
вбудовані змінні, але він тримає змінні функції inlined-to окремо від
один одного, так що вони, швидше за все, містять очікувані значення в a
сеанс налагодження. Це було за замовчуванням у версіях GCC, старіших за 4.7.

-ftree-coalesce-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
також визначені змінні, а не лише тимчасові елементи компілятора. Це може серйозно обмежити
можливість налагодження оптимізованої програми, скомпільованої з -fno-var-tracking-assignments.
У запереченій формі цей прапор запобігає об’єднанню SSA змінних користувача, у тому числі
вбудовані. Цей параметр увімкнено за замовчуванням.

-ftree-ter
Виконайте тимчасову заміну експресії під час фази SSA->normal. Неодружений
тимчасові елементи use/single def замінюються в місці їх використання на їх визначення
вираз. Це призводить до не-GIMPLE коду, але дає розширювачам набагато більше
складні дерева для роботи, що призведе до кращого генерування RTL. Це увімкнено за допомогою
за замовчуванням на -O і вище.

-ftree-vectorize
Виконайте векторизацію циклів на деревах. Цей прапорець увімкнено за замовчуванням в -O3.

-ftree-slp-vectorize
Виконайте базову блокову векторизацію на деревах. Цей прапор увімкнено за замовчуванням в -O3 і
коли -ftree-vectorize активовано

-ftree-vect-loop-version
Виконуйте циклізацію версій, виконуючи векторизацію циклу на деревах. Коли з’являється петля
можна векторизувати, за винятком того, що неможливо визначити вирівнювання даних або залежність даних
під час компіляції генеруються векторизовані та невекторизовані версії циклу
разом із перевірками під час виконання на вирівнювання чи залежність, щоб контролювати, яка версія є
виконано. Цей параметр увімкнено за замовчуванням, крім рівня -Ос де він відключений.

-fvect-cost-model
Увімкнути модель вартості для векторизації.

-ftree-vrp
Виконайте поширення діапазону значень на деревах. Це схоже на постійне поширення
pass, але замість значень поширюються діапазони значень. Це дозволяє
оптимізатори для видалення непотрібних перевірок діапазону, таких як перевірки прив’язаності до масиву та нульовий покажчик
чеки. Це ввімкнено за замовчуванням на -O2 і вище. Видалення перевірки нульового покажчика
виконується лише якщо -fdelete-null-pointer-checks активовано

-ftracer
Виконайте дублювання хвоста, щоб збільшити розмір суперблока. Це перетворення спрощує
потік керування функцією, що дозволяє іншим оптимізаціям виконувати кращу роботу.

-закрутки-петлі
Розгортання циклів, кількість ітерацій яких можна визначити під час компіляції або після
вхід до петлі. -закрутки-петлі мається на увазі -frerun-cse-after-loop. Цей варіант робить
код більший, і може прискорити його роботу, а може і ні.

-закрутити всі петлі
Розгортаємо всі цикли, навіть якщо їх кількість ітерацій невизначена, коли цикл є
увійшов. Це зазвичай змушує програми працювати повільніше. -закрутити всі петлі має на увазі
такі ж варіанти, як -закрутки-петлі,

-fsplit-ivs-in-unroller
Дозволяє виразити значення індукційних змінних у наступних ітераціях
розгорнутий цикл із використанням значення на першій ітерації. Це порушує тривалу залежність
ланцюжків, що покращує ефективність планування проходів.

Поєднання -fweb і CSE часто достатньо для отримання того ж ефекту. Однак
у випадках, коли тіло циклу є складнішим, ніж один базовий блок, це не так
надійний. Він також взагалі не працює на деяких архітектурах через
обмеження в пропуску CSE.

Ця оптимізація ввімкнена за замовчуванням.

-fvariable-expansion-in-unroller
За допомогою цієї опції компілятор створить кілька копій деяких локальних змінних
під час розгортання циклу, що може призвести до кращого коду.

-fpartial-inlining
Вбудовані частини функцій. Цей параметр має будь-який ефект лише тоді, коли є саме вбудовування
увімкнено -finline-функції or -finline-small-functions Варіанти.

Увімкнено на рівні -O2.

-fpredictive-commoning
Виконайте прогнозну оптимізацію спільного використання, тобто повторне використання обчислень (особливо
завантажує та зберігає пам’ять), виконані в попередніх ітераціях циклів.

Цей параметр увімкнено на рівні -O3.

-fprefetch-loop-arrays
Якщо це підтримується цільовою машиною, згенеруйте інструкції для попереднього отримання пам’яті
покращити продуктивність циклів, які звертаються до великих масивів.

Цей параметр може генерувати кращий або гірший код; результати сильно залежать від
структура циклів у вихідному коді.

Вимкнено на рівні -Ос.

-fno-глазок
-fno-глазок2
Вимкніть будь-яку оптимізацію вічка для конкретної машини. Різниця між
-fno-глазок і -fno-глазок2 полягає в тому, як вони реалізовані в компіляторі; дещо
цілі використовують одне, деякі використовують інше, деякі використовують обидва.

-фглаз увімкнено за замовчуванням. -fpeephole2 увімкнено на рівнях -O2, -O3, -Ос.

-fno-guess-гілки-ймовірність
Не вгадайте ймовірності гілок за допомогою евристики.

GCC використовуватиме евристики для вгадування ймовірностей гілок, якщо вони не надані
зворотний зв'язок щодо профілю (-fprofile-arcs). Ці евристики засновані на потоці керування
графік. Якщо деякі ймовірності гілок задані __builtin_expect, А потім
евристики будуть використовуватися для вгадування ймовірностей гілок для решти потоку керування
графік, беручи __builtin_expect інформація до уваги. Взаємодії між
евристики і __builtin_expect може бути складним, а в деяких випадках може бути корисним
відключити евристику, щоб впливати __builtin_expect простіше
зрозуміти

За замовчуванням - -fguess-гіл-ймовірність на рівнях -O, -O2, -O3, -Ос.

-freorder-блоки
Змініть порядок основних блоків у скомпільованій функції, щоб зменшити кількість взятих
гілки та покращити локальність коду.

Увімкнено на рівнях -O2, -O3.

-freorder-blocks-and-partition
На додаток до зміни порядку основних блоків у скомпільованій функції, щоб зменшити
кількість взятих гілок, розбиває гарячі та холодні опорні блоки на окремі секції
файлів збірки та файлів .o, щоб покращити роботу сторінок та локальності кешу.

Ця оптимізація автоматично вимикається за наявності обробки винятків,
для розділів linkonce, для функцій із визначеним користувачем атрибутом розділу та на будь-якому
архітектура, яка не підтримує іменовані розділи.

-freorder-functions
Змініть порядок функцій в об’єктному файлі, щоб покращити локальність коду. Це
реалізовано за допомогою спеціальних підрозділів ".text.hot" для найбільш часто виконуваних
функції та ".text.unlikely" для малоймовірно виконаних функцій. Перезамовлення виконується
компонувальник, тому формат об’єктного файлу повинен підтримувати іменовані розділи, а компоновщик має розміщувати
їх розумним чином.

Також має бути доступний відгук у профілі, щоб ця опція стала ефективною. Побачити
-fprofile-arcs for details.

Увімкнено на рівнях -O2, -O3, -Ос.

-fstrict-aliasing
Дозвольте компілятору прийняти найсуворіші правила псевдонімів, застосовні до мови
компілюється. Для C (і C++) це активує оптимізацію на основі типу
вирази. Зокрема, передбачається, що об’єкт одного типу ніколи не перебуває в
ту саму адресу, що й об’єкт іншого типу, за винятком випадків, коли типи майже однакові.
Наприклад, "unsigned int" може псевдонім "int", але не "void*" або "double". А
тип символу може бути псевдонімом будь-якого іншого типу.

Зверніть особливу увагу на такий код:

союз a_union {
int i;
подвійний d;
};

int f() {
союз a_union t;
td = 3.0;
повернути ti;
}

Практика читання від іншого члена профспілки, ніж останній
Письмо (так званий "type-punning") є поширеним. Навіть з -fstrict-aliasing, тип-
каламбур дозволяється, якщо доступ до пам'яті здійснюється через тип об'єднання. Отже,
код вище буде працювати, як очікувалося. Однак цей код може не:

int f() {
союз a_union t;
int* ip;
td = 3.0;
ip = &t.i;
return *ip;
}

Аналогічно, доступ, взявши адресу, перетворивши результуючий покажчик і
розіменування результату має невизначену поведінку, навіть якщо приведення використовує тип об'єднання,
наприклад:

int f() {
подвійне d = 3.0;
return ((union a_union *) &d)->i;
}

повне г, повне г,, показали, від, номер, XNUMX -fstrict-aliasing параметр увімкнено на рівнях -O2, -O3, -Ос.

-fstrict-overflow
Дозвольте компілятору прийняти строгі правила переповнення зі знаком, залежно від мови
компілюється. Для C (і C++) це означає переповнення при виконанні арифметики з
signed numbers не визначено, а це означає, що компілятор може припустити, що це не буде
відбутися. Це дозволяє здійснювати різноманітні оптимізації. Наприклад, компілятор буде вважати
що вираз на кшталт «i + 10 > i» завжди буде істинним для «i» зі знаком. Це
припущення дійсне, лише якщо підписане переповнення не визначено, оскільки вираз хибний
якщо «i + 10» переповнюється під час використання арифметики доповнення до двох. Коли ця опція включена
впливати на будь-яку спробу визначити, чи переповнеться операція з числами зі знаком
має бути написано уважно, щоб не викликати переповнення.

Ця опція також дозволяє компілятору припустити строгу семантику вказівника: якщо a
вказівник на об’єкт, якщо додавання зміщення до цього вказівника не створює покажчика
до того самого об’єкта додавання не визначено. Це дозволяє компілятору зробити висновок
що "p + u > p" завжди істинно для вказівника "p" і цілого беззнакового числа "u". Це
припущення дійсне лише тому, що обертання покажчика не визначено, як і вираз
false, якщо "p + u" переповнюється за допомогою арифметики двоїчного доповнення.

Див. Також -fwrapv варіант. Використання -fwrapv означає, що ціле переповнення зі знаком є
повністю визначений: він обгортає. Коли -fwrapv використовується, різниці між ними немає
-fstrict-overflow і -fno-strict-overflow для цілих чисел. З -fwrapv певні види
переповнення дозволено. Наприклад, якщо компілятор отримує переповнення під час виконання
арифметика для констант, переповнене значення все ще можна використовувати з -fwrapv, Але не
інакше.

повне г, повне г,, показали, від, номер, XNUMX -fstrict-overflow параметр увімкнено на рівнях -O2, -O3, -Ос.

-falign-functions
-falign-functions=n
Вирівняйте початок функцій із наступним степенем двох, більшим за n, пропускаючи до n
байтів. Наприклад, -falign-functions=32 вирівнює функції до наступних 32-байт
межа, але -falign-functions=24 вирівняється з наступною 32-байтовою межею, лише якщо
це можна зробити, пропустивши 23 байти або менше.

-fno-align-functions і -falign-functions=1 є еквівалентними і означають, що функції
не буде вирівняно.

Деякі асемблери підтримують цей прапор лише тоді, коли n є степенем двійки; в такому випадку це так
заокруглений.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -O2, -O3.

-falign-етикетки
-falign-labels=n
Вирівняйте всі цілі гілок за межею ступеня двох, пропустивши до n байти, як
-falign-functions. Ця опція може легко зробити код уповільненим, оскільки його потрібно вставити
фіктивні операції, коли ціль розгалуження досягається в звичайному потоці коду.

-fno-align-labels і -falign-labels=1 є еквівалентними і означають, що міток не буде
вирівняні.

If -Falign-loops or -falign-стрибки застосовні й більші за це значення
замість них використовуються їхні значення.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням, що дуже ймовірно
бути 1, що означає відсутність вирівнювання.

Увімкнено на рівнях -O2, -O3.

-Falign-loops
-falign-loops=n
Вирівняйте цикли до межі ступеня двох, пропускаючи до n байти, як -falign-functions.
Сподіваємося, що цикл буде виконано багато разів, що компенсує будь-яке
виконання фіктивних операцій.

-fno-align-loops і -falign-loops=1 є еквівалентними і означають, що циклів не буде
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -O2, -O3.

-falign-стрибки
-falign-jumps=n
Вирівняйте цілі розгалужень за межею ступеня двох, для цілей гілок, де цілі
можна досягти, лише стрибнувши, пропустивши до n байти, як -falign-functions, в
у цьому випадку не потрібно виконувати фіктивні операції.

-fno-align-jumps і -falign-jumps=1 є еквівалентними і означають, що циклів не буде
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -O2, -O3.

- за раз
Цей параметр залишено з міркувань сумісності. - за раз не має ефекту, поки
-fno-unit-at-a-time мається на увазі -fno-toplevel-reorder і -fno-секція-анкери.

Увімкнено за замовчуванням.

-fno-toplevel-reorder
Не змінюйте порядок функцій верхнього рівня, змінних і операторів "asm". Виведіть їх
у тому самому порядку, у якому вони відображаються у вхідному файлі. Коли використовується ця опція,
статичні змінні без посилання не будуть видалені. Цей параметр призначений для підтримки
існуючий код, який ґрунтується на певному порядку. Для нового коду краще використовувати
атрибути.

Увімкнено на рівні -O0. Якщо вимкнено явно, це також означає -fno-секція-анкери,
який інакше увімкнено на -O0 на деяких цілях.

-fweb
Створює мережі, які зазвичай використовуються для цілей розподілу реєстрів, і призначає кожній мережі
індивідуальний псевдореєстр. Це дозволяє працювати з проходом розподілу реєстрів
псевдо безпосередньо, але також посилює кілька інших проходів оптимізації, таких як CSE,
оптимізатор циклу та тривіальний засіб для видалення мертвого коду. Однак він може здійснювати налагодження
неможливо, оскільки змінні більше не залишатимуться в «домашньому реєстрі».

Увімкнено за замовчуванням за допомогою -закрутки-петлі.

-f ціла програма
Припустимо, що поточний блок компіляції представляє всю компілюючу програму.
Усі загальнодоступні функції та змінні, за винятком "main" та тих, які об'єднані
атрибут "externally_visible" стає статичними функціями і фактично оптимізується
більш агресивно за допомогою міжпроцедурних оптимізаторів. Якщо золото використовується як плагін компонувальника,
Атрибути "externally_visible" автоматично додаються до функцій (ще не змінні
через струм золото проблема), доступ до яких здійснюється за межами об’єктів LTO відповідно до
файл резолюції, створений золото. Для інших компонувальників, які не можуть генерувати дозвіл
файл, явні атрибути "externally_visible" все ще необхідні. Поки цей варіант
еквівалентно правильному використанню ключового слова static для програм, що складаються з a
один файл у поєднанні з опцією -flto цей прапор можна використовувати для компіляції багатьох
програми меншого масштабу, оскільки функції та змінні стають локальними для цілого
комбінований блок компіляції, а не для окремого вихідного файлу.

Цей варіант має на увазі -fцілий файл для програм Fortran.

-flto[=n]
Цей параметр запускає стандартний оптимізатор часу зв’язку. При виклику з вихідним кодом it
генерує GIMPLE (одне з внутрішніх представлень GCC) і записує його до спеціального ELF
розділи в об’єктному файлі. Коли об’єктні файли пов’язані разом, усі
тіла функцій зчитуються з цих розділів ELF і створюються так, ніби вони були
частина тієї ж одиниці перекладу.

Щоб використовувати оптимізатор часу зв’язку, -flto необхідно вказати під час компіляції та під час
остаточне посилання. Наприклад:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Перші два виклики GCC зберігають представлення байт-коду GIMPLE у спец
Всередині секції ELF foo.o і bar.o. Остаточний виклик читає байт-код GIMPLE
від foo.o і bar.o, об’єднує два файли в єдине внутрішнє зображення та компілює
результат як зазвичай. Оскільки обидва foo.o і bar.o об’єднані в одне зображення, це
змушує всі міжпроцедурні аналізи та оптимізації в GCC працювати по всьому
два файли, як ніби вони є одним. Це означає, наприклад, що inliner є
можливість вбудовувати функції в bar.o в функції в foo.o і навпаки.

Інший (простіший) спосіб увімкнути оптимізацію часу зв’язку:

gcc -o myprog -flto -O2 foo.c bar.c

Вище генерується байт-код для foo.c і bar.c, об’єднує їх разом в єдине ціле
Представлення GIMPLE та оптимізує їх, як зазвичай, для виробництва myprog.

Єдине важливе, про що слід пам’ятати, це те, що ввімкнути оптимізацію часу з’єднання
-flto прапор потрібно передати як команді компіляції, так і команді посилання.

Щоб оптимізація всієї програми була ефективною, необхідно створити певне ціле
програмні припущення. Компілятор повинен знати, якими можуть бути функції та змінні
доступ до бібліотек і середовища виконання за межами блоку, оптимізованого під час підключення. Коли
підтримується компонувальником, плагіном компоновщика (див -fuse-linker-plugin) проходить
інформація для компілятора про використані та видимі ззовні символи. Коли
плагін компонування недоступний, -f ціла програма слід використовувати, щоб дозволити компілятору
зробити ці припущення, що призводить до більш агресивних рішень щодо оптимізації.

Зауважте, що коли файл компілюється з -flto, згенерований об’єктний файл більше ніж
звичайний об'єктний файл, оскільки він містить байт-коди GIMPLE і звичайний кінцевий код.
Це означає, що об’єктні файли з інформацією LTO можуть бути пов’язані як звичайний об’єкт
файли; якщо -flto не передається компоновщику, ніякої міжпроцедурної оптимізації не відбувається
застосовано.

Крім того, прапорці оптимізації, що використовуються для компіляції окремих файлів, не є
обов'язково пов'язані з тими, які використовуються під час посилання. Наприклад,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

Це створює окремі об’єктні файли з неоптимізованим кодом ассемблера, але
отриманий двійковий файл myprog оптимізовано на -O3. Якщо замість цього кінцевий двійковий файл
створений без -flto, То myprog не оптимізовано.

При створенні остаточного двійкового файлу с -flto, GCC застосовує лише оптимізацію часу з’єднання
до тих файлів, які містять байт-код. Таким чином, ви можете змішувати та поєднувати об’єктні файли
і бібліотеки з байт-кодами GIMPLE і кінцевим об'єктним кодом. GCC вибирає автоматично
які файли оптимізувати в режимі LTO і які файли зв’язувати без подальшого
обробка

Існують деякі прапори генерації коду, які зберігаються GCC під час генерації байт-кодів, як
їх потрібно використовувати на останньому етапі посилання. На даний момент наступні варіанти
зберігаються у файлах байт-коду GIMPLE: -fPIC, -fзагальний і все -m цільові прапори.

Під час посилання ці параметри читаються та використовуються повторно. Зауважимо, що струм
реалізація не робить спроб розпізнати конфліктні значення для цих параметрів. Якщо
різні файли мають конфліктні значення параметрів (наприклад, один файл компілюється з -fPIC
а інший ні), компілятор просто використовує останнє значення, прочитане з байт-коду
файлів. Тому рекомендується скомпілювати всі файли, які беруть участь у
те саме посилання з тими ж параметрами.

Якщо LTO зустрічає об’єкти зі зв’язуванням C, оголошеними з несумісними типами, окремо
одиниці перекладу, які повинні бути пов’язані між собою (невизначена поведінка відповідно до ISO C99
6.2.7), може бути виданий нефатальний діагноз. Поведінка все ще не визначена під час виконання
часу.

Ще одна особливість LTO полягає в тому, що можна застосовувати міжпроцедурні оптимізації
на файли, написані різними мовами. Для цього потрібна підтримка на мовному фронті
кінець. Наразі інтерфейси C, C++ і Fortran здатні видавати GIMPLE
байт-кодами, тому щось на зразок цього має працювати:

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++ і
-lgfortran додається, щоб отримати бібліотеки часу виконання Fortran. Загалом при змішуванні
мовами в режимі LTO, ви повинні використовувати ті самі параметри команди посилання, що й під час змішування
мови у звичайній (не LTO) компіляції; все, що вам потрібно додати, це -flto для всіх
команди компіляції та зв'язування.

Скажімо, якщо об’єктні файли, що містять байт-код GIMPLE, зберігаються в архіві бібліотеки
libfoo.a, їх можна витягти та використати у посиланні LTO, якщо ви використовуєте a
лінкер з підтримкою плагінів. Щоб увімкнути цю функцію, скористайтеся прапорцем -fuse-linker-plugin
під час посилання:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Якщо ввімкнено плагін компонувальника, компонувальник витягує необхідні файли GIMPLE
libfoo.a і передає їх до поточного GCC, щоб зробити їх частиною агрегованого
Зображення GIMPLE для оптимізації.

Якщо ви не використовуєте компоновщик з підтримкою плагінів і/або не вмикаєте компонувальник
плагін, потім об’єкти всередині libfoo.a витягуються та зв’язуються, як зазвичай, але вони
не брати участі в процесі оптимізації LTO.

Оптимізація часу зв'язку не вимагає наявності всієї програми для роботи.
Якщо програма не вимагає експорту символів, можна об’єднати
-flto і -f ціла програма щоб дозволити міжпроцедурним оптимізаторам використовувати більше
агресивні припущення, які можуть призвести до покращення можливостей оптимізації. Використання
-f ціла програма не потрібен, коли плагін компонувальника активний (див -fuse-linker-plugin).

Поточна реалізація LTO не робить спроб генерувати байт-код, тобто
перенесення між різними типами хостів. Файли байт-коду мають версії і є
є суворою перевіркою версії, тому файли байт-коду, згенеровані в одній версії GCC, не будуть
працювати зі старішою/новішою версією GCC.

Оптимізація часу зв'язку погано працює з генерацією налагоджувальної інформації.
Об'єднання -flto з -g наразі є експериментальним і, як очікується, буде виробляти неправильне
результати.

Якщо вказати необов’язковий n, оптимізація та генерація коду, що виконується під час посилання
виконується паралельно з використанням n паралельні роботи за допомогою встановленого зробити програми.
Змінна середовища ЗРОБІТЬ може використовуватися для заміни використовуваної програми. За замовчуванням
значення для n є 1.

Ви також можете вказати -flto=сервер роботи використовувати для визначення режим сервера завдань GNU make
кількість паралельних робіт. Це корисно, коли Makefile, що викликає GCC, уже є
виконується паралельно. Ви повинні додати а + до командного рецепту в батьківському
Makefile, щоб це працювало. Ця опція, ймовірно, працює лише в тому випадку, якщо ЗРОБІТЬ є виробником GNU.

Цей параметр вимкнено за замовчуванням

-flto-partition=ALG
Вкажіть алгоритм розподілу, який використовується оптимізатором часу зв’язку. Значення є
або "1to1", щоб вказати розділення, що віддзеркалює вихідні файли, або
"збалансований", щоб вказати поділ на однакові за розміром шматки (коли це можливо).
Визначення «none» як алгоритм повністю вимикає розділення та потокову передачу. The
значення за замовчуванням «збалансований».

-flto-compression-level=n
Цей параметр визначає рівень стиснення, що використовується для написання мови середнього рівня
до об’єктних файлів LTO і має значення лише в поєднанні з режимом LTO (-flto).
Допустимі значення: від 0 (без стиснення) до 9 (максимальне стиснення). Цінності поза цим
діапазон обмежені до 0 або 9. Якщо параметр не вказано, значення за замовчуванням збалансовано
використовується налаштування стиснення.

-flto-звіт
Друкує звіт із внутрішніми деталями про роботу оптимізатора часу зв’язку. The
зміст цього звіту відрізняється від версії до версії. Це має бути корисним для GCC
розробників під час обробки об’єктних файлів у режимі LTO (через -flto).

Вимкнено за умовчанням.

-fuse-linker-plugin
Дозволяє використовувати плагін компонувальника під час оптимізації часу з’єднання. Цей варіант залежить
про підтримку плагінів у компонувальнику, який доступний у золотому кольорі або в GNU ld 2.21 або
новіший.

Цей параметр дозволяє витягувати об’єктні файли з байт-кодом GIMPLE з бібліотеки
архіви. Це покращує якість оптимізації, відкриваючи більше коду за посиланням-
оптимізатор часу. Ця інформація визначає, до яких символів можна отримати зовнішній доступ
(за об'єктом, що не є LTO, або під час динамічного зв'язування). Покращення якості коду в результаті
двійкові файли (і спільні бібліотеки, які використовують приховану видимість) подібні до
"-fwhole-program". Побачити -flto для опису впливу цього прапора та способів
використай це.

Цей параметр увімкнено за замовчуванням, якщо підтримка LTO в GCC увімкнена і GCC був
налаштований для використання з компонувальником, який підтримує плагіни (GNU ld 2.21 або новішої або золотої).

-ffat-lto-об'єкти
Об’єкти Fat LTO – це об’єктні файли, які містять як проміжну мову, так і мову
об'єктний код. Це робить їх придатними як для зв’язування LTO, так і для звичайного зв’язування. Це
Опція ефективна лише при компіляції з -flto і ігнорується під час посилання.

-fno-fat-lto-objects покращує час компіляції порівняно зі звичайним LTO, але вимагає
повний набір інструментів, щоб знати про LTO. Для цього потрібен компоновщик з підтримкою плагіна компонувальника
для базової функціональності. Крім того, nm, ar і ranlib повинні підтримувати компонувальник
плагіни, що дозволяють створювати повнофункціональне середовище збірки (здатне створювати статичні
бібліотеки тощо).

За замовчуванням - -ffat-lto-об'єкти але це за замовчуванням планується змінити в майбутньому
випускається, коли середовища з підтримкою плагінів компонування стають більш поширеними.

-fcompare-elim
Після розподілу регістру та розподілу інструкцій після реєстру ідентифікуйте
арифметичні інструкції, які обчислюють прапори процесора, подібні до операції порівняння
на основі цієї арифметики. Якщо можливо, виключіть операцію явного порівняння.

Цей пропуск застосовується лише до певних цілей, які не можуть явно представляти
операція порівняння до завершення виділення регістру.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-запобіжник-ld=золото
Використовувати золото компонувальник замість стандартного компонувальника.

-fuse-ld=bfd
Використовувати ld.bfd компонувальник замість стандартного компонувальника.

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

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fprofile-correction
Можуть бути профілі, зібрані за допомогою інструментального двійкового файлу для багатопоточних програм
непостійний через пропущені оновлення лічильника. Якщо вказано цю опцію, GCC буде
використовувати евристики, щоб виправити або згладити такі невідповідності. За замовчуванням GCC буде
видавати повідомлення про помилку при виявленні невідповідного профілю.

-fprofile-dir=шлях
Встановіть каталог для пошуку файлів даних профілю шлях. Цей варіант
впливає лише на дані профілю, створені за допомогою -fprofile-generate, -ftest-покриття,
-fprofile-arcs і використовується -fprofile-use і -fгілля-ймовірності та пов’язані з цим
варіанти. Можна використовувати як абсолютні, так і відносні шляхи. За замовчуванням GCC буде використовувати
поточний каталог як шлях, таким чином файл даних профілю з'явиться в тому самому
каталог як об'єктний файл.

-fprofile-generate
-fprofile-generate=шлях
Увімкнути параметри, які зазвичай використовуються для інструментальних програм, щоб створити корисний профіль
для подальшої перекомпіляції з оптимізацією на основі зворотного зв'язку профілю. Ви повинні використовувати
-fprofile-generate як під час компіляції, так і під час зв'язування вашої програми.

Увімкнено такі параметри: «-fprofile-arcs», «-fprofile-values», «-fvpt».

If шлях вказано, GCC перегляне шлях щоб знайти дані зворотного зв’язку профілю
файли. Побачити -fprofile-dir.

-fprofile-use
-fprofile-use=шлях
Увімкнути оптимізацію, спрямовану на зворотний зв’язок профілю, і оптимізація, як правило, прибуткова
доступний лише відгук про профіль.

Увімкнено такі параметри: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

За замовчуванням GCC видає повідомлення про помилку, якщо профілі зворотного зв’язку не збігаються
вихідний код. Цю помилку можна перетворити на попередження за допомогою -Wcoverage-невідповідність.
Зауважте, що це може призвести до погано оптимізованого коду.

If шлях вказано, GCC перегляне шлях щоб знайти дані зворотного зв’язку профілю
файли. Побачити -fprofile-dir.

Наступні параметри керують поведінкою компілятора щодо арифметики з плаваючою комою.
Ці параметри є компромісом між швидкістю та правильністю. Усе має бути спеціально увімкнено.

-флоат-магазин
Не зберігайте змінні з плаваючою комою в регістрах і забороняйте інші параметри
може змінити, чи береться значення з плаваючою комою з регістра чи пам'яті.

Ця опція запобігає небажаній надмірній точності на таких машинах, як 68000 where
плаваючі регістри (68881) зберігають більшу точність, ніж передбачається «подвійний»
мати. Аналогічно для архітектури x86. Для більшості програм надлишкова точність
робить це тільки добре, але деякі програми покладаються на точне визначення IEEE floating
точка. Використовуйте -флоат-магазин для таких програм, після їх модифікації, щоб зберегти всі
відповідні проміжні обчислення на змінні.

-fexcess-precision=стиль
Ця опція дозволяє додатково контролювати надмірну точність на машинах, де плаваюче-
точкові регістри мають більшу точність, ніж типи "float" і "double" IEEE і
процесор не підтримує операції округлення до цих типів. За замовчуванням,
-fexcess-precision=швидко діє; це означає, що операції здійснюються в
точність регістрів і непередбачуваність при округленні до типів
зазначений у вихідному коді має місце. При складанні C, якщо
-fexcess-precision=стандарт вказано, то надлишкова точність буде відповідати правилам
зазначено в ISO C99; зокрема, як приведення, так і присвоювання викликають значення
округлено до їх семантичних типів (тоді як -флоат-магазин впливає лише на завдання).
Цей параметр увімкнено за замовчуванням для C, якщо параметр суворої відповідності, наприклад
-std=c99 використовується.

-fexcess-precision=стандарт не реалізовано для інших мов, крім C, і не має
ефект, якщо -funsafe-math-optimizations or -швидка математика вказано. На x86 це
також не впливає, якщо -mfpmath=sse or -mfpmath=sse+387 уточнюється; в колишній
семантика IEEE застосовується без надмірної точності, а в останньому — округлення
непередбачуваний.

-швидка математика
набори -fno-math-errno, -funsafe-math-optimizations, -фінітна-математична,
-fno-округлення-мат, -fno-signaling-nans і -fcx-limited-range.

Ця опція визначає макрос препроцесора "__FAST_MATH__".

Цю опцію ніхто не вмикає -O варіант крім того -Швидко оскільки це може призвести до
неправильний вихід для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

-fno-math-errno
Не встановлюйте ERRNO після виклику математичних функцій, які виконуються за допомогою одного
інструкція, наприклад, sqrt. Програма, яка використовує винятки IEEE для математичних помилок
Обробка може захотіти використовувати цей прапор для швидкості, зберігаючи арифметику IEEE
Сумісність.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

За замовчуванням - -fmath-errno.

У системах Дарвіна математична бібліотека ніколи не встановлює "errno". Тому причин немає
щоб компілятор розглянув можливість того, що це могло б, і -fno-math-errno є
за замовчуванням.

-funsafe-math-optimizations
Дозволити оптимізацію для арифметики з плаваючою комою, яка (a) передбачає наявність аргументів і
результати є дійсними і (b) можуть порушувати стандарти IEEE або ANSI. При використанні під час підключення,
він може включати бібліотеки або файли запуску, які змінюють керуюче слово FPU за замовчуванням або
інші подібні оптимізації.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій. Вмикає
-fno-signed-zerers, -fno-trapping-math, -фасоціативно-мат і -частотно-мат.

За замовчуванням - -fno-unsafe-math-optimizations.

-фасоціативно-мат
Дозволити повторну асоціацію операндів у серії операцій з плаваючою комою. Це
порушує стандарт мови ISO C і C++, можливо, змінюючи результат обчислення.
ПРИМІТКА: переупорядкування може змінити знак нуля, а також ігнорувати NaNs та пригнічувати або
створити underflow або overflow (і, отже, не може використовуватися в коді, який покладається на округлення
поведінка типу "(x + 2**52) - 2**52". Також можна змінити порядок порівнянь із плаваючою комою та
тому не можна використовувати, коли потрібні впорядковані порівняння. Цей варіант вимагає цього
обидва -fno-signed-zerers і -fno-trapping-math бути в силі. Більше того, це не робить
багато сенсу з -округлення-мат. Для Fortran параметр автоматично вмикається, коли
обидва -fno-signed-zerers і -fno-trapping-math діють.

За замовчуванням - -fno-асоціативно-мат.

-частотно-мат
Дозволити використовувати зворотну величину замість того, щоб ділити на значення, якщо це
дозволяє оптимізувати. Наприклад, "x / y" можна замінити на "x * (1/y)", тобто
корисно, якщо "(1/y)" підлягає видаленню загального підвиразу. Зверніть увагу, що це
втрачає точність і збільшує кількість флопсів, що діють на значення.

За замовчуванням - -fno-reciprocal-math.

-фінітна-математична
Дозволити оптимізацію для арифметики з плаваючою комою, яка передбачає, що аргументи і
результати не є NaNs або +-Infs.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

За замовчуванням - -fno-finite-math-only.

-fno-signed-zerers
Дозволити оптимізацію для арифметики з плаваючою комою, яка ігнорує знаковий знак нуля.
Арифметика IEEE визначає поведінку різних значень +0.0 і -0.0, які потім
забороняє спрощення таких виразів, як x+0.0 або 0.0*x (навіть з
-фінітна-математична). Цей параметр означає, що знак нуля не є результатом
значний.

За замовчуванням - -fsigned-нулі.

-fno-trapping-math
Скомпілювати код, припускаючи, що операції з плаваючою комою не можуть створювати видимі користувачу
пастки. Ці пастки включають поділ на нуль, переповнення, переповнення, неточний результат і
недійсна операція. Цей варіант вимагає цього -fno-signaling-nans бути в силі.
Встановлення цієї опції може дозволити отримати швидший код, якщо покладатися на "безперервну" арифметику IEEE,
наприклад.

Цю опцію ніколи не слід вмикати -O варіант, оскільки це може призвести до
неправильний вихід для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій.

За замовчуванням - -ftrapping-math.

-округлення-мат
Вимкніть перетворення та оптимізації, які передбачають округлення з плаваючою комою за замовчуванням
поведінка. Це округлення до нуля для всіх перетворень з плаваючою комою в цілі, і
округлення до найближчого для всіх інших арифметичних скорочень. Цей варіант має бути
визначено для програм, які динамічно змінюють режим округлення FP, або це може бути
виконується в режимі округлення, відмінному від умовчання. Ця опція відключає постійне згортання
вирази з плаваючою комою під час компіляції (на які може вплинути режим округлення)
і арифметичні перетворення, які є небезпечними за наявності знакозалежних
режими округлення.

За замовчуванням - -fno-округлення-мат.

Цей параметр є експериментальним і наразі не гарантує вимкнення всіх GCC
оптимізації, на які впливає режим округлення. Можливі наступні версії GCC
більш точне керування цим параметром за допомогою прагми C99 "FENV_ACCESS". Цей командний рядок
Опція буде використовуватися для визначення стану за замовчуванням для "FENV_ACCESS".

-fsignaling-nans
Компілюйте код, припускаючи, що NaN сигналізації IEEE можуть генерувати видимі користувачу пастки під час
операції з плаваючою комою. Налаштування цього параметра вимикає оптимізацію, яка може змінитися
кількість винятків, видимих ​​із сигнальними NaN. Цей варіант має на увазі
-ftrapping-math.

Ця опція визначає макрос препроцесора "__SUPPORT_SNAN__".

За замовчуванням - -fno-signaling-nans.

Цей параметр є експериментальним і наразі не гарантує вимкнення всіх GCC
оптимізації, які впливають на поведінку сигналізації NaN.

-fsingle-precision-constant
Розглядайте константи з плаваючою комою як одинарну точність замість неявного перетворення
їх до констант подвійної точності.

-fcx-limited-range
Якщо ввімкнено, ця опція вказує, що крок скорочення діапазону не потрібен, коли
виконання складного поділу. Також немає перевірки, чи результат a
складне множення або ділення "NaN + I*NaN", зі спробою врятувати
ситуація в такому випадку. За замовчуванням є -fno-cx-limited-range, але увімкнено за допомогою
-швидка математика.

Цей параметр контролює налаштування за замовчуванням прагми ISO C99 "CX_LIMITED_RANGE".
Тим не менш, ця опція стосується всіх мов.

-fcx-fortran-rules
Комплексне множення і ділення відповідають правилам Fortran. Зменшення дальності здійснюється як
частина складного ділення, але немає перевірки, чи є результат комплексним
множення або ділення «NaN + I*NaN», зі спробою врятувати ситуацію
в такому разі.

За замовчуванням - -fno-cx-fortran-rules.

Наступні параметри керують оптимізацією, яка може покращити продуктивність, але ні
увімкнено будь-яким -O варіанти. Цей розділ містить експериментальні варіанти, які можуть виникнути
зламаний код.

-fгілля-ймовірності
Після запуску програми, скомпільованої з -fprofile-arcs, ви можете скомпілювати його вдруге
використання -fгілля-ймовірності, щоб покращити оптимізацію на основі кількості разів
кожну гілку взяли. Коли програма скомпільована з -fprofile-arcs виходить, він зберігає
виконання дуги зараховується до файлу, що викликається sourcename.gcda для кожного вихідного файлу. The
інформація в цьому файлі даних дуже залежить від структури згенерованого
код, тому ви повинні використовувати той самий вихідний код і однакові параметри оптимізації для обох
компіляції.

з -fгілля-ймовірності, GCC ставить a REG_BR_PROB примітка на кожному JUMP_INSN і
CALL_INSN. Їх можна використовувати для покращення оптимізації. На даний момент вони лише використовуються
в одному місці: в reorg.c, замість того, щоб вгадати, по якому шляху гілка найімовірніше
взяти, REG_BR_PROB значення використовуються, щоб точно визначити, який шлях береться більше
часто

-fprofile-values
Якщо поєднується з -fprofile-arcs, він додає код, щоб деякі дані про значення
вирази в програмі збираються.

з -fгілля-ймовірності, він зчитує дані, зібрані зі значень профілювання
вирази для використання в оптимізації.

Увімкнено за допомогою -fprofile-generate і -fprofile-use.

-fvpt
Якщо поєднується з -fprofile-arcs, він наказує компілятору додати код для збору
відомості про значення виразів.

з -fгілля-ймовірності, він зчитує зібрані дані і фактично виконує
оптимізації на їх основі. Наразі оптимізації включають спеціалізацію
операція ділення з використанням знань про значення знаменника.

-реєстри імен
Спробуйте уникнути хибних залежностей у запланованому коді, використовуючи залишені регістри
закінчено після розміщення реєстру. Ця оптимізація найбільше підійде для процесорів
багато реєстрів. Залежно від формату налагоджувальної інформації, прийнятого цільовою аудиторією,
однак це може зробити налагодження неможливою, оскільки змінні більше не залишаться в a
«домашній реєстр».

Увімкнено за замовчуванням за допомогою -закрутки-петлі і -fpeel-loops.

-ftracer
Виконайте дублювання хвоста, щоб збільшити розмір суперблока. Це перетворення спрощує
потік керування функцією, що дозволяє іншим оптимізаціям виконувати кращу роботу.

Увімкнено за допомогою -fprofile-use.

-закрутки-петлі
Розгортання циклів, кількість ітерацій яких можна визначити під час компіляції або після
вхід до петлі. -закрутки-петлі мається на увазі -frerun-cse-after-loop, -fweb і
-реєстри імен. Він також включає повний петлевий пілінг (тобто повне видалення
цикли з малою постійною кількістю ітерацій). Цей параметр робить код більшим і
може змусити його працювати швидше, а може і ні.

Увімкнено за допомогою -fprofile-use.

-закрутити всі петлі
Розгортаємо всі цикли, навіть якщо їх кількість ітерацій невизначена, коли цикл є
увійшов. Це зазвичай змушує програми працювати повільніше. -закрутити всі петлі має на увазі
такі ж варіанти, як -закрутки-петлі.

-fpeel-loops
Знімає петлі, для яких достатньо інформації, що вони не дуже скочуються (з
відгук про профіль). Він також включає повний петлевий пілінг (тобто повне видалення
цикли з малою постійною кількістю ітерацій).

Увімкнено за допомогою -fprofile-use.

-fmove-loop-інваріанти
Вмикає інваріантний цикл руху в оптимізаторі циклу RTL. Увімкнено на рівні
-O1

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

-ffunction-sections
-fdata-sections
Розмістіть кожну функцію або елемент даних у власний розділ вихідного файлу, якщо це цільовий елемент
підтримує довільні розділи. Ім'я функції або ім'я елемента даних
визначає назву розділу у вихідному файлі.

Використовуйте ці параметри в системах, де компонувальник може виконувати оптимізацію для покращення
місцевість посилання в просторі інструкцій. Більшість систем використовують об'єкт ELF
формат і процесори SPARC під керуванням Solaris 2 мають компонувальники з такими оптимізаціями.
У майбутньому AIX може мати ці оптимізації.

Використовуйте ці параметри лише тоді, коли від цього є значні переваги. Коли ти
вказавши ці параметри, асемблер і компоновщик створять більший об’єкт і
виконуваних файлів, а також буде повільніше. Ви не зможете використовувати "gprof" на всіх
системи, якщо ви вкажете цей параметр, і у вас можуть виникнути проблеми з налагодженням, якщо ви
вкажіть і цей параметр, і -g.

-fbranch-target-load-optimize
Виконайте оптимізацію навантаження цільового регістра гілки перед прологом/епілогом.
Використання цільових регістрів зазвичай може бути відкрито лише під час перезавантаження, таким чином, підйому
завантаження з циклів і виконання міжблочного планування потребує окремої оптимізації
прохід.

-fbranch-target-load-optimize2
Виконайте оптимізацію навантаження цільового регістра гілки після прологу/епілогу.

-fbtr-bb-exclusive
Виконуючи оптимізацію завантаження регістра цільового відділення, не використовуйте повторно цільовий регістр
реєструється в будь-якому базовому блоці.

-fstack-протектор
Випускайте додатковий код, щоб перевірити переповнення буфера, наприклад, атаки, що руйнують стек. Це
здійснюється шляхом додавання захисної змінної до функцій з уразливими об’єктами. Це
включає функції, які викликають alloca, і функції з буферами більше 8 байт.
Захисники ініціалізуються, коли вводиться функція, а потім перевіряються, коли
виходить із функції. Якщо захисна перевірка не вдається, друкується повідомлення про помилку та програма
виходи.

ПРИМІТКА. В Ubuntu 6.10 і пізніших версіях цей параметр увімкнено за замовчуванням для C, C++,
ObjC, ObjC++, якщо немає жодного з -fno-стек-протектор, -nostdlib, ні -автономний він має
знайдено.

-fstack-protector-all
Люблю -fstack-протектор за винятком того, що всі функції захищені.

-fsection-анкери
Спробуйте зменшити кількість обчислень символічної адреси, використовуючи спільний "якор"
символи для адреси об'єктів поблизу. Ця трансформація може допомогти зменшити кількість
записів GOT та доступів GOT до деяких цілей.

Наприклад, реалізація наступної функції "foo":

static int a, b, c;
int foo (void) { return a + b + c; }

зазвичай обчислює адреси всіх трьох змінних, але якщо ви його компілюєте
з -fsection-анкери, він отримає доступ до змінних із загальної точки прив’язки
замість цього. Ефект подібний до наступного псевдокоду (який не є дійсним C):

int foo (недійсний)
{
зареєструвати int *xr = &x;
return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Не всі цілі підтримують цю опцію.

--парам ім'я=значення
У деяких місцях GCC використовує різні константи для контролю рівня оптимізації
зроблено. Наприклад, GCC не буде вбудовувати функції, які містять більше певного
кількість інструкцій. Ви можете керувати деякими з цих констант у командному рядку
використання --парам варіант.

Назви конкретних параметрів і значення значень прив'язані до
внутрішні елементи компілятора, і можуть бути змінені без попередження в майбутньому
Релізи

У кожному випадку значення є цілим числом. Допустимі варіанти для ім'я дані в
наступну таблицю:

передбачуваний-відгалуження-результат
Коли передбачено, що гілка буде зайнята з імовірністю, нижчою за цей поріг
(у відсотках), то це вважається добре передбачуваним. За замовчуванням – 10.

max-crossjump-края
Максимальна кількість вхідних ребер, які слід враховувати для крос-стрибків. Алгоритм
використаний -фкросстрибки дорівнює O(N^2) у кількості ребер, що надходять до кожного блоку.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшується з, ймовірно, невеликим покращенням розміру виконуваного файлу.

min-crossjump-insns
Мінімальна кількість інструкцій, яка повинна бути зіставлена ​​в кінці двох блоків
перед тим як на них виконуватимуться крос-стрибки. Це значення ігнорується у випадку
де збігаються всі інструкції в блоці, з якого здійснюється перехід. The
значення за замовчуванням 5.

max-grow-copy-bb-insns
Максимальний коефіцієнт розширення розміру коду при копіюванні базових блоків замість
стрибки. Розширення відноситься до інструкції переходу. Значення за замовчуванням
8.

max-goto-duplication-insns
Максимальна кількість інструкцій для дублювання в блок, який переходить до a
обчислений goto. Щоб уникнути поведінки O(N^2) під час кількох проходів, GCC розраховує
обчислював goto на початку процесу компіляції і дефакторизував їх лише пізніше
можливо. Лише обчислені стрибки в кінці основного блоку з не більше ніж максимальним
goto-duplication-insns не розкладаються. Значення за замовчуванням – 8.

max-delay-slot-insn-search
Максимальна кількість інструкцій, які слід враховувати під час пошуку інструкції
заповнити слот затримки. Якщо більше цієї довільної кількості інструкцій
при пошуку економія часу від заповнення слоту затримки буде мінімальною, тому зупиніться
пошук. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, невеликим покращенням часу виконання.

max-delay-slot-live-search
Під час спроби заповнити слоти затримки слід враховувати максимальну кількість інструкцій
під час пошуку блоку з дійсною інформацією реального реєстру. Збільшення цього
довільно вибране значення означає більш агресивну оптимізацію, збільшення
час складання. Цей параметр слід видалити, коли є код слота затримки
переписано для підтримки графіка потоку керування.

max-gcse-пам'ять
Приблизний максимальний обсяг пам’яті, який буде виділено для того, щоб
виконати оптимізацію глобального загального підвиразу. Якщо більше пам'яті
ніж зазначено, оптимізація не буде виконана.

max-gcse-insertion-ratio
Якщо відношення вставок виразів до видалень більше, ніж це значення для
будь-який вираз, то RTL PRE вставить або видалить вираз і, таким чином, залишить
частково надлишкові обчислення в потоці інструкцій. Значенням за замовчуванням є
20.

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

max-modulo-backtrack-спроби
Максимальна кількість спроб повернення, яку планувальник повинен зробити за модулем
планування циклу. Більші значення можуть експоненціально збільшити час компіляції.

max-inline-insns-single
Кілька параметрів контролюють вбудоване дерево, яке використовується в gcc. Це число встановлює
максимальна кількість інструкцій (враховується у внутрішньому представленні GCC) в a
одна функція, яку вбудоване дерево розглядатиме для вбудовування. Тільки це
впливає на функції, оголошені вбудованими, і методи, реалізовані в оголошенні класу
(C++). Значення за замовчуванням — 400.

max-inline-insns-auto
При використанні -finline-функції (входить до -O3), багато функцій, які б
інакше компілятор не розглядає їх для вбудовування, буде досліджено. До
ці функції, інші (більш обмежувальні) обмеження порівняно з функціями
оголошені вбудовані можна застосувати. Значення за замовчуванням — 40.

великі функції-insns
Межа, що визначає дійсно великі функції. Для функцій, що перевищують цю межу
після вбудовування вбудовування обмежується --парам велика функція зростання, це
параметр корисний насамперед, щоб уникнути екстремального часу компіляції, викликаного не-
лінійні алгоритми, які використовуються бек-ендом. Значення за замовчуванням — 2700.

велика функція зростання
Визначає максимальне зростання великої функції, викликане вбудовуванням у відсотках. The
Значення за замовчуванням — 100, що обмежує зростання великої функції в 2.0 рази більше від початкового
розмір.

великий підрозділ-insns
Обмеження, що визначає велику одиницю перекладу. Зростання, викликане вбудовуванням одиниць
більше цієї межі обмежено --парам inline-unit-growth. Для невеликих одиниць
це може бути занадто жорстким (розглянемо одиницю, що складається з функції A, яка є вбудованою і
B, який просто викликає A тричі. Якщо B є малим відносно A, зростання одиниці
становить 300\%, і все ж таке вставлення є дуже розумним. Для дуже великих одиниць, що складаються з
невеликі нерозбірні функції, однак для цього необхідна загальна межа зростання одиниці
уникнути експоненційного вибуху розміру коду. Таким чином, для менших одиниць розмір
збільшилася до --парам великий підрозділ-insns перед застосуванням --парам inline-unit-growth.
За замовчуванням – 10000

inline-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане вбудовуванням. The
Значення за замовчуванням — 30, що обмежує зростання одиниці в 1.3 рази від початкового розміру.

ipcp-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане міжпроцедурними
постійне поширення. Значенням за замовчуванням є 10, що обмежує зростання одиниці до 1.1
разів більше початкового розміру.

великогабаритний каркас
Обмеження, що визначає великі кадри стека. Під час вбудовування алгоритм намагається
щоб не перевищувати цю межу занадто сильно. Значення за замовчуванням — 256 байт.

big-stack-frame-growth
Визначає максимальне зростання кадрів великого стека, викликане вбудовуванням у відсотках.
Значенням за замовчуванням є 1000, що обмежує зростання кадру великого стека в 11 разів
оригінальний розмір.

max-inline-insns-рекурсивний
max-inline-insns-recursive-auto
Вказує максимальну кількість інструкцій поза лінійною копією саморекурсивної вбудованої
функція може перерости в, виконуючи рекурсивне вбудовування.

Для функцій, оголошених inline --парам max-inline-insns-рекурсивний береться до уваги
рахунок. Для функції, не оголошеної вбудованою, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -O3) увімкнено і --парам max-inline-insns-
рекурсивно-автоматично використовується. Значення за замовчуванням — 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Вказує максимальну глибину рекурсії, яку використовує рекурсивне вбудовування.

Для функцій, оголошених inline --парам max-inline-recursive-depth береться до уваги
рахунок. Для функції, не оголошеної вбудованою, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -O3) увімкнено і --парам max-inline-recursive-
глибина-авто використовується. Значення за замовчуванням — 8.

min-inline-recursive-probability
Рекурсивне вбудовування вигідно лише для функції з глибокою рекурсією
середній і може зашкодити функції з невеликою глибиною рекурсії за рахунок збільшення
передайте розмір або складність тіла функції іншим оптимізаторам.

Коли доступний зворотній зв’язок профілю (див -fprofile-generate) фактична рекурсія
глибину можна вгадати з імовірності того, що функція буде рекурсувати через даний виклик
вираз. Цей параметр обмежує вбудовування лише викликом виразу who
ймовірність перевищує заданий поріг (у відсотках). Значення за замовчуванням – 10.

ранній інлайнінг-insns
Укажіть зростання, яке може досягти ранній інлайнер. Фактично це збільшує кількість
вбудовування для коду, що має великий штраф абстракції. Значення за замовчуванням – 10.

max-early-inliner-iterations
max-early-inliner-iterations
Межа ітерацій раннього інлайнера. Це в основному обмежує кількість вкладених
непрямі виклики раннього вбудована може розв’язувати. Більш глибокі ланцюги все ще обробляються пізно
підкладка.

comdat-sharing-probability
comdat-sharing-probability
Імовірність (у відсотках), що вбудована функція C++ з видимістю comdat буде
спільне для кількох компіляційних одиниць. Значення за замовчуванням – 20.

min-vect-loop-bound
Мінімальна кількість ітерацій, під час яких цикл не буде векторизовано
-ftree-vectorize використовується. Необхідна кількість ітерацій після векторизації
бути більшим за значення, зазначене цим параметром, щоб дозволити векторизацію. The
значення за замовчуванням 0.

gcse-cost-distance-rate
Коефіцієнт масштабування для обчислення максимальної відстані, на яку можна перемістити вираз
Оптимізація GCSE. Наразі це підтримується лише в перепустці підйому коду.
Чим більше коефіцієнт, тим агресивнішим буде підйом коду з простим
виразів, тобто виразів, вартість яких менше ніж gcse-unlimited-
коштувати. Якщо вказати 0, підняття простих виразів буде вимкнено. За замовчуванням
значення дорівнює 10.

gcse-unlimited-cost
Вартість, приблизно виміряна як вартість однієї типової машинної інструкції, у
які оптимізації GCSE не обмежуватимуть відстань, яку може подолати вираз.
Наразі це підтримується лише в перепустці підйому коду. Чим менша вартість,
тим більш агресивним буде підняття коду. Вказання 0 дозволить усім
вирази для подорожі на необмежені відстані. Значення за замовчуванням – 3.

максимальна глибина підйому
Глибина пошуку в дереві домінатора виразів для підняття. Це використовується
щоб уникнути квадратичної поведінки в алгоритмі підйому. Значення 0 дозволить уникнути
обмежує пошук, але може уповільнити компіляцію величезних функцій. За замовчуванням
значення дорівнює 30.

max-tail-merge-comparations
Максимальна кількість подібних bbs для порівняння bb. Це використовується, щоб уникнути
квадратична поведінка при злитті хвостів дерев. Значення за замовчуванням – 10.

max-tail-merge-iterations
Максимальна кількість ітерацій проходження функції. Це звикло
обмежити час компіляції під час злиття хвоста дерева. Значення за замовчуванням – 2.

max-unrolled-insns
Максимальна кількість інструкцій, яку повинен мати цикл, якщо цей цикл є
розгорнутий, і якщо цикл розгорнутий, він визначає, скільки разів код циклу
розгортається.

max-verage-unrolled-insns
Максимальна кількість інструкцій, упереджених ймовірностями їх виконання
цикл повинен мати, якщо ця петля розгорнута, а якщо петля розгорнута, вона
визначає, скільки разів розгортається код циклу.

максимальний час розгортання
Максимальна кількість розгортань однієї петлі.

max-peeled-insns
Максимальна кількість інструкцій, яку повинен мати цикл, якщо цей цикл вилучено,
і якщо цикл очищений, він визначає, скільки разів буде очищено код циклу.

максимальний час очищення
Максимальна кількість пілінгів однієї петлі.

max-fully-oled-insns
Максимальна кількість insns повністю відклеєної петлі.

максимальний час повного очищення
Максимальна кількість ітерацій циклу, яка підходить для повного пілінгу.

максимальна глибина гнізда повністю відклеїти петлю
Максимальна глибина петлевого гнізда підходить для повного відшаровування.

max-unswitch-insns
Максимальна кількість insns неперемкненого циклу.

максимальний рівень відключення
Максимальна кількість відгалужень, які не перемикаються в одному циклі.

lim-дорого
Мінімальна вартість дорогого виразу в циклі інваріантного руху.

iv-розглянути-всі-кандидати-пов'язані
Зв’язана з кількістю кандидатів на індукційні змінні нижче, ніж усі кандидати
розглядаються для кожного використання в оптимізації індукційної змінної. Тільки найбільше
відповідні кандидати розглядаються, якщо є більше кандидатів, щоб уникнути
квадратична часова складність.

iv-max-considered-use
Оптимізація змінної індукції відмовляється від циклів, які містять більше індукції
змінне використання.

iv-always-prune-can-set-bound
Якщо кількість кандидатів у наборі менше цього значення, ми завжди намагаємося
видалити непотрібні iv з набору під час його оптимізації, коли додається новий iv
до набору.

scev-max-expr-size
Зв’язано з розміром виразів, що використовуються в аналізаторі скалярних еволюцій. Великий
вирази сповільнюють аналізатор.

scev-max-expr-complexity
Зв'язано зі складністю виразів в аналізаторі скалярних еволюцій.
Складні вирази сповільнюють роботу аналізатора.

омега-макс-вари
Максимальна кількість змінних у системі обмежень Omega. Значення за замовчуванням
є 128.

омега-макс-гек
Максимальна кількість нерівностей в системі обмежень Омега. За замовчуванням
значення дорівнює 256.

омега-макс-екв
Максимальна кількість рівностей у системі обмежень Омега. Значення за замовчуванням
є 128.

omega-max-wild-cards
Максимальна кількість змінних підстановки, яку зможе розв’язувати Omega
вставити. Значення за замовчуванням – 18.

omega-hash-table-size
Розмір хеш-таблиці в вирішувачі Omega. Значення за замовчуванням — 550.

омега-макс-клавіші
Максимальна кількість ключів, використовуваних вирішувачем Omega. Значення за замовчуванням – 500.

омега-усунення зайвих обмежень
Якщо встановлено значення 1, використовуйте дорогі методи для усунення всіх зайвих обмежень. The
значення за замовчуванням 0.

vect-max-version-for-alignment-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
версій для вирівнювання у векторізаторі. Дивіться параметр ftree-vect-loop-version
для отримання додаткової інформації.

vect-max-version-for-alias-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
керування версіями для псевдоніма у векторізаторі. Дивіться параметр ftree-vect-loop-version для
більше інформації.

максимальна кількість ітерацій для відстеження
Максимальна кількість ітерацій циклу алгоритм грубої сили для аналізу
з # ітерацій циклу, який намагається оцінити.

hot-bb-count-fraction
Виберіть частку від максимальної кількості повторів основного блоку в програмі
даний базовий блок потрібно вважати гарячим.

hot-bb-frequency-fraction
Виберіть частку частоти виконання базового блоку введення
Функція даного базового блоку повинна вважатися гарячою.

максимальні передбачувані ітерації
Максимальна кількість ітерацій циклу ми прогнозуємо статично. Це корисно в
випадки, коли функція містить один цикл з відомим зв’язком та інший цикл з
невідомий. Ми прогнозуємо відоме число ітерацій правильно, а невідоме
Кількість ітерацій в середньому становить приблизно 10. Це означає, що цикл без
межі виглядали б штучно холодними відносно іншого.

align-threshold
Виберіть частку максимальної частоти виконання базового блоку у функції
даний базовий блок буде вирівняний.

align-loop-iterations
Цикл, який, як очікується, виконуватиме ітерацію, щоб не отримати вибрану кількість ітерацій
вирівняні.

tracer-dynamic-coverage
tracer-dynamic-coverage-feedback
Це значення використовується, щоб обмежити формування суперблоку один раз на заданий відсоток
виконані інструкції покриваються. Це обмежує непотрібне розширення розміру коду.

повне г, повне г,, показали, від, номер, XNUMX tracer-dynamic-coverage-feedback використовується лише тоді, коли є зворотній зв’язок профілю
доступний. Реальних профілів (на відміну від статично оцінених) багато
менш збалансований, завдяки чому порогове значення має більше значення.

tracer-max-code-growth
Припиніть дублювання хвоста, коли зростання коду досягне заданого відсотка. Це
доволі хибний аргумент, оскільки більшість дублікатів буде вилучено пізніше в крос
стрибки, тому його можна встановити на набагато вищі значення, ніж бажане зростання коду.

tracer-min-branch-ratio
Зупинити зворотне зростання, коли зворотна ймовірність кращого краю менша за цю
поріг (у відсотках).

tracer-min-branch-ratio
tracer-min-branch-rate-feedback
Зупинити зростання вперед, якщо кращий край має ймовірність нижчу за цю
поріг

Аналогічно до tracer-dynamic-coverage присутні два значення, одне для компіляції
для зворотного зв'язку профілю та один для компіляції без. Значення для компіляції
з профілем зворотний зв'язок має бути більш консервативним (вищим), щоб зробити
трасуючий ефект ефективний.

max-cse-path-length
Максимальна кількість базових блоків на шляху, що розглядається cse. За замовчуванням – 10.

max-cse-insns
Максимальні інструкції CSE обробляють перед змивом. За замовчуванням – 1000.

ggc-min-expand
GCC використовує збирач сміття для керування власним розподілом пам'яті. Цей параметр
визначає мінімальний відсоток, на який має бути купа збирача сміття
дозволено розширюватися між колекціями. Налаштування цього може покращити швидкість компіляції;
це не впливає на генерацію коду.

За замовчуванням – 30% + 70% * (ОЗУ/1 Гб) з верхньою межею 100%, коли ОЗУ >= 1 Гб.
Якщо «getrlimit» доступний, поняття «RAM» є найменшим із фактичної RAM і
"RLIMIT_DATA" або "RLIMIT_AS". Якщо GCC не може обчислити оперативну пам’ять на певному
платформи, використовується нижня межа 30%. Встановлення цього параметра і ggc-min-
купа до нуля спричиняє повне збирання при кожній нагоді. Це
надзвичайно повільний, але може бути корисним для налагодження.

ggc-min-heapsize
Мінімальний розмір купи збирача сміття, перш ніж він почне збирати
сміття. Перше збирання відбувається після того, як купа розширюється на ggc-min-expand%
За ggc-min-heapsize. Знову ж таки, налаштування може покращити швидкість компіляції та
не впливає на генерацію коду.

За замовчуванням є менший з RAM/8, RLIMIT_RSS або обмеження, яке намагається забезпечити
що RLIMIT_DATA або RLIMIT_AS не перевищено, але з нижньою межею 4096
(чотири мегабайти) і верхня межа 131072 (128 мегабайт). Якщо GCC не в змозі
для обчислення оперативної пам’яті на певній платформі використовується нижня межа. Налаштування цього
параметр дуже великий ефективно відключає збір сміття. Налаштування цього
параметр і ggc-min-expand до нуля спричиняє повне збирання на кожному
можливість.

max-reload-search-insns
Максимальна кількість перезавантажень інструкцій має бути еквівалентною
зареєструвати. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, трохи кращою продуктивністю. За замовчуванням
значення дорівнює 100.

max-cselib-memory-locations
Cselib має враховувати максимальну кількість місць пам’яті.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшитися з, ймовірно, трохи кращою продуктивністю. Значення за замовчуванням – 500.

reorder-blocks-duplicate
reorder-blocks-duplicate-feedback
Використовується базовим проходом переупорядкування блоків, щоб вирішити, чи використовувати безумовне розгалуження
або продублюйте код на місці призначення. Код дублюється, коли його оцінюють
розмір менше цього значення, помноженого на передбачуваний розмір безумовного
стрибати в гарячих точках програми.

повне г, повне г,, показали, від, номер, XNUMX reorder-block-duplicate-feedback використовується лише тоді, коли є зворотній зв’язок профілю
доступні і можуть бути встановлені на вищі значення, ніж reorder-block-duplicate з
інформація про гарячі точки більш точна.

max-sched-ready-insns
Максимальна кількість інструкцій, готових до видачі, має планувальник
розглянути в будь-який момент під час першого проходу планування. Збільшення значень
означають більш ретельний пошук, завдяки чому час компіляції збільшується на ймовірно
мало користі. Значення за замовчуванням – 100.

max-sched-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для міжблоку
планування. Значення за замовчуванням – 10.

max-pipeline-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для конвеєрної конвеєрної системи
вибірковий планувальник. Значення за замовчуванням – 15.

max-sched-region-insns
Максимальна кількість insns в регіоні, що розглядається для міжблоку
планування. Значення за замовчуванням – 100.

max-pipeline-region-insns
Максимальна кількість insns в регіоні, що розглядається для конвеєра в
вибірковий планувальник. Значення за замовчуванням – 200.

min-spec-prob
Мінімальна ймовірність (у відсотках) досягнення вихідного блоку для міжблоку
спекулятивне планування. Значення за замовчуванням — 40.

max-sched-extend-regions-iters
Максимальна кількість ітерацій через CFG для розширення регіонів. 0 - вимкнути
розширення регіону, N - зробити щонайбільше N ітерацій. Значення за замовчуванням – 0.

max-sched-insn-conflict-delay
Максимальна затримка конфлікту для insn, яка розглядається для спекулятивного руху.
Значення за замовчуванням - 3.

sched-spec-prob-cutoff
Мінімальна ймовірність успіху спекуляцій (у відсотках), тому спекулятивна
insn буде заплановано. Значення за замовчуванням – 40.

sched-mem-true-dep-cost
Мінімальна відстань (у циклах ЦП) між збереженням і завантаженням, націленим на ту саму пам'ять
місця розташування. Значення за замовчуванням – 1.

selsched-max-lookahead
Максимальний розмір вікна попереднього перегляду вибіркового планування. Це глибина
пошуку доступних інструкцій. Значення за замовчуванням – 50.

selsched-max-sched-times
Максимальна кількість разів, коли інструкція буде запланована під час вибіркового
планування. Це обмеження на кількість ітерацій, через які
інструкція може бути конвеєрною. Значення за замовчуванням – 2.

selsched-max-insns-to-rename
Максимальна кількість найкращих інструкцій у готовому списку, які розглядаються
перейменування в селективному планувальнику. Значення за замовчуванням – 2.

sms-min-sc
Мінімальне значення кількості етапів, яке буде генерувати планувальник swing modulo. The
значення за замовчуванням 2.

max-last-value-rtl
Максимальний розмір, що вимірюється як кількість RTL, які можна записати у виразі
в комбінаторі для псевдорегістра як останнього відомого значення цього регістра. The
за замовчуванням - 10000.

ліміт цілочисельної частки
Малі цілі константи можуть використовувати спільну структуру даних, зменшуючи компілятор
використання пам'яті та збільшення її швидкості. Це встановлює максимальне значення спільного доступу
ціла константа. Значення за замовчуванням – 256.

min-virtual-mappings
Вказує мінімальну кількість віртуальних зіставлень у інкрементному засобі оновлення SSA
який має бути зареєстрований, щоб ініціювати евристику віртуальних відображень, визначену
співвідношення віртуальних відображень. Значення за замовчуванням – 100.

співвідношення віртуальних відображень
Якщо кількість віртуальних відображень більше, ніж число
віртуальних символів, які потрібно оновити, то інкрементальний засіб оновлення SSA перемикається на a
повне оновлення для цих символів. Коефіцієнт за замовчуванням дорівнює 3.

ssp-буфер-розмір
Мінімальний розмір буферів (тобто масивів), які будуть розбиті стек
захист, коли -fstack-захист використовується.

За замовчуванням до Ubuntu 10.10 було "8". Зараз це "4", щоб збільшити
кількість функцій, захищених захистом стека.

max-jump-thread-duplication-stmts
Максимальна кількість операторів, дозволених у блоці, яку потрібно продублювати, коли
стрибки нарізки.

max-fields-for-field-sensitive
Максимальна кількість полів у структурі, яку ми будемо обробляти з урахуванням поля
під час аналізу покажчика. За замовчуванням – нуль для -O0, а -O1 і 100 для -Os,
-O2 і -O3.

затримка попередньої вибірки
Оцініть середню кількість інструкцій, які виконуються перед попередньою вибіркою
закінчується. Відстань, яку ми попередньо вибираємо, пропорційна цій константі.
Збільшення цієї кількості також може призвести до попередньої завантаження менше потоків (див
одночасні попередні вибірки).

одночасні попередні вибірки
Максимальна кількість попередніх вибірок, які можуть виконуватися одночасно.

l1-кеш-ряд-розмір
Розмір рядка кешу в кеші L1, в байтах.

l1-розмір кешу
Розмір кешу L1, в кілобайтах.

l2-розмір кешу
Розмір кешу L2, в кілобайтах.

відношення min-insn-to-prefetch-rate
Мінімальне співвідношення між кількістю інструкцій і кількістю попередніх вибірок
щоб увімкнути попередню вибірку в циклі.

відношення prefetch-min-insn-to-mem
Мінімальне співвідношення між кількістю інструкцій і кількістю пам'яті
посилання, щоб увімкнути попередню вибірку в циклі.

use-canonical-types
Чи повинен компілятор використовувати систему "канонічних" типів. За замовчуванням це
завжди має бути 1, що використовує більш ефективний внутрішній механізм для порівняння
типи в C++ і Objective-C++. Однак, якщо в системі канонічних типів є помилки
спричиняючи помилки компіляції, встановіть це значення на 0, щоб вимкнути канонічні типи.

switch-conversion-max-branch-ratio
Перетворення ініціалізації перемикача відмовиться створювати масиви, більші ніж
switch-conversion-max-branch-ratio помножена на кількість гілок в комутаторі.

максимальна часткова-анти-довжина
Максимальна довжина часткового античного набору, обчислена під час часткового дерева
оптимізація усунення надмірності (-Free-pre) при оптимізації на -O3 і вище.
Для деяких видів вихідного коду розширене усунення часткової надмірності
оптимізація може втекти, споживаючи всю доступну пам'ять на хості
машина. Цей параметр встановлює обмеження на довжину обчислюваних наборів,
що запобігає втечі. Установлення значення 0 для цього параметра
дозволити необмежену встановлену довжину.

sccvn-max-scc-size
Максимальний розмір сильно зв'язаного компонента (SCC) під час обробки SCCVN. Якщо
це обмеження досягнуто, обробка SCCVN для всієї функції не буде виконана і
оптимізації залежно від нього буде вимкнено. Максимальний розмір SCC за замовчуванням становить
10000.

ira-max-loops-num
IRA за замовчуванням використовує розподіл регіональних реєстрів. Якщо функція містить більше
циклів, ніж число, задане цим параметром, лише не більше заданої кількості
найбільш часто виконувані цикли утворюють регіони для розміщення регіональних реєстрів.
Значення параметра за замовчуванням — 100.

ira-max-conflict-table-size
Хоча IRA використовує складний алгоритм для стиснення таблиці конфліктів,
таблиця все ще може вимагати надмірного обсягу пам'яті для величезних функцій. Якщо
Таблиця конфліктів для функції може бути більше розміру в МБ, зазначеного цим
параметр, розподільник регістрів замість цього використовує швидший, простіший і менший
якісний алгоритм, який не вимагає побудови таблиці конфліктів псевдореєстрів.
Значення параметра за замовчуванням — 2000.

ira-loop-reserved-regs
IRA можна використовувати для оцінки більш точного тиску регістра в циклах прийняття рішень
для переміщення інваріантів циклу (див -O3). Зарезервована кількість доступних реєстрів
деякі інші цілі дає цей параметр. Значення за замовчуванням
Параметр дорівнює 2, що є мінімальною кількістю регістрів, необхідних типовому
інструкції. Це значення є найкращим, знайденим у численних експериментах.

loop-invariant-max-bbs-in-loop
Інваріантний рух циклу може бути дуже дорогим як під час компіляції, так і в
обсяг необхідної пам'яті під час компіляції, з дуже великими циклами. Петлі з більше
базові блоки, ніж цей параметр, не матимуть циклічної інваріантної оптимізації руху
виконано на них. Значення параметра за замовчуванням становить 1000 для -O1 і 10000
для -O2 і вище.

loop-max-datarefs-for-datadeps
Побудова залежностей даних коштує дорого для дуже великих циклів. Цей параметр
обмежує кількість посилань на дані в циклах, які розглядаються для даних
аналіз залежності. Ці великі петлі не будуть оброблятися тоді
оптимізації з використанням циклічних залежностей даних. Значення за замовчуванням – 1000.

max-vartrack-size
Встановлює максимальну кількість слотів хеш-таблиці для використання під час потоку даних відстеження змінних
аналіз будь-якої функції. Якщо цей ліміт перевищено зі змінним відстеженням на
призначення увімкнено, аналіз для цієї функції повторюється без нього, після
видалення всіх налагоджувальних insns з функції. Якщо ліміт перевищено навіть без
debug insns, аналіз відстеження змінних параметрів повністю вимкнено для функції.
Установлення параметра на нуль робить його необмеженим.

max-vartrack-expr-depth
Встановлює максимальну кількість рівнів рекурсії під час спроби відобразити імена змінних або
налагоджувати тимчасові значення виразів. Це замінює час компіляції на більше
повна інформація про налагодження. Якщо для цього параметра встановлено занадто низький рівень, значення виразів
доступний і може бути представлений в налагоджувальної інформації, може в кінцевому підсумку не використовуватися;
встановлення цього вище може дозволити компілятору знайти більш складне налагодження
виразів, але час компіляції та використання пам’яті може зрости. За замовчуванням – 12.

min-nondebug-insn-uid
Використовуйте uids, починаючи з цього параметра, для nondebug insns. Діапазон нижче
Параметр зарезервований виключно для налагоджувальних insns, створених
-fvar-tracking-assignments, але debug insns можуть отримати (не перекриваються) uid вище
якщо зарезервований діапазон вичерпано.

ipa-sra-ptr-фактор росту
IPA-SRA замінить покажчик на агрегат одним або кількома новими параметрами
тільки тоді, коли їх сукупний розмір менший або дорівнює ipa-sra-ptr-фактор росту
разів більше розміру вихідного параметра покажчика.

tm-max-aggregate-size
Під час створення копій локальних змінних потоку в транзакції цей параметр
визначає розмір у байтах, після якого змінні будуть збережені разом із журналом
функції на відміну від збереження/відновлення пар кодової послідовності. Тільки цей варіант
застосовується при використанні -fgnu-tm.

graphite-max-nb-scop-params
Щоб уникнути експоненційних ефектів у перетвореннях циклу Graphite, кількість
параметри статичної контрольної частини (SCoP) обмежені. Значення за замовчуванням – 10
параметри. Змінна, значення якої невідоме під час компіляції та визначене
за межами SCoP є параметром SCoP.

graphite-max-bbs-per-function
Щоб уникнути експоненційних ефектів при виявленні SCoP, розмір функцій
аналізований Графіт обмежений. Значення за замовчуванням — 100 базових блоків.

loop-block-tile-size
Блокування циклів або трансформації видобутку смуги, увімкнені за допомогою -флоп-блок or
-floop-strip-mine, вилучіть кожну петлю в гнізді петлі на задану кількість
ітерації. Довжину смуги можна змінити за допомогою loop-block-tile-size
параметр. Значення за замовчуванням — 51 ітерація.

ipa-cp-value-list-size
IPA-CP намагається відстежити всі можливі значення та типи, передані функції
параметр, щоб поширити їх і виконати девіртуалізацію. ipa-cp-value-
розмір списку – максимальна кількість значень і типів, які він зберігає на один формаль
параметр функції.

lto-перегородки
Вкажіть потрібну кількість розділів, створених під час компіляції WHOPR. The
кількість розділів має перевищувати кількість ЦП, що використовуються для компіляції. The
значення за замовчуванням 32.

lto-minpartition
Розмір мінімального розділу для WHOPR (в орієнтовних інструкціях). Це запобігає
витрати на розбиття дуже малих програм на занадто багато розділів.

cxx-max-namespaces-for-diagnostic-help
Максимальна кількість просторів імен, до яких можна отримати пропозиції під час пошуку імен C++
не вдається для ідентифікатора. За замовчуванням – 1000.

частота-порогове значення
Максимальна відносна частота виконання (у відсотках) цільового блоку
відносно вихідного блоку оператора, щоб дозволити поглинання оператора a
заяву. Більші цифри призводять до більш агресивних заяв. The
значення за замовчуванням дорівнює 75. Невелике позитивне коригування застосовується для операторів з
операнди пам'яті, оскільки вони ще більш вигідні, тому зменшуються.

максимум магазинів до раковини
Максимальна кількість умовних пар сховищ, які можна потопити. Встановіть 0 якщо
або векторизація (-ftree-vectorize) або якщо-перетворення (-ftree-loop-if-convert)
вимкнено. За замовчуванням – 2.

дозволити завантаження даних
Дозволити оптимізаторам вводити нові перегони даних на навантаженнях. Встановіть 1, щоб дозволити,
інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена ​​неявно
-fmemory-model= варіант.

дозволити-зберігати-дані гонки
Дозвольте оптимізаторам запроваджувати нові перегони даних у магазинах. Встановіть 1, щоб дозволити,
інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена ​​неявно
-fmemory-model= варіант.

дозволити-упаковані-завантаження-перегони даних
Дозвольте оптимізаторам запроваджувати нові перегони даних для завантажених даних. Встановіть 1 до
дозволити, інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена
la -fmemory-model= варіант.

дозволити-упаковані-зберігати-дані гонки
Дозвольте оптимізаторам запроваджувати нові гонки даних у сховищах упакованих даних. Встановіть 1 до
дозволити, інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена
la -fmemory-model= варіант.

регістр значень-поріг
Найменша кількість різних значень, для яких найкраще використовувати таблицю переходів
замість дерева умовних гілок. Якщо значення дорівнює 0, використовуйте значення за замовчуванням для
машина. За замовчуванням – 0.

tree-reassoc-width
Встановіть максимальну кількість інструкцій, що виконуються паралельно в повторно асоційованому дереві.
Цей параметр перевизначає залежну від цільової евристики, яка використовується за замовчуванням, якщо не має
нульове значення.

опції Управління la Препроцесор
Ці параметри керують препроцесором C, який запускається на кожному вихідному файлі C перед фактичним
складання.

Якщо ви використовуєте -E опція, нічого не робиться, крім попередньої обробки. Деякі з цих варіантів
мають сенс тільки разом з -E оскільки вони викликають вихід препроцесора
непридатний для фактичного складання.

-Wp,варіант
Ви можете використовувати -Wp,варіант щоб обійти драйвер компілятора і пройти варіант безпосередньо через
до препроцесора. Якщо варіант містить коми, він розділений на кілька варіантів на
коми. Однак багато варіантів змінюються, перекладаються або інтерпретуються
драйвер компілятора перед передачею в препроцесор, і -Wp примусово обходить
цю фазу. Прямий інтерфейс препроцесора недокументований і підлягає
змінювати, тому по можливості уникайте використання -Wp і нехай водій впорається
замість цього.

-Xpreprocessor варіант
Проходити варіант як опція для препроцесора. Ви можете використовувати це для забезпечення системи-
конкретні параметри препроцесора, які GCC не знає, як розпізнати.

Якщо ви хочете передати параметр, який приймає аргумент, ви повинні використовувати -Xpreprocessor
двічі, один раз для варіанту і один раз для аргументу.

-D ім'я
Попередньо визначити ім'я як макрос, з визначенням 1.

-D ім'я=визначення
Вміст визначення маркуються та обробляються так, ніби вони з’явилися під час
третій етап перекладу в а #визначити директива. Зокрема, визначення буде
скорочено за допомогою вбудованих символів нового рядка.

Якщо ви викликаєте препроцесор з оболонки або програми, подібної до оболонки, вам може знадобитися
використовувати синтаксис цитування оболонки для захисту таких символів, як пробіли, які мають a
значення в синтаксисі оболонки.

Якщо ви хочете визначити функціональний макрос у командному рядку, напишіть його аргумент
список з оточуючими дужками перед знаком рівності (якщо є). Дужки є
значуще для більшості оболонок, тому вам потрібно буде процитувати параметр. З sh і CSH,
-D'ім'я(аргументи...)=визначення' працює.

-D і -U параметри обробляються в тому порядку, в якому вони вказані в командному рядку. всі
-макроси файл і -включати файл опції все-таки обробляються -D і -U Варіанти.

-U ім'я
Скасуйте будь-яке попереднє визначення ім'я, вбудований або забезпечений a -D варіант.

-undef
Не встановлюйте заздалегідь жодні макроси, специфічні для системи чи GCC. Стандарт наперед визначений
макроси залишаються визначеними.

-I реж
Додайте каталог реж до списку каталогів для пошуку заголовних файлів.
Довідники за ім -I шукаються до того, як стандартна система включає каталоги.
Якщо каталог реж є стандартним системним каталогом включення, параметр ігнорується
переконайтеся, що порядок пошуку за замовчуванням для системних каталогів і спеціальний режим
системних заголовків не переможеться. Якщо реж починається з "=", потім "=" буде
замінено на префікс sysroot; побачити --sysroot і -isysroot.

-o файл
Записати вихід до файл. Це те саме, що вказувати файл як другий не варіант
аргумент до cpp. ПКУ має іншу інтерпретацію другого аргументу без варіантів,
тому ви повинні використовувати -o щоб вказати вихідний файл.

-Стінка
Вмикає всі додаткові попередження, які є бажаними для звичайного коду. На даний момент це
is -Коментар, -Втриграфи, -Wmultichar і попередження про цілочисельне просування, що спричиняє a
зміна знака у виразах "#if". Зауважте, що багато попереджень препроцесора
увімкнені за замовчуванням і не мають можливості керувати ними.

-Коментар
-W коментарі
Попереджати щоразу, коли послідовність коментарів-початків /* з'являється в а /* коментар або будь-коли a
зворотний слеш-новий рядок з’являється в a // коментар. (Обидві форми мають однаковий ефект.)

-Втриграфи
Більшість триграфів у коментарях не можуть вплинути на зміст програми. Однак а
триграф, який утворює екранований новий рядок (??/ в кінці рядка) can, by
зміни місця початку або кінця коментаря. Тому лише триграфи, які б утворювали
екрановані символи нового рядка створюють попередження всередині коментаря.

Цей варіант мається на увазі -Стінка. Якщо -Стінка не надано, ця опція все ще активна
якщо триграфи не включені. Щоб отримати перетворення триграфа без попереджень, але отримати
інші -Стінка попередження, використання -триграфи -Стінка -Wno-триграфи.

-Традиційний
Попереджати про певні конструкції, які поводяться по-різному в традиційних і ISO C. Також
попереджати про конструкції ISO C, які не мають традиційного еквіваленту C, і є проблематичними
конструкції, яких слід уникати.

-Вундеф
Попереджати кожного разу, коли ідентифікатор, який не є макросом, зустрічається в файлі # якщо Директива,
поза певний. Такі ідентифікатори замінюються на нуль.

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

Вбудовані макроси, макроси, визначені в командному рядку, і макроси, визначені в include
файли не попереджуються.

Примітка: Якщо макрос насправді використовується, але використовується лише в пропущених умовних блоках, то
CPP повідомить про це як невикористане. Щоб уникнути попередження в такому випадку, ви можете покращити
область визначення макросу, наприклад, переміщаючи його в перший пропущений
блокувати. Крім того, ви можете надати фіктивне використання щось на кшталт:

#якщо визначено_макро_викликає_попередження
#endif

-Етикетки Wendif
Попереджати, коли an #else або #endif після них текст. Зазвичай це відбувається в
код форми

#якщо FOO
...
#інше FOO
...
#endif FOO

Друге і третє «FOO» мають бути в коментарях, але часто їх немає в старих програмах.
Це попередження ввімкнено за замовчуванням.

- Помилка
Зробіть усі попередження серйозними помилками. Буде вихідний код, який ініціює попередження
відхилено.

-Wsystem-headers
Видавати попередження для коду в системних заголовках. Зазвичай вони не допомагають знайти
помилки у вашому власному коді, тому пригнічені. Якщо ви відповідаєте за систему
бібліотеки, ви можете їх побачити.

-w Вимкнути всі попередження, включаючи ті, які GNU CPP видає за замовчуванням.

- педантичний
Видайте всю обов’язкову діагностику, зазначену в стандарті C. Деякі з них залишилися
за замовчуванням, оскільки вони часто запускаються на нешкідливому коді.

-педантичні помилки
Видайте всю обов’язкову діагностику і перетворите всю обов’язкову діагностику на помилки.
Це включає обов’язкову діагностику, без якої проблеми GCC - педантичний але трактує як
попередження.

-M Замість виведення результату попередньої обробки виведіть правило, яке підходить для зробити
опис залежностей основного вихідного файлу. Препроцесор виводить один
зробити правило, що містить назву об’єктного файлу для цього вихідного файлу, двокрапку та імена
всіх включених файлів, включаючи ті, що надходять з -включати or -макроси команда
параметри лінії.

Якщо не вказано явно (з -MT or -MQ), ім'я об'єктного файлу складається з
ім'я вихідного файлу з будь-яким суфіксом замінено суфіксом об'єктного файлу та будь-яким
провідні частини каталогу видалено. Якщо включено багато файлів, то правило таке
розділити на кілька рядків за допомогою \-новий рядок. Правило не має команд.

Цей параметр не пригнічує вихідні дані налагодження препроцесора, наприклад -дМ. Уникати
змішуючи такий вихід налагодження з правилами залежностей, ви повинні явно вказати
вихідний файл залежностей з -MF, або використовуйте змінну середовища, наприклад
DEPENDENCIES_OUTPUT. Вихід налагодження все одно буде надіслано до звичайного вихідного потоку як
Normal.

Проходження -M для водія має на увазі -E, і пригнічує попередження з неявним -w.

-ММ Люблю -M але не згадуйте файли заголовків, які знаходяться в системних каталогах заголовків,
а також файли заголовків, які включені, прямо чи опосередковано, з такого заголовка.

Це означає, що вибір кутових дужок або подвійних лапок в an #включати
Директива сама по собі не визначає, чи буде цей заголовок відображатися в -ММ
вихід залежностей. Це незначна зміна семантики порівняно з GCC версії 3.0 і
раніше.

-MF файл
При використанні з -M or -ММ, визначає файл для запису залежностей. Якщо ні -MF
надається комутатор, препроцесор надсилає правила туди, куди він надсилав би
попередньо оброблений вихід.

При використанні з параметрами драйвера -MD or -MMD, -MF перевизначає залежність за замовчуванням
вихідний файл.

-МГ У поєднанні з таким варіантом, як -M запит на створення залежностей, -МГ передбачає
відсутні заголовні файли створюються файлами і додає їх до списку залежностей без
викликаючи помилку. Ім'я файлу залежності береться безпосередньо з "#include"
директиву без передавання шляху. -МГ також пригнічує попередньо оброблений вихід, як a
відсутність заголовного файлу робить це марним.

Ця функція використовується для автоматичного оновлення make-файлів.

- депутат Цей параметр наказує CPP додати фальшиву ціль для кожної залежності, крім
main файл, через що кожен ні від чого не залежить. Ці фіктивні правила обходять помилки
зробити дає, якщо ви видалите файли заголовків без оновлення файлу Makefile підходити.

Це типовий вихід:

test.o: test.c test.h

test.h:

-MT мета
Змініть ціль правила, створеного генерацією залежностей. За замовчуванням CPP приймає
ім'я основного вхідного файлу, видаляє будь-які компоненти каталогу та будь-який суфікс файлу
такий як .c, і додає звичайний суфікс об’єкта платформи. Результат - мета.

An -MT параметр встановить цільовий рядок, який ви вкажете. Якщо хочеш
кількох цілей, ви можете вказати їх як один аргумент -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 -MF файл, крім цього -E не мається на увазі. Водій
визначає файл на основі того, чи є an -o надається варіант. Якщо так, драйвер використовує його
аргумент, але з суфіксом of .d, інакше він приймає назву вхідного файлу,
видаляє всі компоненти каталогу та суфікс і застосовує a .d суфікс.

If -MD використовується разом з -E, будь-який -o Перемикач розуміється для вказівки
вихідний файл залежностей, але якщо використовується без нього -E, кожен -o розуміється як вказівка ​​a
цільовий об'єктний файл.

З -E не мається на увазі, -MD можна використовувати для створення вихідного файлу залежностей як a
побічний ефект процесу компіляції.

-MMD
Люблю -MD за винятком згадки лише файлів заголовків користувача, а не системних файлів заголовків.

-fpch-deps
При використанні попередньо скомпільованих заголовків цей прапор спричиняє прапорці виведення залежностей
також перелік файлів із залежностей попередньо скомпільованого заголовка. Якщо тільки не вказано
буде перераховано попередньо скомпільований заголовок, а не файли, які були використані для його створення
оскільки ці файли не переглядаються, коли використовується попередньо скомпільований заголовок.

-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 приймалися a -язик варіант, який вибрав обидва
мови та рівня відповідності стандартам. Цю опцію вилучено, тому що
це конфліктує з -l варіант.

-std =standard
-ansi
Вкажіть стандарт, якому повинен відповідати код. Наразі CPP знає про C
і стандарти C++; інші можуть бути додані в майбутньому.

standard може бути одним із:

"c90"
"c89"
"iso9899:1990"
Стандарт ISO C з 1990 року. c90 є звичайним скороченням для цієї версії
стандарт.

повне г, повне г,, показали, від, номер, XNUMX -ansi опція еквівалентна -std=c90.

"iso9899:199409"
Стандарт C 1990 року зі змінами 1994 року.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Переглянутий стандарт ISO C, опублікований у грудні 1999 року. До публікації це
був відомий як C9X.

"iso9899:2011"
"c11"
"c1x"
Переглянутий стандарт ISO C, опублікований у грудні 2011 року. До публікації це
був відомий як C1X.

"gnu90"
"gnu89"
Стандарт C 1990 року плюс розширення GNU. Це значення за замовчуванням.

"gnu99"
"gnu9x"
Стандарт C 1999 року плюс розширення GNU.

"gnu11"
"gnu1x"
Стандарт C 2011 року плюс розширення GNU.

"c++98"
Стандарт ISO C++ 1998 року з поправками.

"gnu++98"
Такий же як і -std=c++98 плюс розширення GNU. Це значення за замовчуванням для коду C++.

-Я- Розділіть шлях включення. Будь-які каталоги, зазначені в -I варіанти раніше -Я- він має
шукав лише заголовки із запитом "#include"файл""; їх не шукають
"#включатифайл>". Якщо додаткові каталоги вказані з -I варіанти після
-Я-, ці каталоги шукаються для всіх #включати директиви.

Крім того, -Я- забороняє використання каталогу поточного каталогу файлів як
перший каталог пошуку для "#include"файл"". Цей параметр не підтримується.

-nostdinc
Не шукайте заголовні файли в стандартних системних каталогах. Тільки каталоги
ви вказали з -I параметри (і каталог поточного файлу, якщо
відповідні) розшукуються.

-nostdinc++
Не шукайте файли заголовків у стандартних каталогах C++, але все одно робіть це
пошук в інших стандартних каталогах. (Цей параметр використовується при створенні C++
бібліотека.)

-включати файл
Процес файл ніби "#include "file"" з'явився як перший рядок основного джерела
файл. Однак перший каталог шукав файл чи працює препроцесор
каталог замість of каталог, що містить основний вихідний файл. Якщо не знайдено
там він шукається в решті ланцюга пошуку "#include "..."" як
Normal.

Якщо кілька -включати наведені параметри, файли включаються в порядку їх
з'являються в командному рядку.

-макроси файл
Точно так само -включати, за винятком будь-якого результату сканування файл кидається
далеко. Макроси, які він визначає, залишаються визначеними. Це дозволяє отримати всі макроси
із заголовка без обробки його декларацій.

Усі файли, визначені -макроси обробляються перед усіма файлами, зазначеними в -включати.

-idirafter реж
Пошук реж для заголовних файлів, але зробіть це після всі каталоги, зазначені в -I і
стандартні системні каталоги вичерпані. реж розглядається як система включає
каталог. Якщо реж починається з "=", потім "=" буде замінено на sysroot
префікс; побачити --sysroot і -isysroot.

-іпрефікс префікс
Вказувати префікс як префікс для наступних -iз префіксом варіанти. Якщо префікс
представляє каталог, ви повинні включити final /.

-iз префіксом реж
-iwithprefixbefore реж
Додавати реж до префікса, зазначеного раніше з -іпрефікс, і додайте отримане
каталог до шляху пошуку включення. -iwithprefixbefore ставить його на те саме місце -I
б; -iз префіксом кладе куди -idirafter б.

-isysroot реж
Цей варіант схожий на --sysroot параметр, але застосовується лише до заголовних файлів (крім
Цілі Дарвіна, де це стосується як заголовних файлів, так і бібліотек). Див
--sysroot варіант для отримання додаткової інформації.

-мультиліб реж
використання реж як підкаталог каталогу, що містить цільові заголовки C++.

-ісистема реж
Пошук реж для заголовних файлів після всіх каталогів, зазначених у -I але перед
стандартні системні каталоги. Позначте його як системний каталог, щоб він отримав те саме
спеціальний режим, який застосовується до стандартних системних каталогів. Якщо реж починається
за допомогою "=", тоді "=" буде замінено префіксом sysroot; побачити --sysroot і
-isysroot.

- цитата реж
Пошук реж лише для заголовних файлів, запитуваних із "#include"файл""; вони не
шукав "#includeфайл>", перед усіма каталогами, зазначеними в -I і перед
стандартні системні каталоги. Якщо реж починається з "=", потім "=" буде замінено на
префікс sysroot; побачити --sysroot і -isysroot.

-fdirectives-only
Під час попередньої обробки обробляйте директиви, але не розгортайте макроси.

Поведінка опції залежить від -E і -fпопередньо оброблено Варіанти.

з -E, попередня обробка обмежується обробкою таких директив, як "#define",
"#ifdef" і "#error". Інші операції препроцесора, такі як розширення макросу та
перетворення триграфа не виконуються. Крім того, -dD варіант неявно
включений.

з -fпопередньо оброблено, попереднє визначення командного рядка та більшості вбудованих макросів
інвалід. Обробляються макроси, такі як "__LINE__", які залежать від контексту
нормально. Це дозволяє компілювати файли, попередньо оброблені за допомогою «-E
-fdirectives-only".

З обома -E і -fпопередньо оброблено, правила для -fпопередньо оброблено мати пріоритет. Це
дозволяє повну попередню обробку файлів, попередньо оброблених за допомогою «-E
-fdirectives-only".

-fdollars-in-identifiers
приймати $ в ідентифікаторах.

-fextended-ідентифікатори
Приймайте універсальні імена символів в ідентифікаторах. Цей варіант є експериментальним; в
майбутньої версії GCC, вона буде ввімкнена за замовчуванням для C99 і C++.

-fпопередньо оброблено
Повідомте препроцесору, що вхідний файл уже попередньо оброблено. Це
пригнічує такі речі, як розширення макросу, перетворення триграфа, уникнення з’єднання нового рядка,
та обробка більшості директив. Препроцесор все ще розпізнає та видаляє
коментарів, щоб ви могли передати файл, попередньо оброблений з -C компілятору без
проблеми. У цьому режимі вбудований препроцесор є трохи більше, ніж токенізатором
для передніх кінців.

-fпопередньо оброблено є неявним, якщо вхідний файл має одне з розширень .i, .ii or .mi.
Це розширення, які GCC використовує для попередньо оброблених файлів, створених за допомогою -зберігати темп.

-ftabstop=ширина
Встановіть відстань між табуляторами. Це допомагає препроцесору звітувати про правильний стовпець
цифри в попередженнях або помилках, навіть якщо в рядку з’являються вкладки. Якщо значення менше
більше 1 або більше 100, параметр ігнорується. За замовчуванням – 8.

-fdebug-cpp
Цей параметр корисний лише для налагодження GCC. При використанні з -E, скидає налагодження
інформація про карти розташування. Кожному маркеру у виводі передує дамп
карті, до якої належить його місцезнаходження. Дамп карти, що містить місцезнаходження маркера
було б:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"М": ;"E": ,"loc": }

При використанні без -E, ця опція не діє.

-ftrack-macro-expansion[=рівень]
Відстежуйте розташування маркерів у макророзширеннях. Це дозволяє компілятору випромінювати
діагностика поточного стека розширення макросів, коли виникає помилка компіляції
макророзширення. Використання цієї опції споживає препроцесор і компілятор
більше пам'яті. The рівень Параметр можна використовувати для вибору рівня точності маркера
відстеження розташування, що зменшує споживання пам'яті, якщо це необхідно. Значення 0 of
рівень деактивує цю опцію, як ніби ні -ftrack-macro-expansion був присутній на
командний рядок. Значення 1 відстежує розташування маркерів у деградованому режимі заради
мінімальні витрати на пам'ять. У цьому режимі всі токени, отримані в результаті розширення an
аргумент функціонального макросу мають те саме розташування. Значення 2 відстежує маркери
локації повністю. Це значення найбільше потребує пам’яті. Коли надається ця опція
немає аргументу, значення параметра за замовчуванням таке 2.

-fexec-charset=набір
Встановити набір символів виконання, який використовується для рядкових і символьних констант. За замовчуванням
це UTF-8. набір може бути будь-яке кодування, яке підтримується системною бібліотекою "iconv".
рутина.

-fwide-exec-charset=набір
Встановити широкий набір символів виконання, який використовується для широкого рядка та символьних констант.
За замовчуванням є UTF-32 або UTF-16, залежно від того, що відповідає ширині "wchar_t". Як
з -fexec-charset, набір може бути будь-яке кодування, яке підтримується системним "iconv"
бібліотечна рутина; однак у вас виникнуть проблеми з кодуваннями, які не підходять
саме в "wchar_t".

-finput-charset=набір
Встановити вхідний набір символів, який використовується для перекладу з набору символів введення
файл у вихідний набір символів, який використовується GCC. Якщо мова не вказана, або GCC
не можна отримати цю інформацію з локалі, за замовчуванням є UTF-8. Це може бути
перевизначено місцевим стандартом або цим параметром командного рядка. Наразі команда
Параметр рядка має пріоритет, якщо є конфлікт. набір може бути будь-яке кодування
підтримується системною бібліотечною процедурою "iconv".

-fworking-directory
Увімкнути генерацію лінійних маркерів у виводі препроцесора, що дозволить компілятору
знати поточний робочий каталог на момент попередньої обробки. Коли ця опція є
увімкнено, препроцесор видаватиме після початкового маркера другий маркер
з поточним робочим каталогом, за яким слідують дві косі риски. GCC скористається цим
каталог, якщо він присутній у попередньо обробленому вводі, як каталог, створений як
поточний робочий каталог у деяких форматах налагоджувальної інформації. Цей варіант є
неявно ввімкнено, якщо ввімкнено інформацію про налагодження, але це можна заблокувати за допомогою
заперечену форму -fno-working-directory, Якщо -P прапор присутній у команді
line, ця опція не має ефекту, оскільки жодні директиви "#line" не випускаються.

-fno-show-column
Не друкуйте номери стовпців у діагностиці. Це може знадобитися, якщо проводиться діагностика
сканується програмою, яка не розуміє номерів стовпців, наприклад
dejagnu.

-A присудок=відповідь
Складіть твердження з присудком присудок і відповісти відповідь. Ця форма є
віддає перевагу старшій формі -A присудок(відповідь), який досі підтримується, оскільки він
не використовує спеціальні символи оболонки.

-A -присудок=відповідь
Скасуйте твердження з присудком присудок і відповісти відповідь.

-dCHARS
ЧИСЛИ є послідовністю одного або кількох із наступних символів, і не має бути таким
передує пробіл. Інші символи інтерпретуються власне компілятором або
зарезервовані для майбутніх версій GCC, і тому ігноруються. Якщо вказати
персонажів, поведінка яких конфліктує, результат не визначено.

M Замість звичайного виводу створіть список #визначити директиви для всіх
макроси, визначені під час виконання препроцесора, включаючи попередньо визначені
макроси. Це дає вам спосіб дізнатися, що попередньо визначено у вашій версії
препроцесор. Припустимо, що у вас немає файлу foo.h, команда

торкніться foo.h; cpp -dM foo.h

покаже всі заздалегідь визначені макроси.

Якщо ви використовуєте -дМ без того -E варіант -дМ трактується як синонім до
-fdump-rtl-mach.

D Люблю M за винятком двох аспектів: так НЕ включити попередньо визначені макроси, і це
виходи обидва la #визначити директиви та результат попередньої обробки. Обидва види
вихідних даних перейдіть до стандартного вихідного файлу.

N Люблю D, але видавати лише імена макросів, а не їх розширення.

I Вихід #включати директиви на додаток до результату попередньої обробки.

U Люблю D за винятком лише макросів, які розгортаються або чия визначеність перевіряється
у директивах препроцесора виводяться; вихід відкладається до використання або
тест макросу; і #undef директиви також виводяться для перевірених макросів, але
на той час не визначено.

-P Заборонити генерацію лінійних маркерів на виході з препроцесора. Це може бути
корисно під час запуску препроцесора на щось, що не є кодом C, і буде надіслано
до програми, яку можуть сплутати маркери ліній.

-C Не відкидайте коментарі. Усі коментарі передаються до вихідного файлу, за винятком
для коментарів в оброблених директивах, які видаляються разом з директивою.

При застосуванні слід бути готовим до побічних ефектів -C; це змушує препроцесор
розглядати коментарі як власні маркери. Наприклад, коментарі, що з’являються на сторінці
Початок того, що було б директивним рядком, призведе до перетворення цього рядка в
звичайний вихідний рядок, оскільки перший маркер у рядку більше не є a #.

-CC Не відкидайте коментарі, в тому числі під час розширення макросу. Це схоже -C, За винятком
що коментарі, що містяться в макросах, також передаються до вихідного файлу де
макрос розгорнутий.

Крім побічних ефектів -C варіант, -CC Параметр викликає всі C++-стилі
коментарі всередині макросу, які будуть перетворені в коментарі в стилі C. Це потрібно для запобігання згодом
використання цього макросу від ненавмисного коментування залишку вихідного рядка.

повне г, повне г,, показали, від, номер, XNUMX -CC Параметр зазвичай використовується для підтримки коментарів lint.

-традиційний-cpp
Спробуйте наслідувати поведінку старомодних препроцесорів C, на відміну від ISO C
препроцесори.

-триграфи
Обробити триграфічні послідовності. Це трисимвольні послідовності, всі починаються з
??, які визначені ISO C як поодинокі символи. Наприклад, ??/ стенди
та цінності \, так '??/n' є символьною константою для нового рядка. За замовчуванням GCC ігнорує
триграфи, але в стандартних режимах він перетворює їх. Див -стандартний і -ansi
Варіанти.

Дев'ять триграфів та їх заміни

Триграф: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Заміна: [ ] { } # \ ^ | ~

- переназначити
Увімкніть спеціальний код, щоб обійти файлові системи, які дозволяють лише дуже короткий файл
імена, наприклад MS-DOS.

--допомога
-- target-help
Надрукуйте текст, що описує всі параметри командного рядка, замість того, щоб виконувати будь-яку попередню обробку.

-v Детальний режим. Роздрукуйте номер версії GNU CPP на початку виконання та
повідомити остаточну форму шляху включення.

-H Надрукуйте назву кожного файлу заголовка, який використовується, на додаток до інших звичайних дій. Кожен
ім'я має відступ, щоб показати, наскільки глибоко в #включати стек це. Попередньо скомпільований заголовок
файли також друкуються, навіть якщо вони визнані недійсними; недійсний попередньо скомпільований
заголовний файл друкується з ... x і дійсний з ... .

-версія
-- версія
Роздрукуйте номер версії GNU CPP. За допомогою однієї тире перейдіть до попередньої обробки як зазвичай.
З двома рисками негайно вийдіть.

Проходження опції до la Асемблер
Ви можете передати параметри асемблеру.

- Ва,варіант
Проходити варіант як варіант для асемблера. Якщо варіант містить коми, він розділений
на кілька варіантів через кому.

-Xassembler варіант
Проходити варіант як варіант для асемблера. Ви можете використовувати це для забезпечення специфічної системи
параметри ассемблера, які GCC не знає, як розпізнати.

Якщо ви хочете передати параметр, який приймає аргумент, ви повинні використовувати -Xassembler двічі,
один раз для варіанту і один раз для аргументу.

опції та цінності Зв'язуючий
Ці параметри вступають у гру, коли компілятор зв’язує об’єктні файли у виконуваний файл
вихідний файл. Вони не мають сенсу, якщо компілятор не виконує крок посилання.

ім'я файлу-об'єкта
Ім’я файлу, яке не закінчується на спеціальний розпізнаний суфікс, вважається ім’ям an
об'єктний файл або бібліотека. (Об’єктні файли відрізняються від бібліотек компоновщиком
відповідно до вмісту файлу.) Якщо зв'язування виконано, ці об'єктні файли використовуються як
вхід до компоновщика.

-c
-S
-E Якщо використовується будь-який з цих параметрів, то компонувальник не запускається, а імена об’єктних файлів
не слід використовувати як аргументи.

-lбібліотека
-l бібліотека
Знайдіть бібліотеку з назвою бібліотека при з'єднанні. (Другий варіант з
бібліотека як окремий аргумент призначена лише для відповідності POSIX і не рекомендується.)

Має різницю, де в команді ви пишете цей параметр; лінкер шукає
і обробляє бібліотеки та об’єктні файли у зазначеному порядку. таким чином, foo.o
-lz bar.o шукає бібліотеку z після файлу foo.o але раніше bar.o. Якщо bar.o відноситься до
функції в z, ці функції можуть не завантажуватися.

Компонувальник шукає стандартний список каталогів для бібліотеки, що насправді є
файл з іменем бібліотека.а. Потім компонувальник використовує цей файл так, ніби він був вказаний
саме по імені.

Пошукові каталоги включають кілька стандартних системних каталогів і будь-які, які ви
вказати з -L.

Зазвичай файли, знайдені таким чином, є файлами бібліотеки ---архівними файлами, членами яких є
об'єктні файли. Компонувальник обробляє архівний файл, скануючи його на наявність учасників
які визначають символи, на які досі посилалися, але не визначені. Але якщо
знайдений файл є звичайним об’єктним файлом, він зв’язується звичайним способом. The
єдина різниця між використанням an -l опція та вказівка ​​імені файлу -l
оточує бібліотека з либ і .a і виконує пошук у кількох каталогах.

-lobjc
Вам потрібен цей особливий випадок -l параметр, щоб зв’язати Objective-C або
Програма Objective-C++.

-nostartfiles
Не використовуйте стандартні файли запуску системи під час підключення. Стандартна система
бібліотеки використовуються нормально, якщо -nostdlib or -нові за замовчуванням використовується.

-нові за замовчуванням
Не використовуйте стандартні системні бібліотеки під час підключення. Лише вказані вами бібліотеки
будуть передані компоновщику, параметри, що вказують підключення системних бібліотек, наприклад
як "-static-libgcc" або "-shared-libgcc", буде проігноровано. Стандартні файли запуску
використовуються нормально, якщо -nostartfiles використовується. Компілятор може генерувати виклики до
"memcmp", "memset", "memcpy" і "memmove". Ці записи зазвичай вирішуються за допомогою
записи в libc. Ці точки входу повинні забезпечуватися через якийсь інший механізм
коли ця опція вказана.

-nostdlib
Не використовуйте стандартні файли запуску системи або бібліотеки під час підключення. Немає запуску
файли і лише вказані вами бібліотеки будуть передані компоновщику, параметри
вказуючи зв'язок системних бібліотек, наприклад "-static-libgcc" або
"-shared-libgcc" буде проігноровано. Компілятор може генерувати виклики "memcmp",
"memset", "memcpy" і "memmove". Ці записи зазвичай вирішуються записами в
libc. При цьому ці точки входу повинні забезпечуватися через якийсь інший механізм
опція вказана.

Одна зі стандартних бібліотек, яку ми обійшли -nostdlib і -нові за замовчуванням is libgcc.a, то
бібліотека внутрішніх підпрограм, які GCC використовує для подолання недоліків окремих
машини або спеціальні потреби для деяких мов.

У більшості випадків потрібно libgcc.a навіть якщо ви хочете уникнути інших стандартних бібліотек.
Іншими словами, коли ви вказуєте -nostdlib or -нові за замовчуванням ви повинні зазвичай
вкажіть -lgcc також. Це гарантує, що у вас немає невирішених посилань на
внутрішні підпрограми бібліотеки GCC. (Наприклад, __основний, що використовується для забезпечення C++
будуть викликані конструктори.)

- пиріг
Створіть незалежний від позиції виконуваний файл для цілей, які його підтримують. Для передбачуваного
результатів, ви також повинні вказати той самий набір параметрів, які були використані для створення коду
(-fpie, -fPIE, або підпараметри моделі), коли ви вказуєте цей параметр.

-rдинамічний
Передайте прапор -експортно-динамічний до компонувальника ELF на цілях, які його підтримують. Це
інструктує компонувальнику додати всі символи, а не тільки використані, до динамічного символу
стіл. Цей параметр необхідний для деяких видів використання "dlopen" або дозволу отримання
зворотні трасування з програми.

-s Видаліть всю таблицю символів та інформацію про переміщення з виконуваного файлу.

-статичний
У системах, які підтримують динамічне зв’язування, це запобігає з’єднанню зі спільним
бібліотеки. На інших системах ця опція не діє.

- поділилися
Створіть спільний об’єкт, який потім можна буде зв’язати з іншими об’єктами для формування
виконуваний файл. Не всі системи підтримують цю опцію. Для передбачуваних результатів потрібно
також вкажіть той самий набір параметрів, які були використані для створення коду (-fpic, -fPICабо
підпараметри моделі), коли ви вказуєте цей параметр.[1]

-shared-libgcc
-static-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.

-static-libstdc++
Коли г ++ програма використовується для зв’язування програми на C++, зазвичай вона автоматично
посилання проти libstdc ++. Якщо libstdc ++ доступна як спільна бібліотека, а також
-статичний параметр не використовується, тоді це буде посилання на спільну версію
libstdc ++. Це нормально. Однак іноді корисно заморозити
версія libstdc ++ використовується програмою, не переходячи повністю до статичного
посилання. The -static-libstdc++ опція спрямовує г ++ драйвер за посиланням libstdc ++
статично, без обов'язкового статичного зв'язування інших бібліотек.

- символічний
Прив’язуйте посилання на глобальні символи під час створення спільного об’єкта. Попереджати про будь-які
невирішені посилання (якщо не замінено опцією редактора посилань -Xlinker -z
-Xlinker деф). Лише деякі системи підтримують цю опцію.

-T сценарій
використання сценарій як скрипт компонувальника. Цей параметр підтримується більшістю систем, що використовують
Компонувальник GNU. На деяких цілях, наприклад, на голих цілях без операційної системи,
la -T Опція може знадобитися під час посилання, щоб уникнути посилань на невизначені символи.

-Xlinker варіант
Проходити варіант як варіант для компонувальника. Ви можете використовувати це для забезпечення специфічної системи
параметри компонувальника, які GCC не розпізнає.

Якщо ви хочете передати параметр, який приймає окремий аргумент, ви повинні використовувати -Xlinker
двічі, один раз для варіанту і один раз для аргументу. Наприклад, пройти -стверджувати
Визначення, ви повинні написати -Xlinker -стверджувати -Xlinker Визначення. Вона не працює
написати -Xlinker "- стверджують визначення", оскільки це передає весь рядок як a
єдиний аргумент, чого не очікує компонувальник.

При використанні компоновщика GNU зазвичай зручніше передавати аргументи компоновщику
варіанти за допомогою варіант=значення синтаксису, ніж як окремі аргументи. Наприклад, ви
можна вказати -Xlinker -Map=output.map а не -Xlinker -Карта -Xlinker вихід.карта.
Інші компонувальники можуть не підтримувати цей синтаксис для параметрів командного рядка.

-Wl,варіант
Проходити варіант як варіант для компонувальника. Якщо варіант містить коми, розбивається на
кілька варіантів через кому. Ви можете використовувати цей синтаксис для передачі аргументу
варіант. Наприклад, -Wl,-Map,output.map проходить -Карта вихід.карта до лінкера. Коли
за допомогою компоновщика GNU ви також можете отримати той самий ефект -Wl,-Map=output.map.

ПРИМІТКА. В Ubuntu 8.10 і новіших версіях для LDFLAGS опція -Wl,-z,relro використовується.
Щоб вимкнути, використовуйте -Wl,-z,norelro.

-u символ
Уявіть символ символ undefined, щоб примусово визначити зв’язування бібліотечних модулів
це. Ви можете використовувати -u кілька разів з різними символами для примусового завантаження
додаткові бібліотечні модулі.

опції та цінності каталог Пошук
Ці параметри визначають каталоги для пошуку файлів заголовків, бібліотек і частин
компілятора:

-Iреж
Додайте каталог реж до заголовка списку каталогів для пошуку
файлів. Це можна використовувати, щоб замінити системний файл заголовка, замінивши свій власний
версії, оскільки ці каталоги шукаються перед системним файлом заголовка
каталогів. Однак ви не повинні використовувати цю опцію для додавання каталогів, які містять
системні заголовні файли, надані постачальником (використовуйте -ісистема для того). Якщо ви використовуєте більше одного
-I опція, каталоги скануються в порядку зліва направо; стандартна система
каталоги йдуть після.

Якщо стандартна система включає в себе каталог, або каталог, зазначений з -ісистема, Є
також зазначено с -I, то -I опція буде проігнорована. Каталог все одно буде
шукали, але як системний каталог у його нормальному положенні в системі включають ланцюжок.
Це робиться для того, щоб процедура GCC виправляла помилкові заголовки системи та порядок
для директиви include_next не змінюються випадково. Якщо вам справді потрібно
змінити порядок пошуку системних каталогів, скористайтеся -nostdinc та / або -ісистема
Варіанти.

-iplugindir=реж
Налаштуйте каталог для пошуку плагінів, які передаються -fplugin=ім'я замість
-fplugin=шлях/ім'я.тому. Ця опція не призначена для використання користувачем, а лише
пройшов повз водія.

- цитатареж
Додайте каталог реж до заголовка списку каталогів для пошуку
файли лише для випадку #включати "файл"; їх не шукають #включати <файл>,
інакше так само -I.

-Lреж
Додати каталог реж до списку каталогів, які потрібно шукати -l.

-Bпрефікс
Цей параметр вказує, де знайти виконувані файли, бібліотеки, включені файли та
файли даних самого компілятора.

Програма драйвера компілятора запускає одну або кілька підпрограм cpp, Cc1, as і ld.
Воно намагається префікс як префікс для кожної програми, яку вона намагається запустити, як з, так і без
машина/версія/.

Для кожної підпрограми, яку потрібно запустити, драйвер компілятора спочатку пробує -B префікс, якщо є.
Якщо це ім’я не знайдено, або якщо -B не вказано, водій пробує два стандартних
префікси, /usr/lib/gcc/ і /usr/local/lib/gcc/. Якщо жодне з них не призводить до a
знайдене ім’я файлу, шукається незмінена назва програми за допомогою
каталогів, зазначених у вашому PATH змінна оточення

Компілятор перевірить, чи шлях, наданий файлом -B посилається на каталог,
і, якщо необхідно, він додасть символ роздільника каталогу в кінці шляху.

-B префікси, які фактично вказують імена каталогів, також застосовуються до бібліотек у
компонувальник, оскільки компілятор перекладає ці параметри в -L параметри для компонувальника.
Вони також застосовуються до включених файлів у препроцесорі, оскільки компілятор перекладає
ці варіанти в -ісистема опції для препроцесора. У цьому випадку компілятор
додає включати до префікса.

Файл підтримки часу виконання libgcc.a також можна шукати за допомогою -B префікс, якщо
необхідний. Якщо його там не знайдено, випробовують два стандартних префікса вище, і це
це все. Файл залишається поза посиланням, якщо його не знайдено цим способом.

Інший спосіб вказати префікс, схожий на -B префікс використовувати середовище
змінна GCC_EXEC_PREFIX.

Як особливий клудж, якщо шлях передбачений -B is [реж./]стадіяN/, Де N - це число
в діапазоні від 0 до 9, тоді воно буде замінено на [dir/]включати. Це, щоб допомогти
завантаження компілятора.

-специфікації=файл
Процес файл після того, як компілятор прочитає стандарт дані файл, щоб замінити
значення за замовчуванням, які ПКУ Програма драйвера використовує, коли визначає, які перемикачі передавати
до Cc1, cc1plus, as, ld, тощо. Більше одного -специфікації=файл можна вказати на
командного рядка, і вони обробляються в порядку, зліва направо.

--sysroot=реж
використання реж як логічний кореневий каталог для заголовків і бібліотек. Наприклад, якщо
компілятор зазвичай шукає заголовки в / usr / include та бібліотеки в / Usr / Бібліотека,
замість цього він шукатиме dir/usr/include і dir/usr/lib.

Якщо ви використовуєте і цю опцію, і -isysroot варіант, потім --sysroot варіант буде
застосовувати до бібліотек, але -isysroot параметр буде застосовано до заголовних файлів.

Компонувальник GNU (починаючи з версії 2.16) має необхідну підтримку для цього
варіант. Якщо ваш компонувальник не підтримує цю опцію, аспект файлу заголовка
--sysroot буде працювати, але бібліотечний аспект не працюватиме.

-Я- Цей параметр не підтримується. Будь ласка, використовуйте - цитата замість цього для -I каталогів раніше
la -Я- і видаліть -Я-. Будь-які каталоги, які ви вказали з -I варіанти перед
-Я- параметри шукаються лише для випадку #включати "файл"; їх не обшукують
та цінності #включати <файл>.

Якщо додаткові каталоги вказані з -I варіанти після -Я-Ці
каталоги шукаються для всіх #включати директиви. (Звичайно всі -I каталоги
використовуються таким чином.)

Крім того, -Я- Параметр забороняє використання поточного каталогу (де
поточний вхідний файл) як перший каталог пошуку для #включати "файл".
Немає способу подолати цей ефект -Я-. З -Я. можна вказати пошук
каталог, який був поточним, коли був викликаний компілятор. Це не зовсім те
те саме, що робить препроцесор за замовчуванням, але часто це задовільний.

-Я- не перешкоджає використанню стандартних системних каталогів для заголовних файлів.
Таким чином, -Я- і -nostdinc є незалежними.

Уточнення Мета машина і компілятор версія
Звичайним способом запуску GCC є запуск виконуваного файлу, який викликається ПКУабо машина-gcc коли хрест-
складання, або машина-gcc-версія щоб запустити версію, відмінну від тієї, що була встановлена
останній.

апаратні засоби моделі і Конфігурації
Кожен тип цільової машини може мати власні спеціальні параметри, починаючи з -m, вибирати
серед різних апаратних моделей або конфігурацій --- наприклад, 68010 проти 68020, плаваючий
співпроцесор або немає. Одну встановлену версію компілятора можна компілювати для будь-якої моделі
або конфігурації, відповідно до вказаних параметрів.

Деякі конфігурації компілятора також підтримують додаткові спеціальні параметри, зазвичай для
сумісність з іншими компіляторами на тій же платформі.

Адаптєва Богоявлення опції

Ці -m визначені параметри для Adapteva Epiphany:

-mhalf-reg-file
Не виділяйте жодного регістра в діапазоні "r32"...r63". Це дозволяє виконувати код
апаратні варіанти, у яких відсутні ці регістри.

-mprefer-short-insn-regs
Переважно виділяють регістри, які дозволяють генерувати короткі команди. Це може
призведе до збільшення кількості інструкційd, тому якщо це зменшує або збільшує розмір коду
може відрізнятися від випадку до випадку.

-mbranch-cost=Num
Приблизно встановіть вартість гілок Num «прості» інструкції. Ця вартість становить лише а
евристичний і не гарантує отримання послідовних результатів у всіх випусках.

-mcmove
Увімкнути генерацію умовних ходів.

-mnops=Num
випускати Num nops перед кожною іншою згенерованою інструкцією.

-mno-soft-cmpsf
Для порівняння з плаваючою комою одинарної точності випустіть інструкцію fsub і перевірте
прапори. Це швидше, ніж порівняння програмного забезпечення, але може отримати неправильні результати
наявність NaNs, або коли порівнюються два різних невеликих числа так, що їх
різниця обчислюється як нуль. За замовчуванням є -msoft-cmpsf, який використовує повільніше, але
IEEE-сумісне, порівняння програмного забезпечення.

-mstack-offset=Num
Встановіть зміщення між верхньою частиною стека та вказівником стека. Наприклад, значення 8
означає, що вісім байтів у діапазоні sp+0...sp+7 можуть використовуватися функціями листка
без виділення стека. Цінності, крім 8 or 16 не перевірені і навряд чи
працювати. Зауважте також, що ця опція змінює ABI, компілюючи програму з a
Зміщення стека, відмінне від того, з яким були зібрані бібліотеки, зазвичай не буде
працювати. Цей параметр може бути корисним, якщо ви хочете оцінити, чи є інший зміщення стека
дасть вам кращий код, але фактично використовувати інше зміщення стека для створення
робочих програм, рекомендується налаштувати ланцюг інструментів з відповідними
--with-stack-offset=Num варіант.

-mno-round-найближчий
Зробіть планувальник припущенням, що для режиму округлення встановлено усечення. The
за замовчуванням -mround-найближчий.

-mlong-дзвінки
Якщо в атрибуті не вказано інше, припустимо, що всі виклики можуть бути поза межами
діапазон зміщення інструкцій b / bl, а отже, завантажити адресу функції
реєстр перед виконанням (інакше прямого) виклику. Це значення за замовчуванням.

-mshort-calls
Якщо в атрибуті не вказано інше, припустимо, що всі прямі виклики знаходяться в діапазоні
інструкцій b / bl, тому використовуйте ці інструкції для прямих викликів. За замовчуванням
is -mlong-дзвінки.

-msmall16
Припустимо, що адреси можуть бути завантажені як 16-розрядні значення без знака. Це не стосується
адреси функцій, для яких -mlong-дзвінки семантика діє.

-mfp-mode=режим
Встановіть переважний режим одиниці з плаваючою комою. Це визначає плаваюче-
точковий режим, який надається та очікується під час виклику функції та часу повернення. Виготовлення
цей режим відповідає режиму, який вам переважно потрібен під час запуску функції
програми менше і швидше, уникаючи непотрібних перемикачів режимів.

режим можна встановити одне з таких значень:

гість
Будь-який режим при вході функції є дійсним і зберігається або відновлюється під час виконання функції
повертає, і коли він викликає інші функції. Цей режим корисний для компіляції
бібліотеки або інші одиниці компіляції, які ви можете включити в різні
програми з різними переважаючими режимами FPU, а також зручність можливості
використання одного об’єктного файлу переважає розмір і швидкість накладних витрат для будь-якого додаткового режиму
перемикання, яке може знадобитися, порівняно з тим, що було б потрібно з більшим
конкретний вибір переважного режиму FPU.

усікати
Це режим, який використовується для обчислень з плаваючою комою зі скороченням (тобто округленням
до нуля) режим округлення. Це включає перетворення з плаваючою комою в
ціле число.

круглий-найближчий
Це режим, який використовується для обчислень з плаваючою комою з округленням до найближчого чи-
режим рівномірного округлення.

Int Це режим, який використовується для виконання цілих обчислень у FPU, наприклад цілого числа
множити, або цілочисельне множити-накопичувати.

За замовчуванням - -mfp-mode=абонент

-мноспліт-лохи
-мно-постинк
-мно-постмодифікувати
Налаштування генерації коду, які вимикають, відповідно, розділення 32-бітових завантажень,
генерування адрес після інкременту та генерування адрес після модифікації. The
за замовчуванням є msplit-lohi, -mpost-inc, і -mpost-змінити.

-mnovec-подвійний
Змініть бажаний режим SIMD на режим SIM. За замовчуванням є -mvect-подвійний, Яка використовує
Режим DI як бажаний режим SIMD.

-max-vect-align=Num
Максимальне вирівнювання для типів векторного режиму SIMD. Num може бути 4 або 8. За замовчуванням є
8. Зауважте, що це зміна ABI, хоча багато інтерфейсів функцій бібліотеки будуть
залишатися незмінними, якщо вони не використовують векторні режими SIMD у місцях, де вони впливають на розмір
та/або вирівнювання відповідних типів.

-msplit-vecmove-early
Розділений вектор переміщується на переміщення одного слова перед перезавантаженням. Теоретично це може дати
краще розподіляти реєстри, але поки що, здається, зазвичай все було навпаки.

-m1reg-Реджо
Вкажіть регістр для збереження константи -1, що робить завантаження невеликим негативним
константи та певні бітові маски швидше. Допустимі значення для reg: r43 і r63,
які вказують використовувати цей регістр як фіксований регістр, і немає, що означає, що ні
для цього використовується реєстр. За замовчуванням є -m1reg-немає.

AAArch64 опції

Ці параметри визначені для реалізацій AArch64:

-big-endian
Створення коду з великим порядком. Це значення за замовчуванням, якщо GCC налаштовано для файлу
aarch64_be-*-* мета.

-mgeneral-regs-only
Згенеруйте код, який використовує лише загальні регістри.

-mlittle-endian
Згенеруйте код з маленьким порядком байтів. Це значення за замовчуванням, якщо GCC налаштовано для файлу
aarch64-*-* але не aarch64_be-*-* мета.

-mcmodel = крихітний
Згенеруйте код для крихітної моделі коду. Програма та її статично визначені символи
мають бути в межах 1 Гб один від одного. Вказівники мають 64 біта. Програми можуть бути статичними
або динамічно пов'язані. Ця модель не повністю реалізована і в основному розглядається як
«маленький».

-mcmodel=мала
Згенеруйте код для моделі невеликого коду. Програма та її статично визначені
символи мають бути в межах 4 Гб один від одного. Вказівники мають 64 біта. Програми можуть бути
статично або динамічно пов'язані. Це модель коду за замовчуванням.

-mcmodel=великий
Згенеруйте код для моделі великого коду. Це не робить припущень щодо адрес і
розміри секцій. Вказівники мають 64 біти. Програми можуть бути лише статично пов’язані.

-mstrict-align
Не припускайте, що невирівняні посилання на пам’ять оброблятимуться системою.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
Опустіть або збережіть покажчик кадру у функціях листка. Попередня поведінка є
за замовчуванням.

-mtls-dialect=desc
Використовуйте дескриптори TLS як механізм локального зберігання потоку для динамічного доступу до TLS
змінні. Це значення за замовчуванням.

-mtls-dialect=традиційний
Використовуйте традиційний TLS як механізм локального зберігання потоків для динамічного доступу до TLS
змінні.

-березень=ім'я
Вкажіть назву цільової архітектури, необов’язково з одним або кількома суфіксами
модифікатори функцій. Цей варіант має форму -березень=арка{+[немає]особливість}*, де
тільки значення для арка is armv8-a. Можливі значення для особливість задокументовані в
підрозділ нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки. Цей параметр можна використовувати разом із або замість нього -mcpu=
варіант.

-mcpu=ім'я
Вкажіть назву цільового процесора, за бажанням із суфіксом однієї чи кількох функцій
модифікатори. Цей варіант має форму -mcpu=центральний процесор{+[немає]особливість}*, де це можливо
значення для центральний процесор він має родової, великий. Можливі значення для особливість задокументовані в
підрозділ нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки.

-mtune=ім'я
Вкажіть назву процесора, для якого потрібно налаштувати продуктивність. Код буде налаштований
ніби цільовий процесор був типу, зазначеного в цьому параметрі, але все ще використовується
інструкції, сумісні з цільовим процесором, визначеним a -mcpu= варіант. Це
Опція не може бути суфіксована модифікаторами функцій.

- марш і -mcpu модифікатори функцій

Модифікатори функцій, які використовуються з - марш і -mcpu може бути одним із таких:

крипто
Увімкнути розширення Crypto. Це означає, що розширений SIMD увімкнено.

fp Увімкнути інструкції з плаваючою комою.

simd
Увімкніть розширені інструкції SIMD. Це означає, що інструкції з плаваючою комою є
увімкнено. Це значення за замовчуванням для всіх поточних можливих значень параметрів - марш і
-mcpu=.

ARM опції

Ці -m параметри визначені для архітектури Advanced RISC Machines (ARM):

-mabi=ім'я
Згенеруйте код для вказаного ABI. Допустимі значення: apcs-gnu, атшт, aapcs,
aaps-linux і iwmmxt.

-mapcs-frame
Згенеруйте кадр стека, який відповідає стандарту виклику процедур ARM для всіх
функції, навіть якщо це не є строго необхідним для правильного виконання коду.
Уточнення -fomit-frame-pointer за допомогою цієї опції кадри стека не будуть
створений для функцій листка. За замовчуванням є -mno-apcs-frame.

- карти
Це синонім до -mapcs-frame.

-mthumb-interwork
Згенеруйте код, який підтримує виклики між наборами інструкцій ARM і Thumb.
Без цієї опції в архітектурах до v5 два набори інструкцій не можуть бути
надійно використовується в одній програмі. За замовчуванням є -mno-thumb-interwork, оскільки трохи
більший код генерується, коли -mthumb-interwork вказано. У конфігураціях AAPCS
цей варіант безглуздий.

-mno-sched-prolog
Запобігайте зміні порядку інструкцій у пролозі функції або злиття
ці інструкції з інструкціями в тілі функції. Це означає, що все
функції починатимуться з розпізнаваного набору інструкцій (або фактично однієї з a
вибір із невеликого набору різних прологів функцій), і ця інформація може бути
використовується для визначення місцезнаходження функцій start if всередині виконуваного фрагмента коду. За замовчуванням
is -msched-prolog.

-mfloat-abi=ім'я
Визначає, який ABI з плаваючою комою використовувати. Допустимі значення: м'який, softfp і
жорсткий.

Уточнення м'який змушує GCC генерувати вихідні дані, що містять виклики бібліотеки для floating-
точкові операції. softfp дозволяє генерувати код з використанням апаратної плаваючої коми
інструкції, але все ще використовує конвенції про виклики soft-float. жорсткий дозволяє
генерування інструкцій з плаваючою комою та використання специфічних для FPU умов викликів.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що жорсткий поплавок
і soft-float ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з
той самий ABI і зв'язок із сумісним набором бібліотек.

-mlittle-endian
Згенеруйте код для процесора, що працює в режимі малого байта. Це значення за замовчуванням для
всі стандартні конфігурації.

-big-endian
Створення коду для процесора, що працює в режимі big-endian; за замовчуванням – компілювати
код для процесора з малим кінцем.

-mwords-little-endian
Цей параметр застосовується лише під час генерації коду для процесорів з великим порядком. Згенерувати
код для порядку слів з маленьким байтом, але з великим порядком байтів. Тобто байт
порядок форми 32107654. Примітка: цю опцію слід використовувати лише в разі потреби
сумісність з кодом для процесорів ARM з великим порядком, створеним версіями
компілятор до 2.8. Ця опція зараз не підтримується.

-березень=ім'я
Це визначає назву цільової архітектури ARM. GCC використовує цю назву для
визначити, які інструкції він може видавати під час генерації коду складання. Це
Опція може використовуватися разом із або замість -mcpu= варіант. Допустимі
назви: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, iwmmxt, iwmmxt2, ep9312.

-березня = рідний змушує компілятор автоматично визначати архітектуру збірки
комп'ютер. Наразі ця функція підтримується лише в Linux, і не у всіх
архітектури визнані. Якщо автоматичне визначення не вдалось, параметр не має
ефект

-mtune=ім'я
Цей параметр визначає назву цільового процесора ARM, для якого GCC має налаштуватися
продуктивність коду. Для деяких реалізацій ARM може бути краща продуктивність
отримані за допомогою цієї опції. Допустимі назви: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, рука 7 м, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, рука710т, рука720т, рука740т, міцна рука, strongarm110, strongarm1100,
strongarm1110, arm8, arm810, arm9, arm9e, arm920, рука920т, рука922т, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, рука940т, arm9tdmi, arm10tdmi, рука1020т, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, кора-a5, кора-a7, кора-a8, кора-a9,
кора-a15, кора головного мозку-r4, кора головного мозку-r4f, кора головного мозку-r5, кора-m4, кора-m3, кора-m1,
кора-m0, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=загальний-арка вказує, що GCC має налаштувати продуктивність для поєднання
процесори в архітектурі арка. Метою є створення коду, який добре працює на
поточні найпопулярніші процесори, балансуючи між оптимізаціями, які приносять користь деяким
ЦП у діапазоні та уникнення підводних каменів продуктивності інших ЦП. Наслідки
ця опція може змінитися в майбутніх версіях GCC, оскільки моделі ЦП з'являються і зникають.

-mtune = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mcpu=ім'я
Це визначає назву цільового процесора ARM. GCC використовує цю назву для отримання
ім'я цільової архітектури ARM (як би вказано в - марш) і процесор ARM
тип, для якого потрібно налаштувати продуктивність (наче вказано в -mtune). Де цей варіант
використовується разом з - марш or -mtune, ці параметри мають пріоритет над
відповідна частина цього варіанту.

Допустимі назви для цієї опції такі ж, як і для -mtune.

-mcpu=загальний-арка також допустимо і еквівалентно -березень=арка
-mtune=загальний-арка, Побачити -mtune для отримання додаткової інформації.

-mcpu = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mfpu=ім'я
-mfpe=номер
-mfp=номер
Це визначає, яке обладнання з плаваючою комою (або апаратна емуляція) доступне
ціль. Допустимі назви: fpa, fpe2, fpe3, індивідуаліст, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, неоновий, неон-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 і neon-vfpv4. -mfp і -mfpe є синонімами до -mfpu=fpeномер, Для
сумісність зі старими версіями GCC.

If -msoft-float вказано, це визначає формат значень з плаваючою комою.

Якщо вибране обладнання з плаваючою комою включає розширення NEON (наприклад -mfpu=неоновий),
зауважте, що операції з плаваючою комою не використовуватимуться при проходженні автоматичної векторизації GCC
якщо не -funsafe-math-optimizations також уточнюється. Це тому, що обладнання NEON
не повністю реалізує стандарт IEEE 754 для арифметики з плаваючою комою (в
певні деноральні значення розглядаються як нульові), тому використання інструкцій NEON може
призводять до втрати точності.

-mfp16-format=ім'я
Вкажіть формат типу "__fp16" з плаваючою комою з напівточністю. Допустимі
імена є ніхто, тобто, і альтернатива; за замовчуванням ніхто, у цьому випадку "__fp16"
тип не визначений.

-mstructure-size-boundary=n
Розмір усіх структур і об’єднань буде округлено до кратного числа
бітів, встановлених цією опцією. Допустимі значення: 8, 32 і 64. Значення за замовчуванням
різниться для різних ланцюжків інструментів. Для цільового ланцюга інструментів COFF значенням за замовчуванням є
8. Значення 64 допускається лише в тому випадку, якщо базовий ABI підтримує його.

Зазначення більшого числа може створити швидший та ефективніший код, але також може
збільшити розмір програми. Різні значення потенційно несумісні.
Код, скомпільований з одним значенням, не обов’язково буде працювати з кодом або бібліотеками
складені з іншим значенням, якщо вони обмінюються інформацією за допомогою структур або об'єднань.

-mabort-on-noreturn
Згенеруйте виклик функції "abort" в кінці функції "noreturn". Це буде
виконуватися, якщо функція намагається повернути.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція буде лежати за межами 64-мегабайтної адресації
діапазон версії інструкції виклику підпрограми на основі зміщення.

Навіть якщо цей перемикач увімкнено, не всі виклики функцій будуть перетворені на довгі виклики.
Евристика полягає в тому, що статичні функції, функції, які мають короткий дзвінок атрибут,
функції, які входять до сфери дії a #прагма no_long_calls директива та функції
чиї визначення вже були скомпільовані в рамках поточної одиниці компіляції, will
не перетворюватися на довгі дзвінки. Винятком з цього правила є слабка функція
визначення, функції з довгий дзвінок атрибут або розділ атрибут і
функції, які входять до сфери дії a #прагма довгі_дзвінки директива, завжди буде
перетворилися на довгі дзвінки.

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновить
поведінка за замовчуванням, а також розміщення викликів функцій у межах a #прагма
long_calls_off директива. Зауважте, що ці перемикачі не впливають на роботу компілятора
генерує код для обробки викликів функцій за допомогою покажчиків функцій.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpic-register=Реджо
Вкажіть регістр, який буде використовуватися для PIC-адресації. За замовчуванням є R10, якщо стек-
перевірка увімкнена, коли використовується R9.

-mcirrus-fix-invalid-insns
Вставте NOP в потік інструкцій до, щоб обійти проблеми з
недійсні комбінації інструкцій Maverick. Ця опція дійсна, лише якщо
-mcpu=ep9312 була використана опція, щоб увімкнути створення інструкцій для Cirrus
Співпроцесор Maverick з плаваючою комою. Цей параметр не включений за замовчуванням, оскільки
проблема присутня лише в старих реалізаціях Maverick. За замовчуванням можна повторно
увімкнено за допомогою -mno-cirrus-fix-invalid-insns перемикач.

-mpoke-назва-функції
Напишіть назву кожної функції в текстовий розділ безпосередньо перед функцією
пролог. Згенерований код подібний до цього:

t0
.ascii "arm_poke_function_name", 0
.вирівняти
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, №4

Виконуючи зворотне трасування стека, код може перевірити значення "pc", що зберігається в "fp +
0". Якщо функція трасування дивиться на розташування "pc - 12", а верхні 8 бітів
set, то ми знаємо, що безпосередньо перед цим є ім'я функції
розташування та має довжину "((pc[-3]) & 0xff000000)".

-mthumb
-марм
Виберіть між генеруванням коду, який виконується в станах ARM і Thumb. За замовчуванням для
більшість конфігурацій генерують код, який виконується в стані ARM, але за замовчуванням
можна змінити, налаштувавши GCC за допомогою --with-mode=були налаштувати параметр.

-mtpcs-frame
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції, які не є листовими. (Листкова функція - це функція, яка не викликає жодної іншої
функції.) За замовчуванням є -mno-tpcs-frame.

-mtpcs-leaf-frame
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції листка. (Лукова функція - це функція, яка не викликає жодних інших функцій.)
За замовчуванням - -mno-apcs-leaf-frame.

-mcallee-super-interworking
Надає всім видимим ззовні функціям у файлі, що компілюється, інструкцію ARM
встановити заголовок, який перемикається в режим Thumb перед виконанням решти функції.
Це дозволяє викликати ці функції з коду, що не взаємодіє. Цей варіант є
недійсний у конфігураціях AAPCS, оскільки взаємодія ввімкнено за замовчуванням.

-mcaller-super-interworking
Дозволяє правильно виконувати виклики через покажчики функцій (включаючи віртуальні функції).
незалежно від того, чи був цільовий код скомпільований для взаємодії чи ні.
Виконання вказівника функції, якщо ця опція має невеликі накладні витрати
увімкнено. Ця опція недійсна в конфігураціях AAPCS, оскільки є взаємодія
увімкнено за замовчуванням.

-mtp=ім'я
Вкажіть модель доступу для покажчика локального сховища потоку. Дійсними є моделі
м'який, який генерує виклики "__aeabi_read_tp", cp15, який отримує потік
вказівник безпосередньо з "cp15" (підтримується архітектурою arm6k), і автоматичний, Яка
використовує найкращий доступний метод для вибраного процесора. Налаштування за замовчуванням
автоматичний.

-mtls-dialect=діалект
Вкажіть діалект для доступу до локального сховища потоку. Два діалекти
підтримується --- гну і gnu2, гну діалект вибирає оригінальну схему GNU для
підтримка локальних і глобальних динамічних моделей TLS. The gnu2 діалект вибирає GNU
схема дескриптора, яка забезпечує кращу продуктивність для спільних бібліотек. GNU
Схема дескриптора сумісна з оригінальною схемою, але вимагає нової
підтримка асемблера, компонувальника та бібліотеки. Початкова та локальна моделі exec TLS є
ця опція не впливає і завжди використовує оригінальну схему.

-mword-переміщення
Згенеруйте абсолютні переміщення лише для значень розміру зі словом (тобто R_ARM_ABS32). Це
увімкнено за замовчуванням для цільових пристроїв (uClinux, SymbianOS), де завантажувач часу виконання нав’язує
це обмеження та коли -fpic or -fPIC вказано.

-mfix-cortex-m3-ldrd
Деякі ядра Cortex-M3 можуть викликати пошкодження даних, коли інструкції "ldrd" з
використовуються регістри призначення та бази, що перекриваються. Цей параметр дозволяє уникнути генерації
ці інструкції. Цей параметр увімкнено за замовчуванням, коли -mcpu=cortex-m3 is
вказано.

-муніципальний доступ
-mno-unaligned-access
Вмикає (або вимикає) читання та запис 16- і 32-розрядних значень з адрес
які не вирівняні за 16 або 32 бітами. За замовчуванням неузгоджений доступ вимкнено для всіх
попередній ARMv6 і всі архітектури ARMv6-M, а також увімкнено для всіх інших архітектур. Якщо
неузгоджений доступ не ввімкнено, тоді будуть доступні слова в упакованих структурах даних
по байту.

Атрибут ARM "Tag_CPU_unaligned_access" буде встановлений у згенерованому об'єктному файлі
на true або false, залежно від налаштування цієї опції. Якщо не вирівняні
доступ увімкнено, то символ препроцесора "__ARM_FEATURE_UNALIGNED" також буде
визначений.

-mneon-for-64bits
Дозволяє використовувати Neon для обробки скалярних 64-бітних операцій. За замовчуванням це вимкнено
оскільки вартість переміщення даних з основних регістрів до Neon висока.

AVR опції

-mmcu=mcu
Вкажіть архітектуру набору інструкцій Atmel AVR (ISA) або тип MCU.

За замовчуванням для цієї опції є@tie{}"avr2".

GCC підтримує такі пристрої AVR та ISA:

"avr2"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ і з "MOVW"
інструкція. mcu@tie{}= "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@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
«Класичні» пристрої з 128@tie{}КіБ пам’яті програм. mcu@tie{}= "atmega103",
"at43usb320".

"avr35"
"Класичні" пристрої з програмною пам'яттю від 16@tie{}KiB до 64@tie{}KiB і з
інструкція "MOVW". mcu@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
«Розширені» пристрої з програмною пам’яттю до 8@tie{}КіБ. mcu@краватка{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
«Розширені» пристрої з програмною пам’яттю від 16@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
«Розширені» пристрої з 128@tie{}КіБ пам’яті програм. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
"Розширені" пристрої з 3-байтовим ПК, тобто з програмою понад 128@tie{}КіБ
пам'ять. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
Пристрої "XMEGA" з програмною пам'яттю понад 8@tie{}КіБ і до 64@tie{}КіБ.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам'ять. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам’яті та більше ніж 64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ. mcu@краватка{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ і більше
64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
Цей ISA реалізований мінімальним ядром AVR і підтримується лише для асемблера.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Накопичувати вихідні аргументи функції та отримати/звільнити необхідний простір стека
вихідні аргументи функції один раз у пролозі/епілозі функції. Без цієї опції,
вихідні аргументи висуваються перед викликом функції та випливають після цього.

Виведення аргументів після виклику функції може бути дорогим на AVR, тому
накопичення простору стека може призвести до менших виконуваних файлів, оскільки потрібні аргументи
не видаляти зі стеку після такого виклику функції.

Цей параметр може призвести до зменшення розміру коду для функцій, які виконують кілька викликів
функції, які отримують свої аргументи в стеку, як виклики функцій, подібних до printf.

-mbranch-cost=коштувати
Встановіть витрати на відділення для умовних інструкцій відділення коштувати. Розумні значення
та цінності коштувати є малі, невід’ємні цілі числа. Вартість відділення за замовчуванням дорівнює 0.

-mcall-prologues
Функції прологи/епілоги розширюються як виклики відповідних підпрограм. код
розмір менший.

-м'ята8
Припустимо, що "int" є 8-бітовим цілим числом. Це впливає на розміри всіх типів: "char" дорівнює 1
байт, "int" - 1 байт, "long" - 2 байти, а "long long" - 4 байти. Будь ласка
зауважте, що ця опція не відповідає стандартам C, але призводить до менших розмірів
розмір коду.

-mno-переривання
Згенерований код несумісний з апаратними перериваннями. Розмір коду менший.

- розслабитися
Спробуйте замінити "CALL" відповідно. Інструкція «JMP» за допомогою коротшої «RCALL» відповідно. "RJMP"
інструкція, якщо є. Налаштування "-mrelax" просто додає параметр "--relax" до
командний рядок компоновщика під час виклику компоновщика.

Розслаблення стрибків виконується компонувальником, оскільки зміщення переходу раніше не було відоме
код розташований. Отже, код асемблера, згенерований компілятором, однаковий,
але інструкції у виконуваному файлі можуть відрізнятися від інструкцій на асемблері
Код.

Якщо потрібні заглушки компоновщика, необхідно ввімкнути розслаблення, дивіться розділ «EIND» і
заглушки лінкера нижче.

-mshort-calls
Ця опція застаріла і буде вилучена в GCC 4.8. Дивіться "-mrelax" для а
заміна.

Використовуйте інструкції "RCALL"/"RJMP" навіть на пристроях із програмою 16@tie{}KiB або більше
пам’яті, тобто на пристроях, які мають інструкції «CALL» і «JMP».

-msp8
Розглядайте регістр покажчика стека як 8-розрядний регістр, тобто приймайте старший байт
покажчик стека дорівнює нулю. Загалом, вам не потрібно встановлювати цю опцію вручну.

Ця опція використовується внутрішньо компілятором для вибору та створення мультиліб
архітектури "avr2" і "avr25". Ці архітектури поєднують пристрої з і без
"SPH". Для будь-якого параметра, відмінного від "-mmcu=avr2" або "-mmcu=avr25", драйвер компілятора
додасть або видалить цю опцію з командного рядка компілятора, тому що
потім компілятор знає, чи має пристрій або архітектура 8-розрядний покажчик стека, і таким чином
немає реєстру "SPH" чи ні.

-mstrict-X
Використовуйте адресний регістр "X" способом, запропонованим апаратним забезпеченням. Це означає, що «X».
використовується лише для непрямої адресації, адресації після інкременту або перед декрементом.

Без цієї опції регістр "X" може використовуватися так само, як і "Y" або "Z".
потім емулюється додатковими інструкціями. Наприклад, завантаження значення за допомогою
"X+const" адресація з невеликим невід'ємним "const < 64" до регістра Rn is
виконується як

adiw r26, const ; X += конст
ld , X ; = *X
sbiw r26, const ; X -= конст

-mtiny-stack
Змінюйте лише нижні 8@tie{}бітів покажчика стека.

"EIND" і пристрої з більш ніж 128 Кібайт Flash

Вказівники в реалізації мають ширину 16@tie{}бітів. Адреса функції або мітки
представлений у вигляді адреси слова, щоб непрямі переходи та виклики могли націлюватися на будь-який код
адреса в діапазоні 64@tie{}Кі слів.

Щоб полегшити непрямий перехід на пристрої з понад 128@tie{}Кі байт
пам'яті програми, існує спеціальний регістр функції під назвою "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". Такий код виконується до
загальний код запуску, який ініціалізує RAM і викликає конструктори, але після розряду
код запуску з AVR-LibC, який встановлює "EIND" у сегмент, де знаходиться векторна таблиця
розташований.

#включати

статична порожнеча
__атрибут__((section(.init3"),голий,вживаний,без_функції_instrument))
init3_set_eind (недійсний)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","пам'ять");
}

Символ "__trampolines_start" визначено в скрипті компоновщика.

· Заглушки автоматично генеруються компонувальником, якщо виконуються дві наступні умови
зустрів:

-
(скорочено для породжувати заглушки) ось так:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
поза сегмент, де розташовані заглушки.

· Компілятор випускає такі модифікатори "gs" для міток коду в таких ситуаціях:

-
-
- -mcall-prologues>
параметр командного рядка.

-
таблиці ви можете вказати -fno-jump-tables параметр командного рядка.

-
-
· Перехід до несимволічних адрес так і є НЕ підтримується:

int main (void)
{
/* Виклик функції за адресою слова 0x2 */
повернути ((int(*)(void)) 0x2)();
}

Замість цього потрібно налаштувати заглушку, тобто функцію потрібно викликати через символ
("func_4" у прикладі):

int main (void)
{
extern int func_4 (void);

/* Виклик функції за адресою байта 0x4 */
повернути 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» встановлюється за потребою перед операцією.

· Якщо пристрій підтримує оперативну пам’ять більше 64@tie{KiB} і компілятор потрібно змінити
«RAMPZ» для виконання операції, «RAMPZ» скидається на нуль після операції.

· Якщо пристрій має певний регістр "RAMP", пролог/епілог ISR
зберігає/відновлює цей SFR та ініціалізує його нулем на випадок, якщо код ISR може
(неявно) використовувати його.

· ОЗП більше 64@tie{KiB} не підтримується GCC для цілей AVR. Якщо ви використовуєте
вбудований ассемблер для читання з місць за межами 16-розрядного діапазону адрес і зміни
одного з регістрів "RAMP", ви повинні скинути його на нуль після доступу.

AVR Вбудовані макроси

GCC визначає кілька вбудованих макросів, щоб код користувача міг перевірити наявність або
відсутність особливостей. Майже будь-який з наступних вбудованих макросів виводиться з пристрою
можливостей і, таким чином, запускається параметром командного рядка "-mmcu=".

Ще більше вбудованих макросів для AVR див AVR Названий адреса Приміщення і AVR Вбудований
Функції.

"__AVR_ARCH__"
Вбудований макрос, який розв’язується до десяткового числа, що ідентифікує архітектуру та
залежить від "-mmcu=mcu" варіант. Можливі значення:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

та цінності mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7" відповідно. Якщо mcu
вказує пристрій, цей вбудований макрос встановлюється відповідним чином. Наприклад, с
"-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__"
Пристрій має «ELPM Rn,Z" та «ELPM Rn,Z+" інструкціям.

"__AVR_HAVE_MOVW__"
Пристрій має інструкцію «MOVW» для виконання 16-розрядних переміщень регістра-реєстру.

"__AVR_HAVE_LPMX__"
Пристрій має «LPM Rn,Z" та «ЛПМ Рn,Z+" інструкціям.

"__AVR_HAVE_MUL__"
Пристрій має апаратний множник.

"__AVR_HAVE_JMP_CALL__"
На пристрої є інструкції «JMP» і «CALL». Це стосується пристроїв з
принаймні 16@tie{}КіБ програмної пам’яті, і якщо «-mshort-calls» не встановлено.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Пристрій має інструкції «EIJMP» і «EICALL». Це стосується пристроїв
з більш ніж 128@tie{}КіБ пам’яті програм. Це також означає, що програма
лічильник (ПК) має ширину 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",
відповідно.

"__НІ_ПРЕРІВ__"
Цей макрос відображає параметр командного рядка "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Деякі пристрої AVR (AT90S8515, ATmega103) не повинні пропускати 32-розрядні інструкції через
апаратна помилка. Інструкції пропуску: "SBRS", "SBRC", "SBIS", "SBIC" і "CPSE".
Другий макрос визначається, лише якщо також встановлено "__AVR_HAVE_JMP_CALL__".

"__AVR_SFR_OFFSET__=зміщення"
Інструкції, які можуть звертатися до регістрів спеціальних функцій введення-виводу безпосередньо, наприклад "IN",
"OUT", "SBI" і т. д. можуть використовувати іншу адресу, наче адресована інструкцією до
доступ до оперативної пам’яті, як-от «LD» або «STS». Це зміщення залежить від архітектури пристрою та має
віднімається від адреси оперативної пам’яті, щоб отримати відповідну адресу вводу/виводу@tie{}.

"__WITH_AVRLIBC__"
Компілятор налаштований на використання разом з AVR-Libc. Див
Параметр налаштування "--with-avrlibc".

Чорношкірий опції

-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, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592. Необов’язковий огляд вказує
кремнієва версія цільового процесора Blackfin. Будь-які обхідні шляхи, доступні для
буде ввімкнено цільову силіконову ревізію. Якщо огляд is ніхто, обхідних шляхів немає
увімкнено. Якщо огляд is будь-який, усі обхідні шляхи для цільового процесора будуть
увімкнено. Макрос "__SILICON_REVISION__" визначається двома шістнадцятковими цифрами
що представляють головне та другорядне числа в силіконовій редакції. Якщо огляд is
ніхто, "__SILICON_REVISION__" не визначено. Якщо огляд is будь-який, то
"__SILICON_REVISION__" визначено як 0xffff. Якщо це необов'язково огляд НЕ
GCC припускає останню відому силіконову версію цільового Blackfin
процесор.

Підтримка bf561 є неповним. Для bf561, Визначено лише макрос процесора.
Без цієї опції, bf532 за замовчуванням використовується як процесор. Відповідний
попередньо визначені макроси процесора для центральний процесор має бути визначено. І для bfin-elf ланцюжок інструментів,
це призводить до того, що апаратний BSP, наданий libgloss, буде пов'язаний у if -msim НЕ
дано.

-msim
Вказує, що програма буде запущена на симуляторі. Це викликає симулятор
BSP, наданий libgloss для посилання. Цей параметр діє лише для bfin-elf
ланцюжок інструментів. Деякі інші варіанти, наприклад - середня спільна бібліотека і -mfdpic, мати на увазі
-msim.

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-frame-pointer знімає рамку
покажчик для всіх функцій, що може ускладнити налагодження.

-mspecld-аномалія
Якщо ввімкнено, компілятор переконається, що згенерований код не містить
спекулятивні навантаження після інструкцій переходу. Якщо використовується ця опція,
"__WORKAROUND_SPECULATIVE_LOADS" визначено.

-mno-specld-anomaly
Не генеруйте зайвий код, щоб запобігти спекулятивним навантаженням.

-mcsync-аномалія
Якщо ввімкнено, компілятор переконається, що згенерований код не містить CSYNC
або інструкції SSYNC занадто швидко після умовних розгалужень. Якщо використовується ця опція,
"__WORKAROUND_SPECULATIVE_SYNCS" визначено.

-mno-csync-аномалія
Не генеруйте додатковий код, щоб запобігти появі інструкцій CSYNC або SSYNC
незабаром після умовної гілки.

-mlow-64k
Коли ввімкнено, компілятор може вільно використовувати знання, що цілий
Програма вміщається в низькі 64 КБ пам'яті.

-mno-low-64k
Припустимо, що програма довільно велика. Це значення за замовчуванням.

-mstack-check-l1
Виконайте перевірку стека, використовуючи інформацію, поміщену uClinux в пам’ять L1
ядро

- середня спільна бібліотека
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ідентифікатора бібліотеки. Це дозволяє
для виконання на місці та спільних бібліотек у середовищі без віртуальної пам’яті
управління. Цей варіант має на увазі -fPIC. З bfin-elf ціль, цей параметр передбачає
-msim.

-mno-id-shared-library
Створіть код, який не передбачає використання спільних бібліотек на основі ідентифікатора. Це
за замовчуванням.

-mleaf-id-shared-library
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ID бібліотеки, але припускає
що ця бібліотека або виконуваний файл не буде пов’язуватися з іншими спільними бібліотеками ідентифікаторів.
Це дозволяє компілятору використовувати швидший код для переходів і викликів.

-mno-leaf-id-shared-library
Не думайте, що компілюваний код не буде зв’язуватися з жодними спільними бібліотеками ідентифікаторів.
Повільніший код буде згенеровано для insns переходу та виклику.

-mshared-library-id=n
Вказав ідентифікаційний номер спільної бібліотеки на основі ідентифікатора, яка збирається.
Якщо вказати значення 0, це згенерує більш компактний код, якщо вказати інші значення
примусово розподілити цей номер у поточній бібліотеці, але більше немає місця або
ефективніше, ніж пропускати цей варіант.

-msep-дані
Створіть код, який дозволяє розташовувати сегмент даних в іншій області пам'яті
з текстового сегмента. Це дозволяє виконувати на місці в середовищі без
управління віртуальною пам'яттю шляхом усунення переміщення текстового розділу.

-mno-sep-data
Створіть код, який передбачає, що сегмент даних слідує за текстовим сегментом. Це
за замовчуванням.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 24-бітового діапазону адресації
зміщена версія інструкції виклику підпрограми.

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновить
поведінка за замовчуванням. Зауважте, що ці перемикачі не впливають на те, як генерує компілятор
код для обробки викликів функцій через покажчики функцій.

-mfast-fp
Посилання на швидку бібліотеку з плаваючою комою. Ця бібліотека розслабляє IEEE
правила стандарту з плаваючою комою для перевірки введених даних щодо не-число (NAN), у
інтерес до виконання.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic.

- багатоядерний
Створіть окрему програму для багатоядерного процесора Blackfin. Правильні стартові файли і
скрипти посилань будуть використовуватися для підтримки багатоядерності. Цей параметр визначає
"__BFIN_MULTICORE". Його можна використовувати тільки з -mcpu=bf561[-огляд]. Його можна використовувати
з -mcorea or -mcoreb. Якщо він використовується без -mcorea or -mcoreb, Одномісний
Використовується прикладна/двоядерна модель програмування. У цій моделі основна функція
Ядро B має називатися як coreb_main. Якщо він використовується з -mcorea or -mcoreb, один
Використовується прикладна модель програмування на ядро. Якщо цей параметр не використовується, одиночний
використовується базова модель прикладного програмування.

-mcorea
Створіть окрему програму для Core A BF561, використовуючи одну програму на ядро
модель програмування. Для підтримки Core A будуть використовуватися правильні стартові файли та сценарії посилань.
Цей параметр визначає "__BFIN_COREA". Його необхідно використовувати з - багатоядерний.

-mcoreb
Створіть окрему програму для Core B BF561, використовуючи одну програму на ядро
модель програмування. Для підтримки Core B будуть використовуватися правильні стартові файли та сценарії посилань.
Цей параметр визначає "__BFIN_COREB". Коли використовується цей параметр, має бути coreb_main
використовується замість основного. Його необхідно використовувати з - багатоядерний.

-msdram
Створіть окрему програму для SDRAM. Будуть правильні стартові файли та скрипти посилань
використовується для розміщення програми в SDRAM. Завантажувач повинен ініціалізувати SDRAM перед завантаженням
додаток у SDRAM. Цей параметр визначає "__BFIN_SDRAM".

-micplb
Припустимо, що ICPLB увімкнено під час виконання. Це впливає на певну аномалію
обхідні шляхи. Для цілей Linux за замовчуванням передбачається, що ICPLB увімкнено; для
автономні програми за замовчуванням вимкнено.

C6X опції

-березень=ім'я
Це визначає назву цільової архітектури. GCC використовує це ім’я для визначення
які інструкції він може видавати під час генерації коду складання. Допустимі
назви: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з малим порядком байтів. Це значення за замовчуванням.

-msim
Виберіть файли запуску та скрипт компоновника, які підходять для симулятора.

-msdata=за замовчуванням
Помістіть невеликі глобальні та статичні дані в .neardata розділ, на який вказує
реєстр «В14». Помістіть невеликі неініціалізовані глобальні та статичні дані в файл .bss розділ
який примикає до .neardata розділ. Помістіть невеликі дані лише для читання в файл .rodata
розділ. Для великих фрагментів даних використовуються відповідні розділи .fardata, .далеко
і .const.

-msdata=все
Помістіть усі дані, а не лише невеликі об’єкти, у розділи, зарезервовані для малих даних, і
використовуйте адресацію щодо регістру «B14» для доступу до них.

-msdata=немає
Не використовуйте розділи, зарезервовані для невеликих даних, і використовуйте абсолютні адреси
отримати доступ до всіх даних. Помістіть усі ініціалізовані глобальні та статичні дані в файл .fardata розділ
і всі неініціалізовані дані в .далеко розділ. Помістіть всі постійні дані в .const
.

КРІС опції

Ці параметри визначені спеціально для портів CRIS.

-березень=архітектурного типу
-mcpu=архітектурного типу
Згенеруйте код для вказаної архітектури. Вибір для архітектурного типу він має
v3, v8 і v10 для ETRAX 4, ETRAX 100 та ETRAX 100 LX відповідно. За замовчуванням є v0
крім cris-axis-linux-gnu, де за замовчуванням v10.

-mtune=архітектурного типу
Налаштуйтеся на архітектурного типу все, що стосується згенерованого коду, за винятком
ABI та набір доступних інструкцій. Вибір для архітектурного типу він має
те саме, що і для -березень=архітектурного типу.

-mmax-stack-frame=n
Попереджати, коли кадр стека функції перевищує n байт

-metrax4
-metrax100
Варіанти -metrax4 і -metrax100 є синонімами до -march=v3 і -march=v8
відповідно.

-mmul-bug-обхідний шлях
-mno-mul-bug-обхідний шлях
Усуньте помилку в інструкціях "muls" і "mulu" для моделей ЦП, де вона є
застосовується. Ця опція активна за замовчуванням.

-mpdebug
Увімкніть специфічну для CRIS детальну інформацію, пов’язану з налагодженням, у коді складання. Це
опція також має ефект вимкнення #NO_APP Індикатор форматованого коду до
асемблера на початку файлу збірки.

-mcc-init
Не використовуйте результати коду умови з попередньої інструкції; завжди випускати порівняти і
тестові інструкції перед використанням кодів умов.

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

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
Ці параметри (без опцій) упорядковують (виключають домовленості) для стека-фрейму,
окремі дані та константи, які потрібно вирівняти для максимального розміру доступу до даних
для обраної моделі процесора. За замовчуванням встановлюється 32-розрядне вирівнювання. ABI
Ці параметри не впливають на такі деталі, як макет структури.

-m32-біт
-m16-біт
-m8-біт
Подібно до параметрів stack-data- та const-align вище, ці параметри організовують
стек-кадр, записувані дані та константи мають бути вирівняними за 32, 16 або 8 біт.
За замовчуванням встановлено 32-бітове вирівнювання.

-мно-пролог-епілог
-мпролог-епілог
з -мно-пролог-епілог, нормальна функція пролог і епілог, які налаштовані
кадр стека пропущено, а інструкції повернення або послідовності повернення відсутні
генерується в коді. Використовуйте цю опцію тільки разом із візуальним оглядом
скомпільований код: жодних попереджень чи помилок не генерується, коли мають бути збережені регістри виклику
збережено, або потрібно виділити сховище для локальної змінної.

-mno-gotplt
-mgotplt
з -fpic і -fPIC, не генеруйте (генеруйте) послідовності інструкцій, які завантажуються
адреси функцій із частини PLT GOT, а не (традиційна для інших
архітектури) виклики до PLT. За замовчуванням є -mgotplt.

-melf
Застарілий параметр no-op розпізнається лише за допомогою cris-axis-elf і cris-axis-linux-gnu
цілі.

-mlinux
Застарілий параметр no-op розпізнається лише для цільової групи cris-axis-linux-gnu.

-сим
Ця опція, визнана для cris-axis-elf, організовує зв'язок із введенням-виводом
функції з бібліотеки симулятора. Код, ініціалізовані дані та дані, ініціалізовані нулем
виділяються послідовно.

-sim2
Люблю -сим, але передайте параметри компонувальника, щоб знайти ініціалізовані дані за 0x40000000 і нуль-
ініціалізовані дані 0x80000000.

CR16 опції

Ці параметри визначені спеціально для портів CR16.

-mmac
Увімкніть використання інструкцій множення-нагромадження. Вимкнено за замовчуванням.

-mcr16cplus
-mcr16c
Згенеруйте код для архітектури CR16C або CR16C+. Архітектура CR16C+ за замовчуванням.

-msim
Посилає бібліотеку libsim.a, сумісну з симулятором. Застосовується до ельфа
тільки компілятор.

-м'ята32
Виберіть тип цілого числа як 32-бітну ширину.

-mbit-ops
Генерує інструкції sbit/cbit для маніпуляцій з бітами.

-mdata-model=модель
Виберіть модель даних. Вибір для модель він має близько, далеко or середа. середа є за замовчуванням.
Тим не менш, далеко є недійсним, якщо вибрано параметр -mcr16c, оскільки архітектура CR16C ні
підтримка далекої моделі даних.

Дарвін опції

Ці параметри визначені для всіх архітектур під керуванням операційної системи Darwin.

FSF GCC on Darwin не створює «жирні» об'єктні файли; він створить об’єктний файл для
єдина архітектура, для якої він був створений. GCC від Apple щодо Дарвіна дійсно створює
"жирні" файли, якщо їх декілька -арх використовуються варіанти; це робиться за допомогою компілятора або
компонувальник кілька разів і об’єднання результатів разом з ліпо.

Підтип створеного файлу (наприклад ppc7400 or ppc970 or i686) визначається
прапори, які вказують ISA, на який націлено GCC, наприклад -mcpu or - марш,
-force_cpusubtype_ALL параметр можна використовувати, щоб змінити це.

Інструменти Дарвіна відрізняються за своєю поведінкою, коли вони представлені з невідповідністю ISA. The
монтажник, as, дозволить використовувати лише інструкції, які дійсні для підтипу
файл, який він створює, тому ви не можете помістити 64-розрядні інструкції в a ppc750 файл об’єкта.
Компонувальник для спільних бібліотек, /usr/bin/libtool, не вийде і надрукує помилку, якщо запитають
щоб створити спільну бібліотеку з менш обмеженим підтипом, ніж її вхідні файли (for
приклад, намагаючись поставити a ppc970 об'єктний файл у a ppc7400 бібліотека). Лінкер для
виконувані файли, ld, тихо надасть виконуваному файлу найбільш обмежувальний підтип з усіх
його вхідні файли.

-Fреж
Додайте каталог фреймворку реж до початку списку довідників для пошуку
для заголовних файлів. Ці каталоги чергуються з каталогами, зазначеними в -I
і скануються в порядку зліва направо.

Каталог фреймворків — це каталог із фреймворками. Рамка - це а
каталог з a "Заголовки" та / або "PrivateHeaders" каталогу, що міститься безпосередньо в ньому
що закінчується на ".framework". Ім'я фреймворка - це ім'я цього каталогу
за винятком ".framework". Заголовки, пов’язані з фреймворком, знаходяться в одному з
ці два каталоги, с "Заголовки" обшукується першим. Підрамник - це a
каталог фреймворку, який знаходиться у фреймворку «Рамки» каталог. Включає з
Заголовки subframework можуть з’являтися лише в заголовку фреймворка, який містить файл
subframework, або в заголовку підрамки. Два підфреймворка є рідними, якщо
вони відбуваються в однакових рамках. Підфреймворк не повинен мати те саме ім'я, що і a
рамки, буде видано попередження, якщо це буде порушено. Наразі підрамник
не може мати підфреймворків, у майбутньому механізм може бути розширений для підтримки
це Стандартні рамки можна знайти в "/Система/Бібліотека/Фреймворки" і
"/Бібліотека/Фреймворки". Приклад включення виглядає як "#include ",
де Рамки позначає назву фреймворку, а header.h знаходиться в
"PrivateHeaders" or "Заголовки" каталог.

-iframeworkреж
Люблю -F за винятком того, що каталог розглядається як системний каталог. Основна відмінність
між цим -iframework і -F це те, що з -iframework компілятор не попереджає
про конструкції, що містяться у файлах заголовків, знайдених через реж. Цей варіант дійсний
тільки для сімейства мов C.

– здогадався
Видавати інформацію про налагодження для символів, які використовуються. Для формату налагодження STABS,
це дозволяє -feliminate-unused-debug-symbols. За замовчуванням увімкнено.

-gfull
Видавати інформацію про налагодження для всіх символів і типів.

-mmacosx-version-min=версія
Найстарішою версією MacOS X, на якій буде працювати цей виконуваний файл, є версія. Типовий
значення версія включають 10.1, 10.2 і 10.3.9.

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

-mkernel
Увімкнути режим розробки ядра. The -mkernel набори опцій -статичний, -fno-загальний,
-fno-cxa-atexit, -fno-виключення, -fno-non-call-exceptions, -fapple-kext, -fno-слабий
і -fno-rtti де це застосовно. Цей режим також встановлюється -mno-altivec, -msoft-float,
-fno-вбудований і -mlong-гілка для цілей PowerPC.

-mone-byte-bool
Замінити значення за замовчуванням для бул так що sizeof(bool)==1. За замовчуванням sizeof(bool) is 4
при компіляції для Darwin/PowerPC і 1 при компіляції для Darwin/x86, тому цей параметр
не впливає на x86.

Увага! повне г, повне г,, показали, від, номер, XNUMX -mone-byte-bool switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використання цього перемикача може знадобитися
перекомпіляції всіх інших модулів програми, включаючи системні бібліотеки. Використовуй це
переключитися, щоб відповідати моделі даних, яка не є стандартною.

-mfix-and-continue
-закріпи-і-продовж
-findirect-data
Створення коду, придатного для швидкої розробки. Необхідно, щоб увімкнути gdb
динамічно завантажувати файли ".o" у вже запущені програми. -findirect-data і
-закріпи-і-продовж надаються для зворотної сумісності.

-всі_завантаження
Завантажує всі члени статичних архівних бібліотек. Бачити людину ld(1) для отримання додаткової інформації.

-arch_errors_fatal
Помилки, пов’язані з файлами, які мають неправильну архітектуру, будуть фатальними.

-bind_at_load
Позначає вихідний файл таким чином, що динамічний компонувальник зв’язує всі
невизначені посилання під час завантаження або запуску файлу.

- пучок
Створіть файл формату пакета Mach-o. Бачити людину ld(1) для отримання додаткової інформації.

-bundle_loader виконуваний файл
Цей параметр визначає виконуваний файл який буде завантажувати вихідний файл збірки
пов'язаний. Бачити людину ld(1) для отримання додаткової інформації.

-dynamiclib
Після передачі цієї опції GCC створить динамічну бібліотеку замість виконуваного файлу
при зв'язуванні, використовуючи Дарвін libtool команда

-force_cpusubtype_ALL
Це призводить до того, що вихідний файл GCC має ALL підтип, замість контрольованого
la -mcpu or - марш варіант.

-allowable_client ім'я_клієнта
-ім'я_клієнта
-сумісність_версія
-Поточна версія
-мертва_смуга
-файл залежностей
-dylib_file
-dylinker_install_name
-динамічний
-список_експортованих_символів
- список файлів
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-база_зображення
-у цьому
-ім'я_інсталяції
-keep_private_externs
-багатомодульний
-множення_визначено
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-нопребінд
-noseglinkedit
-pagezero_size
-передв'язка
-prebind_all_twolevel_modules
-private_bundle
-relocs_лише_читання
-сектальний
-сектооб'єкти символи
- навіщо навантажувати
-seg1addr
-sectcreate
-сектооб'єкти символи
-секторний
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_name_file
-seglinkedit
-сегпрот
-segs_read_only_addr
-segs_read_write_addr
-одномодульний
-статичний
-під_бібліотека
-суб_парасолька
-дворівневий простір імен
-парасолька
-невизначений
-список_неекспортованих_символів
-weak_reference_misparches
-що завантажено
Ці параметри передаються лінкеру Дарвіна. Довідкова сторінка Darwin Linker описує
їх детально.

Грудень Альфа опції

Ці -m визначено параметри для реалізацій DEC Alpha:

-mno-soft-float
-msoft-float
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою
операції. Коли -msoft-float вказано, функціонує в libgcc.a буде звик
виконувати операції з плаваючою комою. Хіба що їх замінять підпрограми, які емулюють
операції з плаваючою комою або скомпільовані таким чином, щоб викликати такі емуляції
підпрограм, ці підпрограми будуть виконувати операції з плаваючою комою. Якщо ви компілюєте
для альфа-версії без операцій з плаваючою комою ви повинні переконатися, що бібліотека є
побудований так, щоб їх не називати.

Зауважте, що альфа-реалізації без операцій з плаваючою комою повинні мати
регістри з плаваючою комою.

-mfp-reg
-mno-fp-regs
Згенеруйте код, який використовує (не використовує) набір регістрів з плаваючою комою. -mno-fp-regs
мається на увазі -msoft-float. Якщо набір регістрів з плаваючою комою не використовується, з плаваючою комою
операнди передаються в цілих регістрах, як якщо б вони були цілими числами і з плаваючою комою
результати передаються в $0 замість $f0. Це нестандартна послідовність викликів, тому
будь-яка функція з аргументом з плаваючою комою або значенням, що повертається, викликаним зібраним кодом
з -mno-fp-regs також має бути скомпільований з цим параметром.

Типовим використанням цієї опції є створення ядра, яке не використовує, а отже, потребує
не зберігати та не відновлювати, будь-які регістри з плаваючою комою.

-миее
Архітектура Alpha реалізує апаратне забезпечення з плаваючою комою, оптимізоване для максимуму
продуктивність. Здебільшого він відповідає стандарту IEEE з плаваючою комою. однак,
для повної відповідності необхідна допомога з програмним забезпеченням. Ця опція генерує код
повністю IEEE-сумісний код крім який неточний прапор не підтримується (див. нижче).
Якщо цей параметр увімкнено, макрос препроцесора "_IEEE_FP" визначається під час
компіляція. Отриманий код менш ефективний, але здатний правильно підтримувати
денормалізовані числа та виняткові значення IEEE, такі як не-число та плюс/мінус
нескінченність. Інші компілятори Alpha називають цю опцію -ieee_with_no_neexact.

-міее-з-неточним
Це схоже -миее крім згенерованого коду також підтримує IEEE неточний прапор.
Увімкнення цієї опції призводить до того, що згенерований код реалізує повністю сумісний IEEE
математика. На додаток до "_IEEE_FP", "_IEEE_FP_EXACT" визначається як макрос препроцесора.
У деяких альфа-реалізаціях отриманий код може виконуватися значно повільніше, ніж
код, згенерований за замовчуванням. Оскільки існує дуже мало коду, який залежить від
неточний прапор, зазвичай не слід вказувати цей параметр. Викликають інші компілятори Alpha
цей варіант -ieee_with_neexact.

-mfp-trap-mode=режим пастки
Цей параметр визначає, які пастки, пов’язані з плаваючою комою, увімкнено. Інша Альфа
компілятори називають цю опцію -fptm режим пастки. Режим пастки можна встановити на один з чотирьох
значення:

n Це налаштування за замовчуванням (звичайне). Єдині пастки, які ввімкнені, це
ті, які не можна вимкнути в програмному забезпеченні (наприклад, поділ на нульову пастку).

u На додаток до пасток, включених за допомогою n, також увімкнено уловлювачі нижнього потоку.

su Люблю u, але інструкції позначено як безпечні для завершення програмного забезпечення (див
Посібник з архітектури Alpha для деталей).

Sui Люблю su, але також увімкнено неточні пастки.

-mfp-rounding-mode=режим округлення
Вибір режиму округлення IEEE. Інші компілятори Alpha називають цю опцію -fprm
режим округлення, режим округлення може бути одним з:

n Звичайний режим округлення IEEE. Числа з плаваючою комою округлюються до найближчого
номер машини або до парного номера машини в разі нічиєї.

m Округлюємо до мінус нескінченності.

c Режим рубленого округлення. Числа з плаваючою комою округлюються до нуля.

d Режим динамічного округлення. Поле в регістрі керування з плаваючою комою (fpcrСм.
Довідковий посібник з архітектури Alpha) керує діючим режимом округлення. C
бібліотека ініціалізує цей регістр для округлення до плюс нескінченності. таким чином,
якщо ваша програма не змінює файл fpcr, d відповідає округлінню до плюса
нескінченність.

-mtrap-precision=пастка-точність
В архітектурі Alpha пастки з плаваючою комою є неточними. Це означає без
програмне забезпечення неможливо відновити з плаваючої пастки та програми
виконання зазвичай потрібно припинити. GCC може генерувати код, який може допомогти
обробники пасток операційної системи для визначення точного розташування, яке викликало а
пастка з плаваючою комою. Залежно від вимог програми, різні
можна вибрати рівні точності:

p Точність програми. Цей параметр є за замовчуванням і означає, що може лише обробник пастки
визначити, яка програма викликала виняток з плаваючою комою.

f Точність функції. Обробник пастки може визначити функцію, яка викликала a
виняток з плаваючою комою.

i Точність інструкції. Обробник пастки може визначити точну інструкцію
викликав виняток з плаваючою комою.

Інші компілятори Alpha надають еквівалентні параметри, які називаються -scope_safe і
-resumption_safe.

-mieee-відповідний
Цей параметр позначає згенерований код як відповідний IEEE. Ви не повинні використовувати цю опцію
якщо ви також не вкажете -mtrap-precision=i і будь-який -mfp-trap-mode=su or
-mfp-trap-mode=sui. Єдиний його ефект - випускати лінію .flag 48 у функції
пролог згенерованого файлу збірки. У DEC Unix це має такий ефект
Математичні підпрограми бібліотеки, що відповідають IEEE, будуть пов’язані.

-mbuild-constants
Зазвичай GCC перевіряє 32- або 64-розрядну цілу константу, щоб побачити, чи може вона її створити
з менших констант у двох-трьох інструкціях. Якщо він не може, він виведе файл
константу як литерал і генерувати код для завантаження його з сегмента даних під час виконання.

Використовуйте цей параметр, щоб вимагати створення GCC всі цілі константи з використанням коду, навіть якщо
потрібно більше інструкцій (максимум шість).

Зазвичай ви використовуєте цю опцію для створення спільної бібліотеки динамічного завантажувача. Сама
спільна бібліотека, вона повинна перемістити себе в пам'ять, перш ніж знайти змінні
і константи у власному сегменті даних.

-мальфа-ас
-mgas
Виберіть, чи потрібно генерувати код, який збирається асемблером, наданим постачальником
(-мальфа-ас) або асемблером GNU -mgas.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-ммакс
-мно-макс
Вкажіть, чи повинен GCC генерувати код для використання додаткових BWX, CIX, FIX і MAX
набори інструкцій. За замовчуванням використовуються набори інструкцій, які підтримуються центральним процесором
тип, зазначений через -mcpu= або параметр ЦП, на якому було побудовано GCC, якщо такого не було
вказано.

-mfloat-vax
-mfloat-ieee
Створіть код, який використовує (не використовує) арифметику VAX F і G з плаваючою комою
одинарної та подвійної точності IEEE.

-mexplicit-relocs
-mno-explicit-relocs
Старші асемблери Alpha не передбачали жодного способу генерувати переміщення символів, окрім як через
макроси асемблера. Використання цих макросів не дозволяє оптимально планувати інструкції.
GNU binutils починаючи з версії 2.12 підтримує новий синтаксис, який дозволяє компілятору
чітко позначте, які переміщення мають застосовуватися до яких інструкцій. Цей варіант є
в основному корисний для налагодження, оскільки GCC виявляє можливості асемблера, коли він
будується і відповідно встановлює значення за замовчуванням.

-msmall-data
-mlarge-data
Коли -mexplicit-relocs фактично, доступ до статичних даних здійснюється через gp-відносний
переїзди. Коли -msmall-data використовується, в них розміщуються об’єкти довжиною 8 байт або менше
a невеликий дані область (розділи ".sdata" і ".sbss") і доступ до них здійснюється через 16-бітовий
переміщення з реєстру $gp. Це обмежує розмір невеликої області даних до
64 КБ, але дозволяє отримати прямий доступ до змінних за допомогою однієї інструкції.

За замовчуванням - -mlarge-data. За допомогою цього параметра область даних обмежена трохи нижче
2 Гб. Програми, які вимагають більше 2 Гб даних, повинні використовувати "malloc" або "mmap".
розподілити дані в купі, а не в сегменті даних програми.

Під час створення коду для спільних бібліотек, -fpic мається на увазі -msmall-data і -fPIC
мається на увазі -mlarge-data.

-msmall-text
-великий текст
Коли -msmall-text використовується, компілятор припускає, що код всієї програми
(або спільна бібліотека) поміщається в 4 МБ, і, таким чином, доступний за допомогою інструкції розгалуження.
Коли -msmall-data Якщо використовується, компілятор може припустити, що всі локальні символи спільні
однакове значення $gp, і таким чином зменшується кількість інструкцій, необхідних для функції
дзвонити з 4 до 1.

За замовчуванням - -великий текст.

-mcpu=cpu_type
Встановіть набір команд і параметри планування команд для типу машини
cpu_type. Ви можете вказати або EV назва стилю або відповідний номер мікросхеми.
GCC підтримує параметри планування для сімейства процесорів EV4, EV5 і EV6 і
вибере значення за замовчуванням для набору інструкцій із вказаного вами процесора.
Якщо ви не вкажете тип процесора, GCC за замовчуванням буде використовувати процесор, на якому
був побудований компілятор.

Підтримувані значення для cpu_type він має

ev4
ev45
21064
Планується як EV4 і не має розширень набору інструкцій.

ev5
21164
Планується як EV5 і не має розширень набору інструкцій.

ev56
21164a
Планується як EV5 і підтримує розширення BWX.

pca56
21164pc
21164PC
Планується як EV5 і підтримує розширення BWX і MAX.

ev6
21264
Планується як EV6 і підтримує розширення BWX, FIX і MAX.

ev67
21264a
Планується як EV6 і підтримує розширення BWX, CIX, FIX і MAX.

Нативні ланцюги інструментів також підтримують цю цінність рідний, яка обирає найкращу архітектуру
варіант для хост-процесора. -mcpu = рідний не має ефекту, якщо GCC не визнає
процесор.

-mtune=cpu_type
Встановіть лише параметри планування інструкцій для типу машини cpu_type,
набір інструкцій не змінено.

Нативні ланцюги інструментів також підтримують цю цінність рідний, яка обирає найкращу архітектуру
варіант для хост-процесора. -mtune = рідний не має ефекту, якщо GCC не визнає
процесор.

-memory-latency=час
Встановлює затримку, яку планувальник повинен приймати для типових посилань на пам’ять, як їх бачить
додаток. Це число сильно залежить від використовуваних шаблонів доступу до пам'яті
за програмою та розміром зовнішнього кешу на машині.

Допустимі варіанти для час він має

номер
Десяткове число, що представляє тактовий цикл.

L1
L2
L3
основний
Компілятор містить оцінки кількості тактів для "типових" EV4 &
Апаратне забезпечення EV5 для кешів рівня 1, 2 і 3 (також називаються Dcache, Scache і
Bcache), а також в основну пам'ять. Зверніть увагу, що L3 дійсний лише для EV5.

Грудень Альфа/VMS опції

Ці -m визначені параметри для реалізацій DEC Alpha/VMS:

-mvms-коди повернення
Повернути коди умов VMS з main. За замовчуванням повертається умова стилю POSIX
(наприклад, коди помилок).

-mdebug-main=префікс
Позначте першу процедуру, назва якої починається з префікс як основна рутина для
налагоджувач.

-mmalloc64
За замовчуванням 64-розрядні процедури виділення пам’яті.

FR30 опції

Ці параметри визначені спеціально для порту FR30.

-msmall-модель
Використовуйте модель малого адресного простору. Це може створити менший код, але це припускає
що всі символічні значення та адреси вписуються в 20-бітовий діапазон.

-мно-лсім
Припустимо, що підтримка під час виконання була надана, і тому немає необхідності включати
бібліотека симулятора (libsim.a) у командному рядку компонувальника.

FRV опції

-mgpr-32
Використовуйте лише перші 32 регістри загального призначення.

-mgpr-64
Використовуйте всі 64 регістри загального призначення.

-mfpr-32
Використовуйте лише перші 32 регістри з плаваючою комою.

-mfpr-64
Використовуйте всі 64 регістри з плаваючою комою.

-mhard-float
Використовуйте інструкції з обладнання для операцій з плаваючою комою.

-msoft-float
Використовуйте бібліотечні підпрограми для операцій з плаваючою комою.

-malloc-cc
Динамічно розподіляти регістри коду умов.

-mfixed-cc
Не намагайтеся динамічно виділити регістри коду умов, використовуйте лише "icc0" і
"fcc0".

-mdword
Змініть ABI на використання подвійних слів insns.

-mno-dword
Не використовуйте інструкції з подвійних слів.

-mподвійний
Використовуйте подвійні інструкції з плаваючою комою.

-мно-подвійний
Не використовуйте подвійні інструкції з плаваючою комою.

-mmedia
Використовуйте інструкції зі ЗМІ.

-мно-медіа
Не використовуйте інструкції з медіа.

-ммуладд
Використовуйте інструкції множення та додавання/віднімання.

-мно-муладд
Не використовуйте інструкції множення та додавання/віднімання.

-mfdpic
Виберіть FDPIC ABI, який використовує дескриптори функцій для представлення покажчиків
функції. Без будь-яких опцій, пов’язаних із PIC/PIE, це означає -fPIE. З -fpic or
-fpie, передбачається, що записи GOT і невеликі дані знаходяться в межах 12-бітового діапазону від GOT
базова адреса; з -fPIC or -fPIE, GOT зміщення обчислюються з 32 бітами. З
bfin-elf ціль, цей параметр передбачає -msim.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic. За замовчуванням увімкнено, якщо
оптимізація для швидкості та компіляція для спільних бібліотек (тобто, -fPIC or -fpic), або
коли варіант оптимізації, наприклад -O3 або вище присутній у командному рядку.

-mTLS
Припустимо великий сегмент TLS під час генерації локального коду потоку.

-mtls
Не припускайте великий сегмент TLS під час генерації локального коду потоку.

-mgprel-ro
Увімкнути використання переміщень "GPREL" в FDPIC ABI для даних, які, як відомо, знаходяться в
розділи лише для читання. Він увімкнено за замовчуванням, за винятком -fpic or -fpie: незважаючи на
це може допомогти зменшити глобальну таблицю зміщень, вона обмінює 1 інструкцію на 4. З
-fPIC or -fPIE, він обмінює 3 інструкції на 4, одну з яких може використовувати декілька
символів, і це уникає необхідності запису GOT для посилання на символ, тому це
більше шансів на перемогу. якщо це не так, -mno-gprel-ro можна використовувати для його вимкнення.

-multilib-library-pic
Посилання на бібліотеки зображень (бібліотека, а не FD). Це мається на увазі -mlibrary-pic, так само
як мимо -fPIC і -fpic без -mfdpic. Ви ніколи не повинні використовувати його явно.

-mlinked-fp
Дотримуйтесь вимоги EABI, щоб завжди створювати покажчик кадру, коли кадр стека
виділяється. Цей параметр увімкнено за замовчуванням і його можна вимкнути за допомогою
-mno-linked-fp.

-mlong-дзвінки
Використовуйте непряму адресацію для виклику функцій за межами поточного блоку компіляції. Це
дозволяє розміщувати функції в будь-якому місці 32-бітового адресного простору.

- злоякісні мітки
Спробуйте вирівняти мітки до 8-байтової межі, вставивши nops у попередній пакет.
Цей параметр діє лише тоді, коли ввімкнено пакування VLIW. Це не створює нового
пакети; він просто додає нуль до існуючих.

-mlibrary-pic
Згенеруйте незалежний від позиції код EABI.

-macc-4
Використовуйте лише перші чотири регістри накопичувача носія.

-macc-8
Використовуйте всі вісім регістрів накопичувача носія.

-mpack
Упакуйте інструкції VLIW.

-мно-пакет
Не пакуйте інструкції VLIW.

-мно-прапори
Не позначайте перемикачі ABI в e_flags.

-mcond-move
Увімкнути використання вказівок умовного переміщення (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-cond-move
Вимкніть використання інструкцій умовного переміщення.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mscc
Увімкнути використання інструкцій умовного набору (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-scc
Вимкніть використання інструкцій умовного набору.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mcond-exec
Увімкнути використання умовного виконання (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-cond-exec
Вимкнути використання умовного виконання.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mvliw-філія
Запустіть пропуск, щоб упакувати гілки в інструкції VLIW (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-vliw-філія
Не запускайте пропуск для упаковки гілок в інструкції VLIW.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mmulti-cond-exec
Увімкнути оптимізацію "&&" і "||" в умовному виконанні (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-multi-cond-exec
Вимкнути оптимізацію «&&» та «||» в умовному виконанні.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mnested-cond-exec
Увімкнути вкладені умовні оптимізації виконання (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-nested-cond-exec
Вимкнути вкладені умовні оптимізації виконання.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-moptimize-membar
Цей перемикач видаляє зайві інструкції "membar" з коду, згенерованого компілятором.
Він включений за замовчуванням.

-mno-optimize-membar
Цей перемикач вимикає автоматичне видалення зайвих інструкцій "membar" з
згенерований код.

-mtomcat-stats
Заставте газ роздрукувати статистику котів.

-mcpu=центральний процесор
Виберіть тип процесора, для якого потрібно генерувати код. Можливі значення frv, fr550,
кіт, fr500, fr450, fr405, fr400, fr300 і простий.

GNU / Linux опції

Ці -m параметри визначені для цілей GNU/Linux:

-mglibc
Використовуйте бібліотеку GNU C. Це значення за замовчуванням, крім увімкненого *-*-linux-*uclibc* і
*-*-linux-*android* цілі.

-muclibc
Використовуйте бібліотеку uClibc C. Це увімкнено за замовчуванням *-*-linux-*uclibc* цілі.

-мбіонічний
Використовуйте бібліотеку Bionic C. Це увімкнено за замовчуванням *-*-linux-*android* цілі.

-мандоїд
Скомпілювати код, сумісний з платформою Android. Це увімкнено за замовчуванням
*-*-linux-*android* цілі.

Під час компіляції цей параметр вмикається -мбіонічний, -fPIC, -fno-виключення і -fno-rtti by
за замовчуванням. Під час підключення ця опція змушує драйвер GCC передавати параметри, специфічні для Android
до компонувальника. Нарешті, ця опція викликає макрос препроцесора "__ANDROID__".
визначений.

-tno-android-cc
Вимкнути ефекти компіляції -мандоїд, тобто не вмикати -мбіонічний, -fPIC,
-fno-виключення і -fno-rtti за замовчуванням

-tno-android-ld
Вимкнути ефекти зв’язування -мандоїд, тобто передати стандартні параметри підключення Linux до
лінкер.

H8 / 300 опції

Ці -m визначені параметри для реалізацій H8/300:

- розслабитися
Скоротіть деякі посилання на адресу під час посилання, якщо це можливо; використовує параметр компонування
- розслабитися.

-мх Згенеруйте код для H8/300H.

-РС Згенеруйте код для H8S.

-мн Згенеруйте код для H8S та H8/300H у звичайному режимі. Цей перемикач необхідно використовувати
або з -мх or -РС.

-ms2600
Згенеруйте код для H8S/2600. Цей перемикач необхідно використовувати з -РС.

-м'ята32
Зробіть дані "int" 32-бітовими за замовчуванням.

-злоякісний-300
На H8/300H та H8S використовуйте ті самі правила вирівнювання, що й для H8/300. За замовчуванням
для H8/300H і H8S є вирівнювання довгих і плаваючих на 4-байтових кордонах.
-злоякісний-300 змушує їх вирівняти за 2-байтовими межами. Цей варіант не має ефекту
на H8/300.

HPPA опції

Ці -m визначені параметри для сімейства комп’ютерів HPPA:

-березень=архітектурного типу
Згенеруйте код для вказаної архітектури. Вибір для архітектурного типу він має
1.0 для PA 1.0, 1.1 для PA 1.1, і 2.0 для процесорів PA 2.0. Звертатися до
/usr/lib/sched.models на системі HP-UX, щоб визначити правильний варіант архітектури
для вашої машини. Код, скомпільований для архітектур з меншим номером, буде працювати на вищих
пронумеровані архітектури, але не навпаки.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Синоніми слова -березень=1.0, -березень=1.1, і -березень=2.0 відповідно.

- великий перемикач
Згенеруйте код, який підходить для великих таблиць перемикачів. Використовуйте цю опцію, лише якщо
асемблер/компоновник скаржиться на розгалуження за межами діапазону в таблиці перемикачів.

-mjump-in-delay
Заповніть слоти затримки викликів функцій інструкціями безумовного переходу шляхом зміни
покажчик повернення для виклику функції буде метою умовного переходу.

-mdisable-fpregs
Запобігайте будь-якому використанню регістрів з плаваючою комою. Це необхідно для
компіляція ядер, які виконують ліниве перемикання контексту регістрів з плаваючою комою. Якщо
Ви використовуєте цей параметр і намагаєтеся виконувати операції з плаваючою комою, компілятор
перериває.

-mdisable-indexing
Заборонити компілятору використовувати режими адреси індексації. Це швидше уникає деяких
незрозумілі проблеми під час компіляції MIG-генерованого коду під MACH.

-mno-space-regs
Створіть код, який передбачає, що ціль не має проміжних регістрів. Це дозволяє GCC
генерувати швидші непрямі виклики та використовувати немасштабовані режими адреси індексу.

Такий код підходить для систем і ядер PA рівня 0.

-mfast-indirect-calls
Створіть код, який передбачає, що виклики ніколи не перетинають межі простору. Це дозволяє GCC
видавати код, який виконує швидші непрямі виклики.

Цей параметр не працюватиме за наявності спільних бібліотек або вкладених функцій.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який розподільник регістрів не може використовувати. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mlong-load-store
Генеруйте завантаження з 3 команд і зберігайте послідовності, як іноді вимагає HP-UX 10
компонувальник. Це еквівалентно +k опцію для компіляторів HP.

-mportable-runtime
Використовуйте конвенції портативних викликів, запропоновані HP для систем ELF.

-mgas
Дозволити використання директив асемблера, які розуміє лише GAS.

-mschedule=тип процесора
Код розкладу відповідно до обмежень для типу машини тип процесора. Вибір
та цінності тип процесора він має 700 7100, 7100LC, 7200, 7300 і 8000. Відноситься до
/usr/lib/sched.models у системі HP-UX, щоб визначити правильний варіант планування
ваша машина. Розклад за замовчуванням такий 8000.

-mlinker-opt
Увімкніть перехід оптимізації в компоновщику HP-UX. Зауважте, що це викликає символічне налагодження
неможливо. Це також викликає помилку в компонувальниках HP-UX 8 і HP-UX 9, в яких вони
видавати фіктивні повідомлення про помилки під час підключення деяких програм.

-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки доступні не для всіх цілей HPPA. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це неможливо зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-msio
Згенеруйте попередньо визначене "_SIO" для серверного введення введення. За замовчуванням є -mwsio. Це породжує
попередньо визначає "__hp9000s700", "__hp9000s700__" і "_WSIO" для робочої станції IO.
Ці параметри доступні під HP-UX і HI-UX.

-mgnu-ld
Використовуйте специфічні параметри GNU ld. Це минає - поділилися до ld при побудові спільного
бібліотека. Це значення за замовчуванням, коли GCC налаштовано, явно чи неявно, за допомогою
Компонувальник GNU. Ця опція не впливає лише на те, який ld викликається
змінює параметри, які передаються цьому ld. ld, який називається, визначається за допомогою
la --з-ld параметр configure, шлях пошуку програми GCC і, нарешті, користувач
PATH. Компонувальник, який використовується GCC, може бути надрукований за допомогою який `gcc -print-prog-name=ld`.
Ця опція доступна лише на 64-розрядній системі HP-UX GCC, тобто налаштована з
hppa*64*-*-hpux*.

-mhp-ld
Використовуйте спеціальні параметри HP ld. Це минає -b до ld при створенні спільної бібліотеки і
проходить +Прийняти Невідповідність типу до ld за всіма посиланнями. Це значення за замовчуванням, якщо GCC є
налаштований, явно чи неявно, за допомогою компоновщика HP. Цей варіант не має
будь-який вплив, на який викликається ld, змінює лише параметри, які йому передаються
ld. ld, який викликається, визначається --з-ld налаштувати параметр, GCC
шлях пошуку програми і, нарешті, за користувачем PATH. Компонувальник, який використовує GCC, може бути
надруковано за допомогою який `gcc -print-prog-name=ld`. Ця опція доступна лише на
64-розрядний HP-UX GCC, тобто налаштований з hppa*64*-*-hpux*.

-mlong-дзвінки
Згенеруйте код, який використовує довгі послідовності викликів. Це гарантує, що дзвінок завжди доступний
щоб досягти заглушок, згенерованих компонувальником. За замовчуванням генеруються довгі виклики лише тоді, коли
відстань від місця виклику до початку функції або блоку перекладу, як
випадок може бути, перевищує попередньо визначений ліміт, встановлений типом гілки, що використовується. The
обмеження для звичайних викликів становлять 7,600,000 240,000 2.0 і XNUMX XNUMX байт відповідно для PA XNUMX
і архітектури PA 1.X. Сибвиклики завжди обмежені 240,000 XNUMX байт.

Відстані вимірюються від початку функцій при використанні
-ffunction-sections або при використанні -mgas і -mno-portable-runtime опції
разом під HP-UX з компонувальником SOM.

Зазвичай цей параметр не бажано використовувати, оскільки він погіршить продуктивність.
Однак він може бути корисним у великих програмах, особливо коли є часткове зв’язування
використовується для створення програми.

Типи довгих викликів, які використовуються, залежать від можливостей асемблера та компоновщика,
і тип коду, який створюється. Вплив на системи, які підтримують довго
абсолютні виклики, і довгі pic символ-різниці або pc-відносні виклики повинні бути
відносно невеликий. Однак непрямий виклик використовується в 32-розрядних системах ELF у коді pic
і це досить довго.

-munix=unix-std
Згенеруйте попередні визначення компілятора та виберіть стартовий файл для зазначеного стандарту UNIX.
Вибір для unix-std він має 93, 95 і 98. 93 підтримується всіма версіями HP-UX.
95 доступний на HP-UX 10.10 і новіших версіях. 98 доступний на HP-UX 11.11 і новіших версіях.
Значення за замовчуванням: 93 для HP-UX 10.00, 95 для HP-UX 10.10 хоча до 11.00, а 98
для HP-UX 11.11 і новіших версій.

-munix=93 надає ті самі попередні визначення, що й GCC 3.3 та 3.4. -munix=95 забезпечує
додаткові попередні визначення для "XOPEN_UNIX" і "_XOPEN_SOURCE_EXTENDED", а також початковий файл
unix95.o. -munix=98 надає додаткові попередні визначення для "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" і "_INCLUDE_XOPEN_SOURCE_500",
і стартовий файл unix98.o.

Це важливо зауважити, що цей параметр змінює інтерфейси для різних бібліотек
рутини. Це також впливає на операційну поведінку бібліотеки C. таким чином, екстремальний
Використовуючи цю опцію, потрібна обережність.

Бібліотечний код, який призначений для роботи з більш ніж одним стандартом UNIX, повинен перевірити,
встановити та відновити змінну __xpg4_extended_mask по мірі необхідності. Більшість програмного забезпечення GNU
не надає цієї можливості.

-nolibdld
Придушити створення параметрів посилання для пошуку libdld.sl, коли -статичний опція
зазначено на HP-UX 10 і новіших версіях.

-статичний
Реалізація HP-UX setlocale в libc залежить від libdld.sl. Там
не є архівною версією libdld.sl. Таким чином, коли -статичний вказана опція,
Для вирішення цієї залежності потрібні спеціальні параметри посилання.

На HP-UX 10 і новіших версіях драйвер GCC додає необхідні параметри для підключення
libdld.sl, коли -статичний вказана опція. Це призводить до того, що отриманий двійковий файл
бути динамічним. На 64-бітному порту компонувальники за замовчуванням генерують динамічні двійкові файли
будь який випадок. The -nolibdld параметр можна використовувати, щоб запобігти додаванню драйвера GCC
ці параметри посилань.

-нитки
Додайте підтримку багатопоточності за допомогою dce нитка бібліотека під HP-UX. Цей варіант
встановлює прапори як для препроцесора, так і для компонувальника.

Intel 386 і AMD x86-64 опції

Ці -m параметри визначені для сімейства комп’ютерів i386 і x86-64:

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. Вибір для тип процесора є:

родової
Створюйте код, оптимізований для найпоширеніших процесорів IA32/AMD64/EM64T. Якщо ви
знати ЦП, на якому буде виконуватися ваш код, то вам слід використовувати відповідний
-mtune варіант замість -mtune=загальний. Але, якщо ви не знаєте, який саме процесор
користувачі вашої програми, то вам слід скористатися цією опцією.

Оскільки нові процесори розгортаються на ринку, поведінка цього параметра
зміниться. Тому, якщо ви оновлюєте GCC до новішої версії, код
згенерований параметр зміниться, щоб відобразити процесори, які були найпоширенішими, коли
ця версія GCC була випущена.

Немає ніякого -march=загальний варіант, тому що - марш вказує набір інструкцій
компілятор може використовувати, і немає загального набору інструкцій, застосовного до всіх
процесори. У контрасті, -mtune вказує на процесор (або, у цьому випадку,
колекція процесорів), для яких оптимізовано код.

рідний
Це вибирає ЦП для налаштування під час компіляції, визначаючи процесор
тип компілятора. Використання -mtune = рідний створить оптимізований код
для локальної машини під обмеженнями вибраного набору інструкцій.
використання -березня = рідний дозволить увімкнути всі підмножини інструкцій, які підтримуються локальним
машина (тому результат може не працювати на різних машинах).

i386
Оригінальний процесор Intel i386.

i486
Процесор Intel i486. (Для цього чіпа не реалізовано планування.)

i586, Пентіум
Процесор Intel Pentium без підтримки MMX.

pentium-mmx
Процесор Intel PentiumMMX на основі ядра Pentium з підтримкою набору інструкцій MMX.

pentiumpro
Процесор Intel PentiumPro.

i686
Те саме, що і «загальний», але якщо використовується як параметр «марш», набір інструкцій PentiumPro
буде використовуватися, тому код працюватиме на всіх мікросхемах сімейства i686.

pentium2
Процесор Intel Pentium2 на основі ядра PentiumPro з підтримкою набору інструкцій MMX.

pentium3, pentium3m
Процесор Intel Pentium3 на основі ядра PentiumPro з набором інструкцій MMX і SSE
support.

pentium-m
Низькопотужна версія процесора Intel Pentium3 з набором інструкцій MMX, SSE та SSE2
підтримка. Використовується ноутбуками Centrino.

pentium4, pentium4m
Процесор Intel Pentium4 з підтримкою набору інструкцій MMX, SSE та SSE2.

prescott
Покращена версія процесора Intel Pentium4 з інструкцією MMX, SSE, SSE2 і SSE3
встановити підтримку.

нокона
Покращена версія процесора Intel Pentium4 з 64-розрядними розширеннями, MMX, SSE, SSE2 і
Підтримка набору інструкцій SSE3.

ядро2
Процесор Intel Core2 з 64-розрядними розширеннями, інструкцією MMX, SSE, SSE2, SSE3 і SSSE3
встановити підтримку.

corei7
Процесор Intel Core i7 з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 та
Підтримка набору інструкцій SSE4.2.

corei7-avx
Процесор Intel Core i7 з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Підтримка набору інструкцій SSE4.2, AVX, AES і PCLMUL.

core-avx-i
Процесор Intel Core з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Підтримка набору інструкцій SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND і F16C.

атом
Процесор Intel Atom з 64-розрядними розширеннями, інструкцією MMX, SSE, SSE2, SSE3 і SSSE3
встановити підтримку.

k6 Процесор AMD K6 з підтримкою набору інструкцій MMX.

k6-2, k6-3
Покращені версії процесора AMD K6 з MMX і 3DNow! підтримка набору інструкцій.

атлон, атлон-тберд
Процесор AMD Athlon з MMX, 3dNOW!, покращений 3DNow! та інструкції попередньої вибірки SSE
support.

атлон-4, athlon-xp, атлон-мп
Покращений процесор AMD Athlon з MMX, 3DNow!, покращений 3DNow! та повна інструкція SSE
встановити підтримку.

k8, оптерон, athlon64, athlon-fx
Процесори на основі ядра AMD K8 з підтримкою набору інструкцій x86-64. (Це перевершує MMX,
SSE, SSE2, 3DNow!, покращений 3DNow! і 64-розрядні розширення набору інструкцій.)

k8-sse3, opteron-sse3, athlon64-sse3
Покращені версії k8, opteron і athlon64 з підтримкою набору інструкцій SSE3.

amdfam10, Барселона
10-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, покращений 3DNow!, ABM і 64-розрядна версія
розширення набору інструкцій.)

bdver1
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

bdver2
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

btver1
14-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM і 64-розрядний набір інструкцій
розширення.)

winchip-c6
Процесор IDT Winchip C6, який працює так само, як i486 з додатковим набором інструкцій MMX
support.

winchip2
IDT Winchip2 CPU, що працює так само, як i486 з додатковими MMX і 3DNow!
підтримка набору інструкцій.

c3 Через C3 CPU з MMX і 3DNow! підтримка набору інструкцій. (Немає розкладу
реалізовано для цього чіпа.)

c3-2
Через C3-2 CPU з підтримкою набору інструкцій MMX і SSE. (Немає розкладу
реалізовано для цього чіпа.)

геоде
Вбудований процесор AMD з MMX і 3DNow! підтримка набору інструкцій.

При виборі конкретного тип процесора сплануватиме все належним чином для цього
конкретного чіпа, компілятор не генеруватиме код, який не виконується на
Тип машини за замовчуванням без -березень=тип процесора використовується варіант. Наприклад, якщо
Тоді GCC налаштовано для i686-pc-linux-gnu -mtune=pentium4 згенерує код, який
налаштований на Pentium4, але все одно працюватиме на машинах i686.

-березень=тип процесора
Створіть інструкції для типу машини тип процесора. Вибір для тип процесора є
те саме, що і для -mtune. Більше того, уточнюючи -березень=тип процесора мається на увазі -mtune=тип процесора.

-mcpu=тип процесора
Застарілий синонім до -mtune.

-mfpmath=блок
Створити арифметику з плаваючою комою для вибраної одиниці блок. Вибір для блок є:

387 Використовуйте стандартний співпроцесор 387 з плаваючою комою, присутній на більшості мікросхем
і емулювали інакше. Код, скомпільований з цією опцією, працює майже скрізь.
Тимчасові результати обчислюються з 80-бітовою точністю замість точності
визначений типом, що призводить до дещо інших результатів порівняно з більшістю
інші чіпси. Побачити -флоат-магазин для більш детального опису.

Це вибір за замовчуванням для компілятора i386.

ESS Використовуйте скалярні інструкції з плаваючою комою, наявні в наборі інструкцій SSE. Це
Набір інструкцій підтримується Pentium3 і новішими мікросхемами, в лінійці AMD
Чіпи Athlon-4, Athlon-xp і Athlon-mp. Попередня версія інструкції SSE
набір підтримує лише арифметику одинарної точності, отже, подвійний і розширений-
точна арифметика все ще виконується за допомогою 387. Пізніша версія, доступна лише в
Pentium4 і майбутні чіпи AMD x86-64 підтримують арифметику подвійної точності
теж.

Для компілятора i386 потрібно використовувати -березень=тип процесора, -msse or -msse2 перемикачі
щоб увімкнути розширення SSE та зробити цю опцію ефективною. Для компілятора x86-64,
ці розширення ввімкнені за замовчуванням.

Отриманий код має бути значно швидшим у більшості випадків і
уникнути проблем числової нестабільності коду 387, але може порушити деякі існуючі
код, який очікує, що тимчасові файли становлять 80 біт.

Це вибір за замовчуванням для компілятора x86-64.

sse,387
sse+387
обидва
Спробуйте використати обидва набори інструкцій одночасно. Це фактично вдвічі більше
кількість доступних регістрів і на мікросхемах з окремими виконавчими блоками на 387
і SSE - ресурси виконання. Використовуйте цю опцію з обережністю, оскільки вона залишається
експериментальний, оскільки розподільник регістрів GCC не моделює окремо
функціональні одиниці добре, що призводить до нестабільної роботи.

-masm=діалект
Виведіть інструкції asm за допомогою select діалект. Підтримувані варіанти Intel or att
(за замовчуванням). Дарвін не підтримує Intel.

-mieee-fp
-mno-ieee-fp
Контролюйте, чи використовує компілятор порівняння з плаваючою комою IEEE. Ці
правильно обробляти випадок, коли результат порівняння не впорядкований.

-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки не є частиною GCC. Зазвичай засоби звичайної машини C
використовується компілятор, але це неможливо зробити безпосередньо під час крос-компіляції. Ти повинен
створіть власні заходи, щоб забезпечити відповідні бібліотечні функції для перехресних
складання.

На машинах, де функція повертає результати з плаваючою комою в регістрі 80387
стеку, деякі коди операцій з плаваючою комою можуть видаватись, навіть якщо -msoft-float використовується.

-mno-fp-ret-in-387
Не використовуйте регістри FPU для повернення значень функцій.

Звичайна конвенція про виклик має функції, які повертають значення типів "float" і "double"
в регістрі FPU, навіть якщо немає FPU. Ідея полягає в тому, що операційна система
має емулювати FPU.

Опція -mno-fp-ret-in-387 викликає повернення таких значень у звичайному ЦП
натомість реєструється.

-mno-fancy-math-387
Деякі емулятори 387 не підтримують інструкції "sin", "cos" і "sqrt" для
387. Вкажіть цей параметр, щоб уникнути створення цих інструкцій. Цей варіант є
за замовчуванням у FreeBSD, OpenBSD і NetBSD. Ця опція замінюється, коли - марш
вказує, що цільовий процесор завжди матиме FPU, а отже, інструкція не буде
потрібна емуляція. Починаючи з версії 2.6.1, ці інструкції не створюються, якщо ви
також використовуйте -funsafe-math-optimizations перемикач.

-злоякісний-подвійний
-mno-align-double
Контролюйте, чи GCC вирівнює змінні "double", "long double" та "long long" на a
межа з двох слів або межа з одного слова. Вирівнювання "подвійних" змінних за двома словами
boundary створює код, який виконується дещо швидше на a Пентіум за рахунок більшого
пам'ять.

На x86-64, -злоякісний-подвійний увімкнено за замовчуванням.

Увага! якщо ви використовуєте -злоякісний-подвійний вимикач, конструкції, що містять перераховані вище типи
буде вирівняно інакше, ніж опублікований двійковий інтерфейс програми
специфікації для 386 і не буде бінарно сумісним зі структурами в коді
скомпільовано без цього перемикача.

-m96bit-long-double
-m128bit-long-double
Ці перемикачі керують розміром типу «довгий подвійний». Двійковий файл програми i386
інтерфейс визначає розмір 96 біт, тому -m96bit-long-double є за замовчуванням в
32-розрядний режим.

Сучасні архітектури (Pentium і новіші) вважають за краще, щоб "довгий подвійний" був вирівняний з 8-
або 16-байтовий кордон. У масивах або структурах, що відповідають ABI, це не так
можливо. Так уточнюючи -m128bit-long-double вирівнює "long double" до 16-байт
границі шляхом заповнення "довгого подвійного" додатковим 32-бітовим нулем.

У компіляторі x86-64, -m128bit-long-double є вибором за замовчуванням як його ABI
вказує, що "long double" має бути вирівняний за 16-байтовою межею.

Зауважте, що жодна з цих опцій не забезпечує додаткову точність порівняно зі стандартом x87
80 біт для "довгого подвійного".

Увага! якщо ви перевизначите значення за замовчуванням для цільового ABI, структури і
масиви, що містять змінні "long double", змінять свій розмір, а також функцію
буде змінено конвенцію про виклик для функції, що приймає "long double". Тому вони
не буде бінарно сумісним з масивами або структурами в коді, зібраному без цього
перемикач.

-mlarge-data-threshold=номер
Коли -mcmodel=середній вказано, дані більше ніж поріг розміщуються у великих
розділ даних. Це значення має бути однаковим для всіх об’єктів, пов’язаних із двійковим файлом
і за замовчуванням 65535.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з "ret" Num інструкція, яка висуває свої аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ви можете вказати, що окрема функція викликається з цією послідовністю викликів
атрибут функції stdcall. Ви також можете перевизначити -mrtd варіант за допомогою
атрибут функції cdecl.

Увага! ця умова виклику несумісна з тим, що зазвичай використовується в Unix,
тому ви не можете використовувати його, якщо вам потрібно викликати бібліотеки, скомпільовані за допомогою компілятора Unix.

Крім того, ви повинні надати прототипи функцій для всіх функцій, які беруть змінну
кількість аргументів (включаючи «printf»); інакше буде згенерований неправильний код
для викликів цих функцій.

Крім того, якщо ви викличете функцію із занадто великою кількістю, вийде серйозно неправильний код
аргументи. (Як правило, додаткові аргументи нешкідливо ігноруються.)

-mregparm=Num
Контролюйте, скільки регістрів використовується для передачі цілих аргументів. За замовчуванням ні
регістри використовуються для передачі аргументів, і можна використовувати щонайбільше 3 регістри. Ти можеш
керувати цією поведінкою для певної функції за допомогою атрибута function regparm.

Увага! якщо ви використовуєте цей перемикач, і Num відмінний від нуля, то ви повинні побудувати всі модулі
з тим же значенням, включаючи будь-які бібліотеки. Це включає системні бібліотеки та
модулі запуску.

-msseregparm
Використовуйте конвенції про передачу регістрів SSE для аргументів із плаваючою та подвійною величиною та значень, що повертаються.
Ви можете керувати цією поведінкою для певної функції за допомогою атрибута function
серегпарм.

Увага! якщо ви використовуєте цей перемикач, ви повинні створити всі модулі з однаковим значенням,
включаючи будь-які бібліотеки. Це включає системні бібліотеки та модулі запуску.

-mvect8-ret-in-mem
Повертати 8-байтові вектори в пам’яті замість регістрів MMX. Це увімкнено за замовчуванням
Solaris@tie{}8 і 9 і VxWorks, щоб відповідати ABI компіляторів Sun Studio до
версія 12. Пізніші версії компілятора (починаючи з Studio 12 Update@tie{}1) далі
ABI, що використовується іншими цілями x86, який є за умовчанням для Solaris@tie{}10 ​​і новіших версій.
Only використовуйте цю опцію, якщо вам потрібно залишатися сумісним із існуючим кодом, створеним
ті попередні версії компілятора або старіші версії GCC.

-mpc32
-mpc64
-mpc80
Встановіть 80387 точність з плаваючою комою на 32, 64 або 80 біт. Коли -mpc32 зазначено,
значущі результати операцій з плаваючою комою округляються до 24 біт
(одинарна точність); -mpc64 округлює значущі результати результатів з плаваючою комою
операції до 53 біт (подвійна точність) і -mpc80 округлює значущі результати
операцій з плаваючою комою до 64 біт (розширена подвійна точність), що є
за замовчуванням. Коли використовується цей параметр, виконуються операції з плаваючою комою з більш високою точністю
недоступний для програміста без явного встановлення керуючого слова FPU.

Встановлення округлення операцій з плаваючою комою на менше, ніж 80 біт за замовчуванням
швидкість деяких програм на 2% і більше. Зауважте, що деякі математичні бібліотеки припускають це
операції з плаваючою комою з розширеною точністю (80 біт) увімкнені за замовчуванням; рутини
у таких бібліотеках може зазнати значної втрати точності, як правило, через таку
називається «катастрофічне скасування», коли ця опція використовується для встановлення точності до
менша, ніж розширена точність.

-mstackrealign
Перевирівняти стек при вході. На Intel x86 -mstackrealign згенерується параметр
альтернативний пролог та епілог, які за потреби перебудовують стек часу виконання.
Це підтримує змішування застарілих кодів, які зберігають 4-байтовий вирівняний стек із сучасними кодами
які зберігають 16-байтовий стек для сумісності з SSE. Дивіться також атрибут
"force_align_arg_pointer", застосовний до окремих функцій.

-mpreferred-stack-boundary=Num
Спробуйте зберегти межу стека вирівняною з 2, підвищеною до Num межа байта. Якщо
-mpreferred-stack-boundary не вказано, за замовчуванням 4 (16 байт або 128 біт).

Увага! При генерації коду для архітектури x86-64 з розширеннями SSE
інвалід, -mpreferred-stack-boundary=3 можна використовувати для вирівнювання меж стека
до межі 8 байт. Ви повинні побудувати всі модулі з -mpreferred-stack-boundary=3,
включаючи будь-які бібліотеки. Це включає системні бібліотеки та модулі запуску.

-mincoming-stack-boundary=Num
Припустимо, що вхідний стек вирівняний за 2, піднятим до Num межа байта. Якщо
-mincoming-stack-boundary не вказано, той, який визначено
-mpreferred-stack-boundary буде використовуватися.

У Pentium і PentiumPro значення "double" і "long double" мають бути вирівняні з
8-байтовий кордон (див -злоякісний-подвійний) або зазнають значної продуктивності під час виконання
штрафні санкції. У Pentium III тип даних розширення SIMD (SSE) "__m128" може
не працює належним чином, якщо він не вирівняний по 16 байтам.

Щоб забезпечити належне вирівнювання цих значень у стеку, межа стека має бути як
вирівнюється відповідно до вимог будь-якого значення, що зберігається в стеку. Далі, кожна функція
має бути згенеровано таким чином, щоб стек вирівнювався. Таким чином викликається функція
скомпільовано з вищою бажаною межею стека з функції, скомпільованої з нижчою
бажана межа стека, швидше за все, вирівняє стек. Рекомендується це
бібліотеки, які використовують зворотні виклики, завжди використовують налаштування за замовчуванням.

Це додаткове вирівнювання дійсно споживає додатковий простір у стеку і загалом збільшує код
розмір. Код, який чутливий до використання простору стека, наприклад, вбудовані системи та
ядра операційної системи, можливо, захочеться зменшити бажане вирівнювання до
-mpreferred-stack-boundary=2.

-мммх
-mno-mmx
-msse
-мно-се
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-маес
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-мно-фма
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-мно-абм
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-мно-тбм
Ці перемикачі дозволяють або вимикають використання інструкцій у MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT або 3DNow!
розширені набори інструкцій. Ці розширення також доступні як вбудовані
функції: див X86 Вбудований Функції, щоб дізнатися більше про ввімкнені функції та
вимкнено цими перемикачами.

Щоб інструкції SSE/SSE2 генерувалися автоматично з коду з плаваючою комою (як
на відміну від 387 інструкцій), див -mfpmath=sse.

GCC притискає інструкції SSEx, коли -mavx використовується. Замість цього він генерує новий AVX
інструкції або еквівалентність AVX для всіх інструкцій SSEx, якщо це необхідно.

Ці параметри дозволять GCC використовувати ці розширені інструкції в згенерованому коді,
навіть без -mfpmath=sse. Програми, які виконують визначення ЦП під час виконання, повинні
компілювати окремі файли для кожної підтримуваної архітектури, використовуючи відповідні прапорці.
Зокрема, файл, що містить код виявлення ЦП, повинен бути скомпільований без
ці варіанти.

-mcld
Ця опція наказує GCC видавати інструкцію "cld" у пролозі функцій
які використовують рядкові інструкції. Рядкові інструкції залежать від прапора DF для вибору
між режимами автоінкременту або автодекременту. Хоча ABI визначає прапор DF до
очищається під час введення функції, деякі операційні системи порушують цю специфікацію, тому що ні
очищення прапора DF у своїх диспетчерах винятків. Обробником винятків може бути
викликається із встановленим прапором DF, що призводить до режиму неправильного напрямку під час рядка
використовуються інструкції. Цю опцію можна ввімкнути за замовчуванням для 32-розрядних цільових пристроїв x86 за допомогою
налаштування GCC за допомогою --enable-cld налаштувати параметр. Покоління "cld"
інструкції можна приховати за допомогою -мно-клд варіант компілятора в цьому випадку.

-mvzeroupper
Ця опція наказує GCC видавати інструкцію "vzeroupper" перед передачею
контроль потоку з функції, щоб мінімізувати покарання переходу AVX до SSE, а також
видалити непотрібні нуль-верхні внутрішні властивості.

-mprefer-avx128
Цей параметр наказує GCC використовувати 128-розрядні інструкції AVX замість 256-бітних AVX
інструкції в автовекторизаторі.

-mcx16
Цей параметр дозволить GCC використовувати інструкцію CMPXCHG16B у згенерованому коді.
CMPXCHG16B дозволяє виконувати атомарні операції над 128-бітовими даними з подвійним словом (або словом)
типи. Це корисно для лічильників високої роздільної здатності, які можна оновлювати кількома
процесори (або ядра). Ця інструкція генерується як частина атомарної вбудованої програми
функції: див __sync Вбудовані or __атомний Вбудовані for details.

-msahf
Цей параметр дозволить GCC використовувати інструкцію SAHF у згенерованому 64-розрядному коді. Рано
Процесори Intel з Intel 64 не підтримували інструкцій LAHF і SAHF, які підтримувалися AMD64
впровадження Pentium 4 G1 крок у грудні 2005 року. LAHF і SAHF завантажуються та зберігаються
інструкції, відповідно, для певних прапорів статусу. У 64-розрядному режимі SAHF
інструкція використовується для оптимізації вбудованих функцій "fmod", "drem" або "remainder": див.
Other Вбудовані for details.

-mmovbe
Цей параметр дозволить GCC використовувати інструкцію movbe для реалізації "__builtin_bswap32"
і "__builtin_bswap64".

-mcrc32
Цей параметр увімкне вбудовані функції "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" і "__builtin_ia32_crc32di" для
створити машинну інструкцію crc32.

-mrecip
Цей параметр дозволить GCC використовувати інструкції RCPSS і RSQRTSS (та їх
векторизовані варіанти RCPPS і RSQRTPS) з додатковим кроком Ньютона-Рафсона до
збільшити точність замість DIVSS і SQRTSS (та їх векторизованих варіантів) для
аргументи з плаваючою комою з одинарною точністю. Ці інструкції генеруються лише тоді, коли
-funsafe-math-optimizations вмикається разом з -тільки кінцева математика і
-fno-trapping-math. Зауважте, що в той час як пропускна здатність послідовності вища за
пропускна здатність невзаємної команди, точність послідовності може бути
зменшено до 2 ulp (тобто обернене значення 1.0 дорівнює 0.99999994).

Зверніть увагу, що GCC реалізує "1.0f/sqrtf(х)" з точки зору RSQRTSS (або RSQRTPS) вже с
-швидка математика (або наведена вище комбінація параметрів) і не потрібна -mrecip.

Також зверніть увагу, що GCC випускає наведену вище послідовність з додатковим кроком Ньютона-Рафсона для
векторизований одиночний поділ і векторизований "sqrtf(х)" вже з -швидка математика
(або наведена вище комбінація параметрів) і не потрібна -mrecip.

-mrecip=вибирати
Цей параметр дозволяє контролювати, які інструкції взаємної оцінки можуть використовуватися. вибирати
- це список опцій, розділених комами, перед яким може стояти символ "!" інвертувати
параметр: "все": увімкнути всі інструкції щодо оцінки, "за замовчуванням": увімкнути за замовчуванням
інструкції, еквівалент -mrecip, "none": вимкнути всі інструкції щодо оцінки,
еквівалентно -мно-рецепт, "div": увімкнути апроксимацію для скалярного поділу,
"vec-div": увімкнути апроксимацію для векторизованого поділу, "sqrt": увімкнути
апроксимація для скалярного квадратного кореня, "vec-sqrt": увімкніть наближення для
векторизований квадратний корінь.

Наприклад, -mrecip=все,!sqrt дозволило б усі взаємні наближення,
крім квадратного кореня.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
Підтримувані типи: "svml" для короткої векторної математичної бібліотеки Intel і "acml" для
Стиль інтерфейсу бібліотеки математичного ядра AMD. GCC наразі надсилатиме виклики до
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
"vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4", "vmlsTanh4",
"vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" і "vmlsAcos4" для
відповідний тип функції, коли -mveclibabi=svml використовується і "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" і "__vrs4_powf" для відповідного типу функції, коли
-mveclibabi=acml використовується. Обидва -ftree-vectorize і -funsafe-math-optimizations мати
бути увімкненим. Сумісну бібліотеку SVML або ACML ABI потрібно вказати за посиланням
часу.

-mabi=ім'я
Згенеруйте код для вказаної конвенції про виклик. Допустимі значення: sysv та цінності
ABI, що використовується в GNU/Linux та інших системах і ms для Microsoft ABI. За замовчуванням
полягає у використанні Microsoft ABI для націлювання на Windows. На всіх інших системах за замовчуванням
є SYSV ABI. Ви можете керувати цією поведінкою для певної функції за допомогою
атрибут функції ms_abi/sysv_abi.

-mtls-dialect=тип
Згенеруйте код для доступу до локального сховища потоку за допомогою гну or gnu2 конвенції. гну
– консервативний дефолт; gnu2 є більш ефективним, але він може додати компіляцію та запуск
вимоги часу, які не можуть бути задоволені для всіх систем.

-mpush-args
-mno-push-args
Використовуйте операції PUSH для збереження вихідних параметрів. Цей метод коротший і зазвичай
однаково швидкий, як і метод, що використовує операції SUB/MOV, і ввімкнено за замовчуванням. В деяких
випадки його вимкнення може підвищити продуктивність через покращення планування та скорочення
залежності.

-maccumulate-outgoing-args
Якщо ввімкнено, буде максимальна кількість місця, необхідного для вихідних аргументів
обчислюється в пролозі функції. Це швидше на більшості сучасних процесорів через
зменшені залежності, покращене планування та зменшене використання стека, коли бажаний стек
boundary не дорівнює 2. Недоліком є ​​помітне збільшення розміру коду. Це
перемикач має на увазі -mno-push-args.

-mthreads
Підтримка потокобезпечної обробки винятків Mingw32. Код, який покладається на потокобезпечний
Обробка винятків повинна скомпілювати та зв’язати весь код з -mthreads варіант. Коли
компіляція, -mthreads визначає -D_MT; під час зв'язування він посилається в спеціальному помічнику потоку
бібліотека - lmingwthrd який очищає дані обробки винятків кожного потоку.

-mno-align-stringops
Не вирівнюйте призначення операцій із вбудованим рядком. Цей перемикач зменшує розмір коду
і покращує продуктивність, якщо місце призначення вже вирівняно, але GCC ні
знати про це.

-minline-all-stringops
За замовчуванням GCC вбудовує рядкові операції лише тоді, коли відомо, що це місце призначення
вирівняно щонайменше за 4-байтовою межею. Це дозволяє більше вбудовувати, збільшити розмір коду,
але може покращити продуктивність коду, що залежить від швидкого memcpy, strlen та memset for
короткі довжини.

-minline-stringops-динамічно
Для рядкових операцій невідомого розміру використовуйте перевірки під час виконання з вбудованим кодом для small
блоки та бібліотека викликають великі блоки.

-mstringop-strategy=ALG
Перезапис внутрішньої евристики прийняття рішень щодо конкретного алгоритму на вбудований рядок
операція з. Допустимі значення: "rep_byte", "rep_4byte", "rep_8byte" для
розширення за допомогою префікса i386 "rep" заданого розміру, "byte_loop", "loop",
"unrolled_loop" для розширення вбудованого циклу, "libcall" для постійного розширення бібліотеки
дзвінок.

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-frame-pointer знімає рамку
покажчик для всіх функцій, що може ускладнити налагодження.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Контролює, чи можна отримати доступ до змінних TLS зі зміщеннями від сегмента TLS
регістр (%gs для 32-розрядного, %fs для 64-розрядного), або чи має бути базовий покажчик потоку
додано. Чи є це законним чи ні, залежить від операційної системи та чи вона
відображає сегмент, щоб охопити всю область TLS.

Для систем, які використовують GNU libc, за замовчуванням увімкнено.

-msse2avx
-mno-sse2avx
Вкажіть, що асемблер повинен кодувати інструкції SSE з префіксом VEX. Варіант
-mavx вмикає це за замовчуванням.

-mfentry
-мно-фентрі
Якщо профілювання активне -стор поставте виклик лічильника профілювання перед прологом. Примітка: увімкнено
архітектури x86 атрибут "ms_hook_prologue" на даний момент неможливий
-mfentry і -стор.

-m8bit-idiv
-mno-8bit-idiv
На деяких процесорах, таких як Intel Atom, 8-розрядне ціле беззнакове ділення набагато швидше, ніж
32-розрядне/64-розрядне ціле ділення. Цей параметр створює перевірку часу виконання. Якщо обидва
ділене і дільник знаходяться в діапазоні від 0 до 255, 8-бітове ціле беззнакове ділення є
використовується замість 32-розрядного/64-розрядного цілого поділу.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Розділіть 32-байтове невирівняне завантаження та збереження.

Ці -m перемикачі підтримуються на додаток до перерахованого вище на процесорах AMD x86-64 в
64-розрядні середовища.

-м32
-м64
-mx32
Згенеруйте код для 32-розрядного або 64-розрядного середовища. The -м32 параметр встановлює int, long і
вказує на 32 біти і генерує код, який працює на будь-якій системі i386. The -м64 варіант
встановлює int на 32 біти та long і вказівник на 64 біти та генерує код для AMD
архітектура x86-64. The -mx32 Параметр встановлює int, long і вказівник на 32 біти і
генерує код для архітектури AMD x86-64. Тільки для Дарвіна -м64 варіант поворотів
з -fno-pic і -mdynamic-no-pic Варіанти.

-мно-червона-зона
Не використовуйте так звану червону зону для коду x86-64. Червона зона передбачена
x86-64 ABI, це 128-байтовий простір за межами розташування покажчика стека, який
не може бути змінений обробниками сигналів або переривань і тому може використовуватися для
тимчасові дані без коригування покажчика стека. Прапор -мно-червона-зона відключає
ця червона зона.

-mcmodel=мала
Згенеруйте код для моделі малого коду: програма та її символи повинні бути пов’язані
нижчі 2 ГБ адресного простору. Вказівники мають 64 біта. Програми можуть бути
статично або динамічно пов'язані. Це модель коду за замовчуванням.

-mcmodel=ядро
Згенеруйте код для моделі коду ядра. Ядро працює в мінус 2 ГБ
адресний простір. Ця модель повинна використовуватися для коду ядра Linux.

-mcmodel=середній
Створення коду для середньої моделі: Програма пов’язана з нижніми 2 Гб
адресний простір. Там же розміщуються невеликі символи. Символи з розмірами більше ніж
-mlarge-data-threshold поміщаються у великі розділи даних або bss і можуть бути розташовані
понад 2 Гб. Програми можуть бути статично або динамічно пов'язані.

-mcmodel=великий
Створення коду для великої моделі: ця модель не робить припущень щодо адрес і
розміри секцій.

-maddress-mode=long
Згенеруйте код для режиму довгої адреси. Це підтримується лише для 64-розрядних і x32
середовища. Це режим адреси за замовчуванням для 64-розрядних середовищ.

-maddress-mode=короткий
Згенеруйте код для режиму короткої адреси. Це підтримується лише для 32-розрядних і x32
середовища. Це режим адреси за замовчуванням для 32-розрядних і x32 середовищ.

i386 і x86-64 Windows опції

Ці додаткові параметри доступні для цілей Windows:

-mconsole
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що консоль
програма має бути створена шляхом вказівки компоновщику встановити заголовок PE
тип підсистеми, необхідний для консольних програм. Це поведінка за замовчуванням для
Цілі Cygwin і MinGW.

-mdll
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що DLL - a
бібліотека динамічних посилань - створюється, що дозволяє вибрати потрібне
об’єкт запуску та точка входу під час виконання.

-mnop-fun-dllimport
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що
Атрибут dllimport слід ігнорувати.

-mthread
Ця опція доступна для цілей MinGW. Він визначає, що потік, специфічний для MinGW
має бути використана підтримка.

- municode
Цей параметр доступний для цілей mingw-w64. Він визначає, що макрос UNICODE
стає попередньо визначеним і вибрано код запуску, що підтримує Unicode.

-mwin32
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що типовий
Попередньо визначені макроси Windows мають бути встановлені в препроцесорі, але не впливають
вибір бібліотеки часу виконання/код запуску.

-mwindows
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що графічний інтерфейс
програма має бути згенерована шляхом вказівки компоновщику встановити заголовок PE
відповідний тип підсистеми.

-fno-set-stack-executable
Ця опція доступна для цілей MinGW. Він визначає, що вико