Ukranianфранцузькийнімецькийіталійськийпортугальськаросійськаіспанська

Значок OnWorks

mips64-linux-gnuabi64-gcc-5 - онлайн у хмарі

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

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

ПРОГРАМА:

ІМ'Я


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

СИНТАКСИС


gcc [-c|-S|-E] [-std =standard]
[-g] [-стор] [-Oрівень]
[-Wпопереджати...] [-Wpedantic]
[-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 формат і так далі. Більшість із них мають як позитивні, так і негативні
форми; негативна форма -ффу is -fno-foo. У цьому посібнику описано лише одне з них
дві форми, яка не є за замовчуванням.

ВАРІАНТИ


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

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

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

C + + Language опції
-fabi-version=n -fno-контроль доступу -fcheck-новий -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 -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-запобіжник-cxa-atexit -fno-слабий -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|preinit|ніхто] -fvtv-counts -fvtv-debug -fvisibility-ms-compat
-fext-числові-літерали -Вабі=n -Вабі-тег -Wconversion-null -Wctor-dtor-privacy
-Wdelete-non-virtual-dtor -Wliteral-суфікс -Звуження - Ні, крім -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 -fno-local-ivars
-fivar-visibility=[громадськість|захищений|приватний|пакет] -freplace-objc-класи
-fzero-посилання -gen-decls -Wassign-перехоплення -Протокол Wno -Селектор
-Підборник-матч -Wunddeclared-селектор

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

попередження опції
-fsyntax-only -fmax-errors=n -Wpedantic -педантичні помилки -w -Векстра -Стінка
-Водреса -Waggregate-return -Waggressive-loop-optimizations -Warray-bounds
-Warray-bounds=n -Wbool-порівняти -Wno-атрибути -Wno-вбудований-макро-перевизначення
-Wc90-c99-compat -Wc99-c11-compat -Wc++-compat -Wc++11-compat -Wc++14-compat
-Wcast-align -Wcast-qual -Wchar-індекси -Wclobbered -Коментар
-Wумовно-підтримувані -Wперетворення -Wcoverage-невідповідність -Wdate-time
-Wdelete-незавершене -Wno-cpp -Wno-застарілий -Wno-deprecated-declarations
-Wno-designated-init -Wdisabled-optimization -Wno-відкинуті-кваліфікатори
-Кваліфікатори Wno-відкинутих-масивів -Wno-div-by-zero -Двійне просування - Пусте тіло
-Венум-порівняй -Wno-endif-мітки - Помилка -Помилка=* -Wфатальні помилки -Wfloat-рівний
- W формат -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-нелітеральний -Wformat-безпека -Wformat-signness -Wformat-y2k
-Wframe-більший-ніж=довжина -Wno-free-nonheap-object -Wjump-misses-init
-Проігноровані-кваліфікатори -Wincompatible-pointer-types - Прихований
-Оголошення функції Wimplicit -Невідомий-інт -Winit-self - Winline
-Wno-int-conversion -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Більше ніж=довжина -Wunsafe-loop-optimizations -Wlogical-op -Логічні-не-дужки
-Довго-довго -Wmain -Wmoybe-неініціалізований -Wmemset-transposed-args -Брекети
-Wmissing-field-ініціалізатори -Wmissing-include-dirs -Wno-multichar -Ненульовий
-Ненормалізовано=[ніхто|id|nfc|nfkc]
-Водр -Без переповнення -Wopenmp-simd - Струни неперевершеної довжини -Упаковано
-Wpacked-bitfield-compat -Wpadded -Дужки -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-ариф -Wno-pointer-to-int-cast -Недостатньо-деклс
-Wno-return-local-addr -Повернення -Wsequence-point - Тінь -Вно-тінь-івар
-Wshift-count-негативне -Wshift-count-overflow -Wsign-порівняти -Wsign-перетворення
-Wfloat-перетворення -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-протектор -Wstack-usage=довжина -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overflow -Wstrict-overflow=n -Wsuggest-attribute=[чистий|сопзЬ|noreturn|формат]
-Wзапропонуйте остаточні типи -Запропонуйте остаточні методи -Wпропонувати-замінити
-Wmissing-format-attribute -Вимикач -Wswitch-за замовчуванням -Wwwitch-enum -Wswitch-bool
-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 -fsanitize=стиль -fsanitize-відновити
-fsanitize-recover=стиль -fasan-shadow-offset=номер
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-first-field-has-own-bounds -fchkp-narrow-bounds
-fchkp-від вузького до самого внутрішнього масиву -fchkp-оптимізувати -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
-fchkp-instrument-calls -fchkp-instrument-marked-only -fchkp-use-wrappers
-fdbg-cnt-список -fdbg-cnt=список зустрічних значень -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-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-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-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=файл -fcompare-debug[=вибирає] -fcompare-debug-second
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -придатний-вид-проходити
-придатний-вид-проходити=діапазон-список -fdebug-types-section -fmem-report-wpa -fmem-звіт
-fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-опції[=файл] -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+ -gz[=тип] -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 -час[=файл]

Оптимізація опції
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -фасоціативно-мат -fauto-профіль
-fauto-profile[=шлях] -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 -fdevirtualize-спекулятивно
-fdevirtualize-at-ltrans -fdse -страшно-вставляючи -фіпа-шра -дорогі оптимізації
-ffat-lto-об'єкти -швидка математика -фінітна-математична -флоат-магазин
-fexcess-precision=стиль -поширювати вперед -ffp-contract=стиль -ffunction-sections
-fgcse -fgcse-після перезавантаження -fgcse-las -fgcse-lm -fgraphite-identity -fgcse-sm
-fhoist-adjacent-loads -fif-перетворення -fif-перетворення2 -findirect-inlining
-finline-функції -finline-functions-called-once -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment -фіпа-пта
-фіпа-профіль -fipa-pure-const -фіпа-довідка -fipa-icf -fira-algorithm=алгоритм
-fira-region=регіон -fira-таль-напір -fira-loop-pressure -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-erroeous-paths-dereference
-fisolate-помилкові-шляхи-атрибут -півопти -fkeep-inline-functions
-fkeep-static-consts -five-range-shrinkage -флоп-блок -шлюз-розв'язка
-floop-strip-mine -floop-unroll-and-jam -floop-nest-optimize -floop-parallize-all
-flra-remat -flto -flto-compression-level -flto-partition=ALG -flto-звіт
-flto-report-wpa -fmerge-all-constants -fmerge-constants -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-інваріанти -fno-branch-count-reg
-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-sibling-calls
-fpartial-inlining -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-report -fprofile-correction -fprofile-dir=шлях -fprofile-generate
-fprofile-generate=шлях -fprofile-use -fprofile-use=шлях -fprofile-values
-fprofile-reorder-functions -частотно-мат -вільно -реєстри імен
-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-fusion -fschedule-insns -fschedule-insns2 -fsection-анкери
-вибіркове планування -fselective-scheduling2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack-протектор -fstack-protector-all
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -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-loop-vectorize
-ftree-parallelize-loops=n -Free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
-Free-раковина -ftree-slsr -ftree-sra -перетворення з трьома перемикачами -ftree-tail-merge
-ftree-ter -ftree-vectorize -ftree-vrp - за раз -закрутити всі петлі
-закрутки-петлі -funsafe-loop-optimizations -funsafe-math-optimizations
-перемикачі-петлі -фіпа-ра -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb -f ціла програма -fwpa -fuse-linker-plugin --парам name=значення -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 варіант -no-integrated-cpp

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

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

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

машина Залежний опції
AAArch64 опції -mabi=name -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=традиційний
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -березень=name -mcpu=name -mtune=name

Адаптєва Богоявлення опції -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-Реджо

ARC опції -mbarrel-shifter -mcpu=центральний процесор -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-швидкий -mno-dpfp-lrsr -mea -мно-мпи - mmul32x16 -mmul64 -мнорм
-mspfp -mspfp-compact -mspfp-швидкий -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -мтелефонія -mxy - неправильний розмір -mannotate-align
- marclinux -marclinux_prof -mepilogue-cfi -mlong-дзвінки -mmedium-дзвінки -msdata
-mucb-mcount -mvolatile-cache -злоякісний виклик -mauto-modify-reg -mbbit-глазок -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec - борошнистий-cbranchsi -mexpand-adddi
-mindexed-loads -mlra -mlra-priority-none -mlra-priority-compact mlra-priority-
некомпактний -mno-millicode -mmixed-code -mq-клас -mRcq -mRcw -msize-level=рівень
-mtune=центральний процесор -mmultcost=Num -munalign-prob-threshold=ймовірність

ARM опції -mapcs-frame -mno-apcs-frame -mabi=name -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
-mfloat-abi=name -mfp16-format=name -mthumb-interwork -mno-thumb-interwork -mcpu=name
-березень=name -mfpu=name -mtune=name -mprint-tune-info -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-дзвінки -mno-long-cales -msingle-pic-base
-mno-single-pic-base -mpic-register=Реджо -mnop-fun-dllimport -mpoke-назва-функції
-mthumb -марм -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-super-interworking -mtp=name -mtls-dialect=діалект -mword-переміщення
-mfix-cortex-m3-ldrd -муніципальний доступ -mneon-for-64bits -mslow-flash-data
-masm-syntax-unified -mrestrict-it

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

Чорношкірий опції -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 -миее -міее-з-неточним
-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=час

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 опції - розслабитися -мх -РС -мн -mexr -mno-exr -м'ята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-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 -статичний
-нитки

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

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=name -mno-flush-trap -mflush-trap=номер -G Num

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

M680x0 опції -березень=арка -mcpu=центральний процесор -mtune=мелодія -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -мбітфілд -mno-бітове поле -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -мно-див -mshort -мно-короткі -mhard-float -m68881 -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 -m210 -m340
-mstack-increment

MeP опції -mabsdiff -mall-opts -maverage -based=n -mbitops -mc=n -mclip
-mconfig=name -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
-big-endian -mlittle-endian -mxl-змінити порядок -mxl-mode-додаток-модель

MIPS опції -EL -EB -березень=арка -mtune=арка -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-compressed
-mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16 -mabi=ABI
-mabicalls -mno-abicalls -mshared -мно-спільний -mplt -мно-плт -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -мно-непарний-спрег -mabs=режим -mnan=кодування
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -мева -мно-ева -mvirt -мно-вірт
-mxpa -mno-xpa -mmicromips -mno-micromips -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 -ммад -мно-божевільний - mimadd -mno-imadd -змішаний-божевільний
-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-rm7000 -mno-fix-rm7000
-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

Moxie опції -meb -мел -mmul.x -mno-crt0

MSP430 опції -msim -masm-hex -mmcu= -mcpu= -великий -msmall - розслабитися -mhwmult= - minrt

NDS32 опції -big-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16 біт -mno-16bit -misr-vector-size=Num
-mcache-block-size=Num -березень=арка -mcmodel=код-модель -mctor-dtor - розслабитися

Ніос II опції -G Num -mgpopt=варіант -mgpopt -mno-gpopt -мел -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-insn=N
-mno-custom-insn -mcustom-fpu-cfg=name -mhal -msmallc -msys-crt0=name -msys-lib=name

Nvidia PTX опції -m32 -m64 -mmainkernel

ПДП-11 опції -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -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 -m64bit-подвійники -m32bit-подвійники

RS / 6000 і PowerPC опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель
-mpowerpc64 -мальтівець -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 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc
-m64 -m32 -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 -mpower8-fusion -mno-mpower8-fusion
-mpower8-вектор -mno-power8-vector -mcrypto -мно-крипто -mdirect-move -mno-direct-move
-mquad-пам'ять -mno-quad-пам'ять -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf - mupper-regs -mno-upper-regs

RX опції -m64bit-подвійники -m32bit-подвійники -fpu -nofpu -mcpu= -big-endian-data
-mlittle-endian-data -msmall-data -msim -мно-сім -mas100-синтаксис -mno-as100-синтаксис
- розслабитися -mmax-constant-size= -mint-register= -mpid -mno-warn-multiple-fast-interrupts
-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 -m64 -m31 -mdebug -mno-налагодження -меса -mzarch -mtpf-trace
-mno-tpf-trace -змішаний-божевільний -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-size -mstack-guard -mhotpatch=напівслова,напівслова

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

SH опції -m1 -m2 -m2e -m2a-nofpu -m2a-лише одиночний -m2a-один -m2a -m3 -m3e
-m4-nofpu -m4-лише одиночний -m4-один -m4 -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=name -mfixed-range=реєстр-діапазон -індексована адресація
-mgettrcost=номер -mpt-виправлено -maccumulate-outgoing-args -minvalid-symbols
-matomic-model=атомна модель -mbranch-cost=Num -mzdcbranch -mno-zdcgranch
-mcbranch-force-dey-slot -змішаний-божевільний -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpend-cmove -mtas

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

SPARC опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель -модель пам'яті=mem-
модель -m32 -m64 -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-невирівняні-подвійники - режим користувача -mno-user-mode -mv8plus -mno-v8plus -mvis
-мно-віс -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

СПУ опції -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=ЦП -m32 -m64 -big-endian -mlittle-endian -mcmodel=код-модель

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

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 -mv850e3v5 -млю - розслабитися - довгі стрибки -msoft-float -mhard-float -mgcc-abi
-mrh850-abi - великий перемикач

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

Visium опції -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=тип процесора
-mtune=тип процесора -msv-режим - режим користувача

VMS опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64 -mpointer-size=розмір

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

x86 опції -mtune=тип процесора -березень=тип процесора -mtune-ctrl=список функцій
-mdump-tune-features -mno-за замовчуванням -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 -mavx512f -mavx512pf -mavx512er
-mavx512cd -мша -маес -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-динамічно
-mstringop-strategy=ALG -mmemcpy-стратегія=стратегія -mmemset-strategy=стратегія
-mpush-args -maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double
-млонг-подвійний-64 -млонг-подвійний-80 -млонг-подвійний-128 -mregparm=Num -msseregparm
-mveclibabi=тип -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -мно-червона-зона -mno-tls-direct-seg-refs -mcmodel=код-модель
-mabi=name -maddress-mode=режим -m32 -m64 -mx32 -m16 -mlarge-data-threshold=Num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=тип
-mstack-protector-guard=охорона

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

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
-fdelete-dead-exceptions -забавні столики -fasynchronous-unwind-tables -fno-gnu-unique
-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=модель
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-check
-fvisibility=[дефолт|внутрішній|прихований|захищений] -fstrict-volatile-bitfields
-fsync-libcalls

опції Управління 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 is
gdb --args Cc1 ....

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

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

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

-fada-spec-parent=блок
В поєднанні з -fdump-ada-spec[-струнка] вище, створіть специфікації 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++. Це лікує .c, .h і .i файли як
Вихідні файли C++ замість вихідних файлів C, якщо -x використовується. Ця програма також корисна
під час попередньої компіляції заголовного файлу 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. Для
що, -Wpedantic необхідний на додаток до -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 є стандартом
вказано, усі функції, які підтримує компілятор, увімкнено, навіть якщо вони
особливості змінюють значення базового стандарту. В результаті деякі суворо відповідні
програми можуть бути відхилені. Конкретний стандарт використовується -Wpedantic для виявлення
які функції є розширеннями GNU з урахуванням цієї версії стандарту. Наприклад
-std=gnu90 -Wpedantic попереджає про стиль C++ // коментарі, поки -std=gnu99 -Wpedantic
не.

Необхідно вказати значення цієї опції; можливі значення

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

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

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Цей стандарт практично повністю підтримується за модулем помилок і
проблеми з плаваючою комою (в основному, але не повністю, пов’язані з додатковими функціями C99
з додатків F і G). Побачитиhttp://gcc.gnu.org/c99status.html> більше
інформації. Імена c9x і iso9899:199x є застарілими.

c11
c1x
iso9899:2011
ISO C11, редакція стандарту ISO C 2011 року. Цей стандарт істотно
повністю підтримується, помилки за модулем, проблеми з плаваючою комою (в основному, але не повністю
пов’язані з додатковими функціями C11 з додатків F і G) і необов’язковими додатками K
(Інтерфейси перевірки меж) і L (Analyzability). Ім'я c1x застаріло.

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

gnu99
gnu9x
Діалект GNU ISO C99. Ім'я gnu9x застаріло.

gnu11
gnu1x
Діалект GNU ISO C11. Це значення за замовчуванням для коду C. Ім'я gnu1x is
застарів.

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

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

c ++ 11
c ++ 0x
Стандарт ISO C++ 2011 року з поправками. Ім'я c ++ 0x застаріло.

gnu ++ 11
gnu++0x
GNU діалект о -std=c++11, Ім'я gnu++0x застаріло.

c ++ 14
c++1y
Стандарт ISO C++ 2014 року з поправками. Ім'я c++1y застаріло.

gnu ++ 14
gnu++1y
GNU діалект о -std=c++14, Ім'я gnu++1y застаріло.

c++1z
Наступна редакція стандарту ISO C++, орієнтовно запланована на 2017 р. Підтримка
є дуже експериментальним і майже напевно зміниться несумісними способами
майбутні випуски.

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

-fgnu89-inline
Опція -fgnu89-inline наказує GCC використовувати традиційну семантику GNU для "inline"
функціонує в режимі C99.

Використання цієї опції приблизно еквівалентно доданню атрибута функції "gnu_inline".
до всіх вбудованих функцій.

Опція -fno-gnu89-inline явно вказує GCC використовувати семантику C99 для
"inline" у режимі C99 або gnu99 (тобто він визначає поведінку за замовчуванням). Це
параметр не підтримується в -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.

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

Зауважте, що це експериментальна функція, неповна й може бути змінена в майбутньому
версії GCC. Побачитиhttps://gcc.gnu.org/wiki/OpenACC> для отримання додаткової інформації.

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

-fopenmp-simd
Увімкнути обробку директив SIMD OpenMP за допомогою «#pragma omp» у C/C++ та «!$omp» у
Fortran. Інші директиви OpenMP ігноруються.

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

-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;
};

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

Зауважте, що цей параметр вимкнено для всіх цілей, окрім цілей x86, які використовують ms-abi.

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

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

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

- традиційний
-традиційний-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 незалежно від мови вашої програми
є in. Наприклад, ви можете скомпілювати файл перший клас.C подобається це:

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

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

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

-fabi-version=n
Використовуйте версію n C++ ABI. За замовчуванням встановлена ​​версія 0.

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

Версія 1 - це версія C++ ABI, яка вперше з'явилася в G++ 3.2.

Версія 2 – це версія C++ ABI, яка вперше з’явилася в G++ 3.4 і була
за замовчуванням через G++ 4.9.

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

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

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

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

Версія 7, яка вперше з’явилася в G++ 4.8, розглядає nullptr_t як вбудований тип
і виправляє помилку лямбда в області аргументу за замовчуванням.

Версія 8, яка вперше з’явилася в G++ 4.9, виправляє поведінку підстановки
типи функцій з кваліфікаторами function-cv.

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

-fabi-compat-version=n
На цілях, які підтримують сильні псевдоніми, G++ обходить зміни змін шляхом створення
псевдонім із правильним зіпсованим ім’ям під час визначення символу з неправильним
спотворене ім'я. Цей перемикач визначає, яку версію ABI використовувати для псевдоніма.

з -fabi-version=0 (за замовчуванням), це значення за замовчуванням дорівнює 2. Якщо є інша версія ABI
явно вибрано, це значення за замовчуванням дорівнює 0.

Версія сумісності також встановлюється -Вабі=n.

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

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

-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++. Проте в ISO C++ a
Функцію friend, яка не оголошена в охоплюючій області, можна знайти лише за допомогою
аргумент залежний пошук. GCC за замовчуванням використовує стандартну поведінку.

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

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

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

-fextern-tls-init
-fno-extern-tls-init
Стандарти C++11 і OpenMP дозволяють змінні "thread_local" і "threadprivate"
мають динамічну (виконання) ініціалізацію. Щоб підтримати це, будь-яке використання такої змінної
проходить через функцію обгортки, яка виконує будь-яку необхідну ініціалізацію. Коли
використання та визначення змінної знаходяться в одній одиниці перекладу, ці накладні витрати можуть
бути оптимізовано, але коли воно використовується в іншій одиниці перекладу
значні накладні витрати, навіть якщо змінна насправді не потребує динаміки
ініціалізація. Якщо програміст може бути впевнений, що змінна не використовується в не-
визначення TU повинно ініціювати динамічну ініціалізацію (або тому, що змінна є
статично ініціалізовано, або буде виконано використання змінної у визначенні TU
перед будь-яким використанням в іншому TU), вони можуть уникнути цих накладних витрат за допомогою
-fno-extern-tls-init варіант.

Для цілей, які підтримують псевдоніми символів, за замовчуванням є -fextern-tls-init. На цілі
які не підтримують псевдоніми символів, за замовчуванням -fno-extern-tls-init.

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

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

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

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

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

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

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

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

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

-fsized-deallocation
Увімкніть вбудовані глобальні оголошення

void оператор delete (void *, std::size_t) noexcept;
Оператор void delete[] (void *, std::size_t) noexcept;

як представлено в C++14. Це корисно для визначеного користувачем звільнення заміни
функції, які, наприклад, використовують розмір об’єкта, щоб пришвидшити звільнення.
Увімкнено за замовчуванням під -std=c++14 і вище. Прапор -Wsized-deallocation попереджає
про місця, до яких можна додати визначення.

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

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

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

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

-fno-threadsafe-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 для різного визначення типів з однаковою назвою.

-fvtable-verify=[std|preinit|ніхто]
Увімкніть (або вимкніть, якщо використовується -fvtable-verify=немає) функція безпеки, яка перевіряє на
час виконання для кожного віртуального виклику вказівник vtable, через який здійснюється виклик
made є дійсним для типу об'єкта і не був пошкоджений або перезаписаний.
Якщо під час виконання виявлено недійсний покажчик vtable, повідомляється про помилку та
виконання програми негайно припиняється.

Цей параметр змушує створювати структури даних під час запуску програми, які є
використовується для перевірки покажчиків vtable. Варіанти std і preinit контролювати
терміни створення цих структур даних. В обох випадках структури даних є
побудований до того, як виконання досягне "основного". Використання -fvtable-verify=std викликає дані
структури, які будуть створені після завантаження та ініціалізації спільних бібліотек.
-fvtable-verify=preinit змушує їх створювати до того, як були створені спільні бібліотеки
завантажено та ініціалізовано.

Якщо цей параметр з’являється кілька разів у командному рядку з різними значеннями
зазначено, ніхто має найвищий пріоритет над обома std і preinit; preinit приймає
пріоритет над std.

-fvtv-debug
При використанні разом з -fvtable-verify=std or -fvtable-verify=preinit, причини
налагоджувати версії функцій середовища виконання для функції перевірки vtable
дзвонив. Цей прапор також змушує компілятор реєструвати інформацію про те, яка vtable
покажчики, які він знаходить для кожного класу. Ця інформація записується у файл з іменем
vtv_set_ptr_data.log у каталозі, названому змінною середовища VTV_LOGS_DIR
якщо це визначено, або поточний робочий каталог інакше.

Примітка. Ця функція додає даних у файл журналу. Якщо ви хочете отримати свіжий файл журналу, будьте
обов’язково видаліть усі наявні.

-fvtv-counts
Це прапор налагодження. При використанні разом з -fvtable-verify=std or
-fvtable-verify=preinit, це змушує компілятор відстежувати загальну кількість
віртуальні виклики, з якими він зустрічається, і кількість перевірок, які він вставляє. Це також
підраховує кількість викликів певних функцій бібліотеки часу виконання, які він вставляє та
реєструє цю інформацію для кожної одиниці компіляції. Компілятор записує цю інформацію
до файлу з іменем vtv_count_data.log у каталозі, названому змінною середовища
VTV_LOGS_DIR якщо це визначено, або поточний робочий каталог інакше. Це також
підраховує розмір наборів покажчиків vtable для кожного класу та записує цю інформацію
до vtv_class_set_sizes.log В тій же директорії.

Примітка. Ця функція додає дані до файлів журналу. Щоб отримати нові файли журналу, обов’язково
видалити всі існуючі.

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

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

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

-Вабі (лише C, Objective-C, C++ та Objective-C++)
При явному -fabi-version=n використовується параметр, змушує G++ попереджати, коли він генерує
код, який, ймовірно, несумісний з нейтральним для виробника C++ ABI. З G++ зараз
за замовчуванням -fabi-version=0, -Вабі не впливає, якщо не старіша версія ABI
обраний (з -fabi-version=n) або вибрано старішу версію для сумісності (з
-Вабі=n or -fabi-compat-version=n).

Хоча намагалися попередити про всі такі випадки, ймовірно, є
випадки, про які не попереджається, навіть якщо G++ генерує несумісний код.
Також можуть бути випадки, коли попередження видаються, навіть якщо код є
згенерований є сумісним.

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

-Вабі також можна використовувати з явним номером версії для попередження про сумісність
з особливим -фабі-версія рівень, напр -Вабі=2 попереджати про зміни щодо
-fabi-version=2. Зазначення номера версії також встановлюється -fabi-compat-version=n.

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

* Шаблон з параметром нетипового шаблону опорного типу було пошкоджено
неправильно:

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

Це було виправлено в -fabi-version=3.

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

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

* "__attribute ((const))" і "noreturn" були зіпсовані як кваліфікатори типу, і
"decltype" простої декларації було згорнуто.

Ці проблеми з пошкодженням були виправлені -fabi-version=5.

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

Крім того, ABI змінив переробку пакетів аргументів шаблону, "const_cast",
"static_cast", префікс інкременту/зменшення та функція області видимості класу, яка використовується як a
аргумент шаблону.

Ці проблеми були виправлені в -fabi-version=6.

* Лямбда в області аргументу за замовчуванням було змінено неправильно, а ABI змінено
пошкодження "nullptr_t".

Ці проблеми були виправлені в -fabi-version=7.

* При зміні типу функції за допомогою кваліфікаторів function-cv, некваліфіковані
тип функції неправильно розглядався як кандидат на заміну.

Це було виправлено в -fabi-version=8.

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

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

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

"об'єднання U" завжди передається в пам'ять.

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

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

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

-Wliteral-суфікс (лише C++ та Objective-C++)
Попереджати, коли після рядка або символьного літералу йде суфікс ud, який цього не робить
почати з підкреслення. Як відповідне розширення, GCC розглядає такі суфікси як
окремі маркери попередньої обробки для підтримки зворотної сумісності з кодом
який використовує макроси форматування з " ". Наприклад:

#define __STDC_FORMAT_MACROS
#включати
#включати

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

У цьому випадку «PRId64» розглядається як окремий маркер попередньої обробки.

Це попередження ввімкнено за замовчуванням.

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

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

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

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

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

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

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

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

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

-fext-числові-літерали (лише C++ та Objective-C++)
Приймайте суфікси уявних, фіксованих чи машинно визначених літеральних чисел як GNU
розширення. Коли цей параметр вимкнено, ці суфікси розглядаються як C++11 user-
визначені літерні числові суфікси. Це ввімкнено за замовчуванням для всіх діалектів до C++11
і всі діалекти GNU: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14, це
параметр вимкнено за замовчуванням для ISO C++11 і далі (-std=c++11, ...).

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

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

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

* Віддавайте перевагу ініціалізації перед призначенням у конструкторах.

* Нехай "operator=" повертає посилання на *this.

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

* Розрізняють префіксальну та постфіксальну форми операторів приросту та декременту.

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

Ця опція також вмикає -Wnon-virtual-dtor, який також є одним із ефективних C++
рекомендації. Однак перевірка продовжена, щоб попередити про відсутність віртуальних
деструктор у доступних неполіморфних базових класах також.

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

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

-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++ використовується приведення до непустотного типу старого стилю (Стиль).
Приведення нового стилю ("dynamic_cast", "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++ намагалися зберегти беззнакові, але стандарт вимагає поточного
поведінка.

опції Управління Мета-С і 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("...")" незалежно від параметрів командного рядка.

-fno-local-ivars
За замовчуванням до змінних екземпляра в Objective-C можна отримати доступ як до локальних
змінні з методів класу, в якому вони оголошені. Це може призвести до
перекриття між змінними екземпляра та іншими змінними, оголошеними локально
всередині методу класу або глобально з такою ж назвою. Вказавши -fno-local-ivars
flag вимикає цю поведінку, таким чином уникаючи проблем із затіненням змінних.

-fivar-visibility=[громадськість|захищений|приватний|пакет]
Встановіть для видимості змінної екземпляра за замовчуванням вказаний параметр, щоб цей екземпляр
змінні, оголошені поза межами будь-яких директив модифікаторів доступу, за замовчуванням мають значення
визначена видимість.

-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, що описує найбільшу структуру, яка передається за значенням, якщо така є.

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

-fmessage-length=n
Спробуйте відформатувати повідомлення про помилки так, щоб вони містилися в рядках приблизно n символів. Якщо n is
нуль, тоді перенесення рядків не виконується; кожне повідомлення про помилку відображається в одному рядку.
Це значення за замовчуванням для всіх інтерфейсів.

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

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

-fdiagnostics-color[=КОЛИ]
-fno-diagnostics-color
Використовуйте колір в діагностиці. КОЛИ is ніколи, завждиабо автоматичний. Значення за замовчуванням залежить від того, як
компілятор налаштовано, він може бути будь-яким із перерахованих вище КОЛИ варіанти або також
ніколи if GCC_COLORS Змінна середовища відсутня в середовищі, і автоматичний
інакше. автоматичний означає використовувати колір лише тоді, коли стандартною помилкою є термінал. The
форми -fdiagnostics-колір і -fno-diagnostics-color є псевдонімами для
-fdiagnostics-color=завжди і -fdiagnostics-color=ніколи, відповідно.

Кольори визначаються змінною середовища GCC_COLORS. Його значення - двокрапка-
окремий список можливостей і підрядки Select Graphic Rendition (SGR). SGR
команди інтерпретуються терміналом або емулятором терміналу. (Див. розділ в
документацію вашого текстового терміналу щодо дозволених значень та їх значень як
атрибути символів.) Ці значення підрядка є цілими числами в десятковому представленні
і може бути об’єднана з крапкою з комою. Загальні значення для об’єднання включають 1 та цінності
сміливий, 4 для підкреслення, 5 для моргання, 7 для зворотного, 39 для кольору переднього плану за замовчуванням, 30
до 37 для кольорів переднього плану, 90 до 97 для 16-кольорового режиму кольорів переднього плану, 38; 5; 0 до
38; 5; 255 для 88-колірного та 256-кольорового режимів кольори переднього плану, 49 для фону за замовчуванням
color, 40 до 47 для кольорів фону, 100 до 107 для 16-кольорового режиму фонових кольорів,
і 48; 5; 0 до 48; 5; 255 для 88-колірного та 256-кольорового режимів кольори фону.

За умовчанням GCC_COLORS is

error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01

де 01; 31 яскраво червоний, 01; 35 жирний пурпурний, 01; 36 жирний блакитний, 01; 32 є сміливим
зелений і 01 є сміливим. Налаштування GCC_COLORS до порожнього рядка вимикає кольори.
Підтримувані можливості такі.

"помилка="
Підрядок SGR для помилки: маркери.

"попередження="
Підрядок SGR для попередження: маркери.

"примітка="
Підрядок SGR для примітки: маркери.

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

"locus="
Підрядок SGR для інформації про місцезнаходження, файл: рядок or файл:рядок:стовпчик і т.п.

"цитата="
Підрядок SGR для інформації, надрукованої в лапках.

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

-fno-diagnostics-show-caret
За замовчуванням кожна діагностика включає вихідний рядок і символ '^'
із зазначенням стовпчика. Ця опція приховує цю інформацію. Вихідна лінія є
скорочено до n символів, якщо -fmessage-length=n надається варіант. Коли вихід
виконується до терміналу, ширина обмежена шириною, заданою параметром КОЛОНИ
змінної середовища або, якщо не встановлено, на ширину термінала.

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

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

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

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

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

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

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

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

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

-педантичні помилки
Повідомляти помилку, коли база standard (Див. -Wpedantic) потребує діагностики, в
деякі випадки, коли є невизначена поведінка під час компіляції, а в деяких інших випадках
які не перешкоджають компіляції програм, дійсних відповідно до стандарту.
Це не еквівалентно -Помилка = педантична, оскільки через це ввімкнено помилки
і не вмикається останнім і навпаки.

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

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

-Водреса -Warray-bounds=1 (тільки з -O2) -Wc++11-compat -Wc++14-compat
-Wchar-індекси -Венум-порівняй (у C/ObjC; це ввімкнено за замовчуванням у C++)
-Невідомий-інт (лише C і Objective-C) -Оголошення функції Wimplicit (С і
Тільки Objective-C) -Коментар - W формат -Wmain (тільки для C/ObjC і якщо
-автономний) -Wmoybe-неініціалізований -Брекети (тільки для C/ObjC) -Ненульовий
-Wopenmp-simd -Дужки -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 * радіус * радіус;
}

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

- W формат
-Wformat=n
Перевірте виклики «printf» та «scanf» тощо, щоб переконатися, що наведені аргументи
мають типи, відповідні вказаному рядку формату, і що перетворення
зазначений у рядку формату має сенс. Сюди входять стандартні функції та
інші, визначені атрибутами формату, в "printf", "scanf", "strftime" і
"strfmon" (розширення X/Open, не в стандарті C) сімейства (або інші цільові
конкретні сім'ї). Які функції перевіряються без атрибутів формату
вказано залежить від вибраної стандартної версії та таких перевірок функцій
без вказаного атрибута вимкнено -автономний or -fno-вбудований.

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

-Wformat=1
- W формат
варіант - W формат еквівалентна -Wformat=1, і -Wno-формат еквівалентна
-Wformat=0, так як - W формат також перевіряє аргументи нульового формату для кількох
функції, - W формат також передбачає -Ненульовий. Деякі аспекти цього рівня формату
перевірку можна вимкнути за допомогою параметрів: -Wno-format-contains-nul,
-Wno-format-extra-args, і -Wno-format-zero-length. - W формат увімкнено за допомогою
-Стінка.

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

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

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

-Wformat-signness
If - W формат вказано, також попереджає, якщо рядок форматування вимагає непідписаного
аргумент і аргумент підписується, і навпаки.

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

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

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

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

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

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

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

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

-Невідомий-інт (лише 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
Попереджайте, якщо тип «основний» є підозрілим. "main" має бути функцією з зовнішнім
зв'язування, повертаючи int, беручи або нуль аргументів, два або три аргументи
відповідні види. Це попередження ввімкнено за замовчуванням у C++ і вмикається будь-яким
-Стінка or -Wpedantic.

-Брекети
Попереджати, якщо ініціализатор агрегату або об’єднання не повністю закріплений у дужках. У наступному
наприклад, ініціализатор для "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 видає попередження, коли вказано цей прапор.
Щоб усунути попередження, додайте явні дужки навколо внутрішнього оператора «if».
немає жодного способу, щоб «інший» належав до охоплюючого «if». Отриманий код виглядає
подобається це:

{
якщо)
{
якщо (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++.

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

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

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

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

-Wshift-count-негативне
Попереджати, якщо кількість змін від’ємна. Це попередження ввімкнено за замовчуванням.

-Wshift-count-overflow
Попереджати, якщо кількість зсувів >= ширина типу. Це попередження ввімкнено за замовчуванням.

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

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

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

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

перемикач ((int) (a == 4))
{
...
}

Це попередження ввімкнено за замовчуванням для програм C і C++.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Якщо ви хочете попередити про код, який використовує неініціалізоване значення змінної 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=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
Попереджайте про випадки, які є сумнівними та яких легко уникнути. Наприклад, с
-fstrict-overflow, компілятор спрощує "x + 1 > x" до 1. Цей рівень
-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"), якщо це не може довести, що функція
повертається нормально. Функція повертається нормально, якщо вона не містить нескінченності
зациклювати або повертати ненормально, кидаючи, викликаючи "аборт" або захоплення. Цей аналіз
вимагає опції -fipa-pure-const, який за замовчуванням увімкнено в -O і вище.
Більш високі рівні оптимізації покращують точність аналізу.

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

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

-Wзапропонуйте остаточні типи
Попереджати про типи з віртуальними методами, де якість коду покращиться, якщо тип
були оголошені за допомогою специфікатора C++11 "final" або, якщо можливо, оголошені в
анонімний простір імен. Це дозволяє GCC більш агресивно девіртуалізувати поліморфний
дзвінки. Це попередження є більш ефективним при оптимізації часу посилання, де
інформація про графік ієрархії класів є більш повною.

-Запропонуйте остаточні методи
Попереджати про віртуальні методи, де якість коду була б покращена, якби цей метод був
оголошений специфікатором "final" C++11 або, якщо можливо, його тип оголошено в
анонімний простір імен або зі специфікатором "final". Це попередження є більш ефективним
з оптимізацією часу зв'язку, де міститься інформація про графік ієрархії класів
більш повним. Рекомендується спочатку розглянути пропозиції
-Wзапропонуйте остаточні типи а потім перебудувати з новими анотаціями.

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

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

-Warray-bounds=1
Це рівень попередження -Warray-bounds і увімкнено за допомогою -Стінка; вищі рівні
не є і має бути чітко запитано.

-Warray-bounds=2
Цей рівень попередження також попереджає про вихід за межі доступу до масивів у кінці
структуру та для масивів, доступ до яких здійснюється за допомогою покажчиків. Цей рівень попередження може давати a
більша кількість помилкових спрацьовувань і вимкнено за замовчуванням.

-Wbool-порівняти
Попереджати про логічний вираз у порівнянні з цілим значенням, відмінним від
"правда"/"неправда". Наприклад, таке порівняння завжди хибне:

int n = 5;
...
якщо ((n > 1) == 2) { ... }

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

-Wno-відкинуті-кваліфікатори (лише C і Objective-C)
Не попереджати, якщо кваліфікатори типу в покажчиках відкидаються. Як правило,
компілятор попереджає, якщо змінна "const char *" передається функції, яка приймає "char
*" параметр. Цю опцію можна використовувати для придушення такого попередження.

-Кваліфікатори Wno-відкинутих-масивів (лише C і Objective-C)
Не попереджати, якщо використовуються кваліфікатори типу в масивах, які є цільовими вказівниками
відкинуто. Зазвичай компілятор попереджає, якщо змінна "const int (*)[]" передається до
функція, яка приймає параметр "int (*)[]". Цей параметр можна використовувати для придушення
таке попередження.

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

-Wno-int-conversion (лише C і Objective-C)
Не попереджати про несумісні перетворення цілого в покажчик і покажчика в ціле.
Це попередження стосується неявних перетворень; для явних перетворень попередження
-Wno-int-to-pointer-cast і -Wno-pointer-to-int-cast може використовуватися.

-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
розуміє, але ігнорує, тому що # не відображається як перший символ на
лінія. Це також пропонує вам приховати директиви, як-от "#pragma", які не зрозумілі
традиційний 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.

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

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

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

-Вно-тінь-івар (лише Objective-C)
Не попереджати, коли локальна змінна затінює змінну екземпляра в Objective-C
метод.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-Wc90-c99-compat (лише C і Objective-C)
Попереджати про функції, яких немає в ISO C90, але присутні в ISO C99. Наприклад,
попереджати про використання масивів змінної довжини, типу «long long», типу «bool», складеного
літерали, призначені ініціализатори тощо. Цей варіант не залежить від
стандартний режим. Попередження вимкнено у виразі після "__extension__".

-Wc99-c11-compat (лише C і Objective-C)
Попереджати про функції, яких немає в ISO C99, але присутні в ISO C11. Наприклад,
попереджати про використання анонімних структур і об'єднань, кваліфікатор типу "_Atomic",
Специфікатор класу зберігання "_Thread_local", специфікатор "_Alignas", оператор "Alignof",
Ключове слово "_Generic" тощо. Цей параметр не залежить від стандартного режиму.
Попередження вимкнено у виразі після "__extension__".

-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. Це попередження
включається -Звуження і увімкнено за допомогою -Стінка.

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

-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" або "vfork". Це попередження
також увімкнено за допомогою -Векстра.

-Wумовно-підтримувані (лише C++ та Objective-C++)
Попереджати щодо умовно підтримуваних (C++11 [intro.defs]) конструкцій.

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

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

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

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

-Wdate-time
Попереджати, коли макроси "__TIME__", "__DATE__" або "__TIMESTAMP__" зустрічаються, коли вони
може запобігти побітно ідентичним відтворюваним компіляціям.

-Wdelete-незавершене (лише C++ та Objective-C++)
Попереджати під час видалення вказівника на неповний тип, що може спричинити невизначену поведінку в
час виконання. Це попередження ввімкнено за замовчуванням.

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

- Пусте тіло
Попереджати, якщо в операторі "if", "else" або "do while" зустрічається порожнє тіло. Це попередження
також увімкнено за допомогою -Векстра.

-Венум-порівняй
Попереджати про порівняння значень різних перерахованих типів. У 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перетворення.

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

-Wsized-deallocation (лише C++ та Objective-C++)
Попереджати про визначення функції звільнення без розміру

void оператор delete (void *) noexcept;
void оператор delete[] (void *) noexcept;

без визначення функції звільнення відповідного розміру

void оператор delete (void *, std::size_t) noexcept;
Оператор void delete[] (void *, std::size_t) noexcept;

або навпаки. Увімкнено -Векстра разом з -fsized-deallocation.

-Wsizeof-pointer-memaccess
Попереджати про підозрілі параметри довжини певних рядків і вбудованих функцій пам’яті
якщо аргумент використовує "sizeof". Це попередження попереджає, наприклад, про "memset (ptr, 0, sizeof
(ptr));", якщо "ptr" не є масивом, а вказівником і пропонує можливе виправлення, або
про "memcpy (&foo, ptr, sizeof (&foo));". Це попередження вмикається за допомогою -Стінка.

-Wsizeof-array-argument
Попереджати, коли оператор "sizeof" застосовується до параметра, оголошеного як масив
у визначенні функції. Це попередження ввімкнено за замовчуванням для програм C і C++.

-Wmemset-transposed-args
Попереджати про підозрілі виклики вбудованої функції "memset", якщо другий аргумент є
не дорівнює нулю, а третій аргумент дорівнює нулю. Це попереджає, наприклад @ про "memset (buf, sizeof
buf, 0)", де, швидше за все, мав на увазі "memset (buf, 0, sizeof buf)".
Діагностика видається, лише якщо третій аргумент дорівнює нулю. Якщо це якесь
вираз, який згортається до нуля, приведення нуля до якогось типу тощо, це набагато менше
імовірно, що користувач помилково обмінявся аргументами, і попередження не видається.
Це попередження вмикається -Стінка.

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

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

-Логічні-не-дужки
Попереджати про логічний, який не використовується в лівому операнді порівняння. Це
Опція не попереджає, якщо операнд RHS має логічний тип. Його мета полягає в тому, щоб
виявити підозрілий код, наприклад:

int a;
...
якщо (!a > 1) { ... }

Можна придушити попередження, загорнувши LHS в дужки:

якщо ((!a) > 1) { ... }

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

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

-Wno-aggressive-loop-optimizations
Попереджати, якщо в циклі з постійною кількістю ітерацій компілятор виявить невизначене
поведінка в деякому операторі під час однієї або кількох ітерацій.

-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)
Попереджати, якщо глобальна функція визначена без попереднього оголошення прототипу. Це
попередження видається, навіть якщо саме визначення містить прототип. Використовуйте цю опцію
щоб виявити глобальні функції, які не мають відповідного оголошення прототипу в a
заголовний файл. Цей параметр не дійсний для C++, оскільки всі оголошення функцій
надайте прототипи, а оголошення про невідповідність оголошує перевантаження, а не
конфлікт з попередньою заявою. Використовуйте -Wmissing-декларації для виявлення зниклих безвісти
оголошення на C++.

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

У C++ цей параметр також не попереджає про порожній ініціализатор { }, наприклад:

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

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

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

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

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

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

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

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

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

-Wno-odr
Попереджати про порушення Правил одного визначення під час оптимізації часу підключення. Вимагає
-flto-odr-type-merging бути увімкненим. Увімкнено за замовчуванням.

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

-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)
Попереджати, якщо у функції зустрічається "зовнішня" декларація.

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

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

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

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

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

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

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

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

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

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

-Wvarargs
Попереджати про сумнівне використання макросів, які використовуються для обробки змінних аргументів, наприклад
"va_start". Це за замовчуванням. Щоб заблокувати попереджувальні повідомлення, використовуйте -Wno-varargs.

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

-Wno-virtual-move-assign
Придушіть попередження про успадкування від віртуальної бази за допомогою нетривіального переміщення C++11
оператор присвоєння. Це небезпечно, оскільки віртуальна база доступна
більше ніж на один шлях, він переміщується кілька разів, що може означати, що обидва об’єкти потрапляють усередину
виведений із стану. Якщо оператор присвоєння переміщення записується так, щоб уникнути переміщення з
переміщеного з об’єкта, це попередження можна вимкнути.

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

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

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

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

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

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

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

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

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

-Wno-designated-init (лише C і Objective-C)
Придушити попередження, коли для ініціалізації структури використовується позиційний ініціализатор
було позначено атрибутом "designated_init".

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

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

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

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

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

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

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

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

-gpubnames
Створення карликових розділів .debug_pubnames і .debug_pubtypes.

-ggnu-pubnames
Згенеруйте розділи .debug_pubnames і .debug_pubtypes у форматі, придатному для
перетворення в індекс GDB. Ця опція корисна лише з компонувальником, який може
створити індекс GDB версії 7.

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

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

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

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

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

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

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

Зауважте, що з DWARF версії 2 деякі порти вимагають і завжди використовують деякі неконфліктні
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-версія.

-gz[=тип]
Створіть стислі розділи налагодження у форматі DWARF, якщо це підтримується. Якщо тип is
не вказано, тип за замовчуванням залежить від можливостей асемблера та компоновщика
використаний тип може бути одним із ніхто (не стискати розділи налагодження), zlib (використовуйте zlib
стиснення у форматі ELF gABI), або зліб-гну (використовуйте стиснення zlib у традиційному GNU
формат). Якщо компонувальник не підтримує запис стиснених розділів налагодження, параметр
відхиляється. В іншому випадку, якщо асемблер їх не підтримує, -gz мовчки
ігнорується під час створення об’єктних файлів.

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

-fsanitize=адреса
Увімкніть AddressSanitizer, швидкий детектор помилок пам’яті. Інструкції доступу до пам'яті є
оснащені інструментами для виявлення помилок за межами та використання після вільних. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizer> для більш детальної інформації. The
На поведінку під час виконання можна вплинути за допомогою ASAN_OPTIONS змінна середовища. Коли
якщо встановлено значення "help=1", доступні параметри відображаються під час запуску інструменту
програма. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> для а
список підтримуваних опцій.

-fsanitize=адреса ядра
Увімкнути AddressSanitizer для ядра Linux. Побачитиhttps://github.com/google/kasan/wiki>
для більш докладної інформації.

-fsanitize=thread
Увімкніть ThreadSanitizer, швидкий детектор перегонів даних. Інструкції доступу до пам'яті є
обладнаний для виявлення помилок у перегонах даних. Побачити
<https://github.com/google/sanitizers/wiki#threadsanitizer> для більш детальної інформації. Біг-
На поведінку часу можна вплинути за допомогою TSAN_OPTIONS змінна середовища; побачити
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> для списку
підтримувані параметри.

-fsanitize=витік
Увімкніть LeakSanitizer, детектор витоку пам’яті. Ця опція має значення лише для зв’язування
виконувані файли, а якщо ні -fsanitize=адреса ні -fsanitize=thread використовується. У цьому
у випадку, якщо виконуваний файл пов'язаний з бібліотекою, яка замінює "malloc" та інші
функції розподілу. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> більше
деталі. На поведінку під час виконання можна вплинути за допомогою LSAN_OPTIONS навколишнє середовище
змінна.

-fsanitize=не визначено
Увімкніть UndefinedBehaviorSanitizer, швидкий детектор невизначеної поведінки. Різні
обчислення інструментують для виявлення невизначеної поведінки під час виконання. Поточний
підопції:

-fsanitize=зміна
Цей параметр дозволяє перевірити, чи не є результат операції зміни
невизначений. Зауважте, що те, що саме вважається невизначеним, дещо відрізняється
між C і C++, а також між ISO C90 і C99 тощо.

-fsanitize=ціле-ділення-на нуль
Визначити ціле ділення на нуль, а також поділ «INT_MIN / -1».

-fsanitize=недоступний
За допомогою цієї опції компілятор перетворює виклик "__builtin_unreachable" у a
натомість виклик діагностичного повідомлення. При досягненні виклику "__builtin_unreachable",
поведінка невизначена.

-fsanitize=vla-bound
Цей параметр наказує компілятору перевірити, чи розмір змінної довжини
масив позитивний.

-fsanitize=нуль
Ця опція вмикає перевірку покажчика. Зокрема, додаток, створений з
ця опція, увімкнена, видаватиме повідомлення про помилку під час спроби розіменування a
NULL вказівник або якщо посилання (можливо, посилання на значення rvalue) прив’язано до NULL
або якщо метод викликається для об’єкта, на який вказує вказівник NULL.

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

-fsanitize=signed-integer-overflow
Цей параметр дозволяє перевіряти переповнення знакового цілого числа. Перевіряємо, що результат
"+", "*", і як унарний, так і двійковий "-" не переповнюються в знаковому
арифметика. Зауважте, що потрібно враховувати цілочисельні правила просування. Тобто,
наступне не є переповненням:

знак зі знаком a = SCHAR_MAX;
a++;

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

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

-fsanitize=розмір об'єкта
Цей параметр дозволяє інструментувати посилання на пам’ять за допомогою
Функція "__builtin_object_size". Різні доступи вказівників поза межами
виявлено.

-fsanitize=float-divide-by-zero
Виявити ділення з плаваючою комою на нуль. На відміну від інших подібних варіантів,
-fsanitize=float-divide-by-zero не ввімкнено -fsanitize=не визначено, з
Ділення з плаваючою комою на нуль може бути законним способом отримання нескінченності
і NaNs.

-fsanitize=float-cast-overflow
Цей параметр дозволяє перевіряти перетворення типу з плаваючою комою в ціле число. Перевіряємо
щоб результат перетворення не переповнювався. На відміну від інших подібних
варіантів, -fsanitize=float-cast-overflow не ввімкнено -fsanitize=не визначено.
Цей параметр не працює добре, якщо ввімкнено винятки "FE_INVALID".

-fsanitize=ненульовий атрибут
Цей параметр дозволяє інструментувати виклики, перевіряючи, чи не є значення null
передається до аргументів, позначених як такі, що потребують ненульового значення функцією «ненуль».
атрибут.

-fsanitize=повертає-ненульовий-атрибут
Цей параметр дозволяє інструментувати оператори return у функціях, позначених
Атрибут функції "returns_nonnull", щоб виявити повернення нульових значень з таких
функції.

-fsanitize=bool
Ця опція дозволяє вимірювати навантаження з bool. Якщо значення, відмінне від 0/1
завантажується, виникає помилка під час виконання.

-fsanitize=enum
Цей параметр включає інструментування навантажень із типу enum. Якщо значення
За межами діапазону значень для типу enum завантажується помилка під час виконання
виданий.

-fsanitize=vptr
Цей параметр дозволяє інструментувати виклики функцій-членів C++, доступ до членів
і деякі перетворення між покажчиками на базові та похідні класи, щоб перевірити
об’єкт, на який посилається, має правильний динамічний тип.

У той час як -ftrapv спричиняє випуск пасток для підписаних переповнень, -fsanitize=не визначено
видає діагностичне повідомлення. Наразі це працює лише для сімейства мов C.

-fno-sanitize=все
Цей параметр вимикає всі раніше ввімкнені дезінфікуючі засоби. -fsanitize=все НЕ
дозволено, оскільки деякі дезінфікуючі засоби не можна використовувати разом.

-fasan-shadow-offset=номер
Цей параметр змушує GCC використовувати користувацьке зміщення тіні в перевірках AddressSanitizer. це є
корисно для експериментування з різними макетами тіньової пам'яті в ядрі
Адреса Sanitizer.

-fsanitize-відновити[=вибирає]
-fsanitize-recover= контролює режим відновлення помилок для дезінфікуючих засобів, зазначених у комах
окремий список вибирає. Увімкнення цієї опції для компонента дезінфікуючого засобу призводить до цього
спробуйте продовжити запуск програми, як ніби помилки не сталося. Це означає кілька
Про помилки під час виконання можна повідомити під час одного запуску програми, а код виходу
програма може вказувати на успіх, навіть якщо повідомлялося про помилки. The
-fno-sanitize-recover= Для зміни цієї поведінки можна використовувати параметр: тільки перший
Виявлена ​​помилка повідомляється, і програма виходить із ненульовим кодом виходу.

Наразі ця функція працює лише для -fsanitize=не визначено (і його підопції, крім
та цінності -fsanitize=недоступний і -fsanitize=повернути), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-by-zero і -fsanitize=адреса ядра. Для цих дезінфікуючих засобів
відновлення помилок увімкнено за замовчуванням. -fsanitize-recover=all і
-fno-sanitize-recover=all також прийнято, перший забезпечує відновлення для всіх
дезінфікуючих засобів, які його підтримують, останнє вимикає відновлення для всіх дезінфікуючих засобів
підтримати його.

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

-fsanitize-recover=не визначено,float-cast-overflow,float-ділить-на нуль

Аналогічно -fno-sanitize-recover еквівалентна

-fno-sanitize-recover=не визначено,float-cast-overflow,float-ділить-на-нуль

-fsanitize-undefined-trap-on-error
повне г, повне г,, показали, від, номер, XNUMX -fsanitize-undefined-trap-on-error Параметр наказує компілятору звітувати
невизначена поведінка, що використовує "__builtin_trap", а не бібліотечну процедуру "libubsan".
Перевага цього полягає в тому, що бібліотека "libubsan" не потрібна і не пов'язана
в, тому це можна використовувати навіть у окремо розташованих середовищах.

-fcheck-pointer-bounds
Увімкнути інструменти перевірки меж покажчика. Кожне посилання на пам'ять інструментується
з перевіркою вказівника, який використовується для доступу до пам'яті, на відповідність межам, пов'язаним з цим
вказівник.

Наразі доступна лише реалізація для Intel MPX, отже, цільова x86 і
-mmpx необхідні для ввімкнення цієї функції. Прилади на основі MPX вимагає a
бібліотека часу виконання, щоб увімкнути MPX в апаратному забезпеченні та обробляти сигнали порушення обмежень. За
за замовчуванням, коли -fcheck-pointer-bounds і -mmpx параметри використовуються для зв’язування програми,
Посилання драйверів GCC проти libmpx бібліотека часу виконання та libmpxwrappers бібліотека. Це
також передає '-z bndplt' компоновщику, якщо він підтримує цю опцію (що встановлено
на конфігурації libmpx). Зауважте, що старі версії компонувальника можуть ігнорувати опцію. Золото
компонувальник не підтримує параметр '-z bndplt'. Без підтримки '-z bndplt' у компоновщику
виклики до динамічних бібліотек втрачають межі, що знижує загальний рівень захисту. Його
настійно рекомендуємо використовувати компонувальник з підтримкою '-z bndplt'. Якщо такого лінкера немає
доступний, рекомендується завжди використовувати -static-libmpxwrappers для кращого захисту
рівень або використання -статичний щоб повністю уникнути зовнішніх викликів до динамічних бібліотек. MPX-
Інструменти на основі можуть використовуватися для налагодження, а також можуть бути включені у виробництво
код для підвищення безпеки програми. Залежно від використання у вас можуть бути різні
вимоги до бібліотеки часу виконання. Поточна версія бібліотеки часу виконання MPX
більш орієнтований на використання як інструмент налагодження. Використання бібліотеки часу виконання MPX має на увазі
-lpthread, Див. Також -static-libmpx. На поведінку бібліотеки під час виконання можна вплинути
використовуючи різні CHKP_RT_* змінні середовища. Побачити
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> більше
подробиці

Створені прилади можуть керуватися різними -fchkp-* варіанти та за
Атрибут поля структури "bnd_variable_size", "bnd_legacy" і "bnd_instrument"
атрибути функції. GCC також надає ряд вбудованих функцій для керування
засіб перевірки меж покажчика.

-fchkp-check-incomplete-type
Створення перевірок меж покажчика для змінних із неповним типом. Увімкнено
за замовчуванням.

-fchkp-narrow-bounds
Контролює межі, що використовуються за допомогою Pointer Bounds Checker для вказівників на поля об’єктів. Якщо
увімкнено звуження, тоді використовуються межі поля. В іншому випадку використовуються межі об’єкта.
Дивись також -fchkp-від вузького до самого внутрішнього масиву і -fchkp-first-field-has-own-bounds.
Увімкнено за замовчуванням.

-fchkp-first-field-has-own-bounds
Примушує засіб перевірки меж покажчика використовувати звужені межі для адреси першого
поле в структурі. За замовчуванням вказівник на перше поле має ті самі межі
як вказівник на всю структуру.

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

-fchkp-оптимізувати
Вмикає оптимізацію перевірки меж покажчика. Увімкнено за замовчуванням під час оптимізації
рівні -O, -O2, -O3.

-fchkp-use-fast-string-functions
Дозволяє використовувати версії рядкових функцій *_nobnd (не копіюючи межі) покажчиком
Перевірка меж. Вимкнено за замовчуванням.

-fchkp-use-nochk-string-functions
Дозволяє використовувати версії рядкових функцій *_nochk (без перевірки меж) за допомогою покажчика
Перевірка меж. Вимкнено за замовчуванням.

-fchkp-use-static-bounds
Дозволити засобу перевірки меж покажчика генерувати статичні межі, що містять межі статичних
змінні. Увімкнено за замовчуванням.

-fchkp-use-static-const-bounds
Використовуйте статично ініціалізовані межі для постійних обмежень замість того, щоб генерувати їх кожну
час вони необхідні. За замовчуванням увімкнено, коли -fchkp-use-static-bounds активовано

-fchkp-treat-zero-dynamic-size-as-infinite
За допомогою цього параметра об’єкти з неповним типом, динамічно отриманий розмір яких дорівнює нулю
Обробляються як такі, що мають нескінченний розмір замість цього за допомогою перевірки меж покажчика. Цей варіант
може бути корисним, якщо програма пов’язана з бібліотекою, де для деяких відсутня інформація про розмір
символи. Вимкнено за замовчуванням.

-fchkp-check-read
Доручає засобу перевірки меж вказівника генерувати перевірки для всіх доступів до читання до пам’яті.
Увімкнено за замовчуванням.

-fchkp-check-write
Доручає засобу перевірки меж вказівника генерувати перевірки для всіх доступів запису до пам’яті.
Увімкнено за замовчуванням.

-fchkp-store-bounds
Доручає Pointer Bounds Checker генерувати сховища меж для запису покажчика.
Увімкнено за замовчуванням.

-fchkp-instrument-calls
Доручає засобу перевірки меж покажчика передавати межі покажчика викликам. Увімкнено за замовчуванням.

-fchkp-instrument-marked-only
Доручає засобу перевірки меж вказівника інструментувати лише функції, позначені символом
атрибут "bnd_instrument". Вимкнено за замовчуванням.

-fchkp-use-wrappers
Дозволяє засобу перевірки меж вказівника замінювати виклики вбудованих функцій викликами до
функції обгортки. Коли -fchkp-use-wrappers використовується для зв'язування програми, драйвер GCC
автоматично посилається проти libmpxwrappers, Див. Також -static-libmpxwrappers. Увімкнено
за замовчуванням

-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
Стисніть інформацію про налагодження DWARF 2, видаливши дубльовану інформацію про
кожен символ. Цей параметр має сенс лише під час створення налагодження DWARF 2
інформація з -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[=спец-список]
Вкажіть структурно-подібні типи, для яких компілятор генерує налагоджувальну інформацію. The
Мета полягає в тому, щоб зменшити дублювання налагоджувальної інформації структури між різними об’єктними файлами
в рамках тієї ж програми.

Цей варіант є детальною версією -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-звіт
Змушує компілятор друкувати деякі статистичні дані про постійне виділення пам’яті, коли він
закінчує.

-fmem-report-wpa
Змушує компілятор друкувати деяку статистику про постійне виділення пам’яті для WPA
тільки фаза.

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

-fprofile-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=список зустрічних значень
Встановіть верхню межу внутрішнього лічильника налагодження. список зустрічних значень відокремлюється комою
список name:значення пари, яка встановлює верхню межу кожного лічильника налагодження name до
значення. Усі лічильники налагодження мають початкову верхню межу "UINT_MAX"; таким чином "dbg_cnt"
завжди повертає true, якщо верхня межа не встановлена ​​цим параметром. Наприклад, с
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" повертає true лише для перших 10
виклики.

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

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

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

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

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

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

-фенабельне-дерево-проходити
-фенабельне-дерево-проходити=діапазон-список
Увімкнути пропуск дерева проходити, Побачити -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-проходити
-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-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 і -fdump-rtl-sched2 увімкнути дамп після основного блоку
перепустки розкладу.

-fdump-rtl-ree
Дамп після усунення знаку/нуля розширення.

-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-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 анотація

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

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

-report-bug
Збирайте та скидайте інформацію про налагодження в тимчасовий файл, якщо ICE в компіляторі C/C++
трапився.

-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-перемикання-опції
-fdump-tree-перемикання-опції=ім'я файлу
Контролювати дампування на різних етапах обробки проміжного дерева мови до
файл. Ім’я файлу генерується шляхом додавання суфікса, специфічного для перемикача, до
ім’я вихідного файлу, і файл створюється в тому самому каталозі, що й вихідний файл. в
case of =ім'я файлу опція, дамп виводиться на заданий файл замість auto
іменовані файли дампу. Якщо -опції використовується форма, опції це список - відокремлений
параметри, які контролюють деталі дампа. Не всі варіанти застосовні до всіх
смітники; ті, які не мають значення, ігноруються. Доступні наступні варіанти

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

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

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

Під час скидання дерев із гарними написами ця опція забороняє скидання тіл
контрольні структури.

Під час скидання RTL друкуйте RTL у тонкому (згорнутому) вигляді замість стандартного
LISP-подібне представлення.

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

деталі
Увімкнути детальніші дампи (не враховується кожним параметром дампу). Також включають
інформація з оптимізації проходить.

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

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

графік
Для кожного з інших вказаних файлів дампу (-fdump-rtl-проходити), дамп а
представлення графіка потоку керування, придатного для перегляду за допомогою GraphViz to
file.passid.pass.dot. Кожна функція у файлі добре надрукована як підграф,
щоб GraphViz міг відобразити їх усі в одному сюжеті.

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

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

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

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

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

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

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

оптимізований
Увімкнути відображення інформації про оптимізацію (доступно лише на певних проходах).

пропущений
Увімкнути відображення пропущеної інформації про оптимізацію (доступно лише під час певних проходів).

увагу
Увімкнути іншу детальну інформацію про оптимізацію (доступно лише на певних проходах).

=ім'я файлу
Замість автоматичного іменованого файлу дампа виведіть у вказане ім’я файлу. Файл
Імена stdout і stderr обробляються спеціально і вважаються вже відкритими
стандартні потоки. Наприклад,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

виводить дамп векторизатора foo.dump, тоді як ПРЕДВАРИТЕЛЬНИЙ дамп виводиться на stderr.
Якщо для одного проходу вказано два конфліктуючі імена файлів дампу, то останнє
параметр замінює попередній.

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

оптальний
Увімкніть усі параметри оптимізації, тобто оптимізований, пропущений, і увагу.

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

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

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

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

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

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). Ім'я файлу створюється за допомогою
додавання .vrp до імені вихідного файлу.

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

-fopt-info
-fopt-info-опції
-fopt-info-опції=ім'я файлу
Керує дампами оптимізації з різних проходів оптимізації. Якщо -опції форма є
б / в, опції це список - розділені ключові слова, щоб вибрати деталі дампу та
оптимізації.

повне г, повне г,, показали, від, номер, XNUMX опції можна розділити на дві групи: варіанти, що описують багатослівність
дамп і параметри, що описують, які оптимізації слід включити. Варіанти від
обидві групи можна вільно змішувати, оскільки вони не перекриваються. Однак у разі
будь-які конфлікти, пізніші параметри замінюють попередні параметри в командному рядку.

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

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

пропущений
Роздрукуйте інформацію про пропущені оптимізації. Індивідуум проходить контроль, який
інформацію для включення до виходу.

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

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

Для опису групи можна використовувати одне або кілька з наступних ключових слів
оптимізації:

ipa Увімкнути дампи з усіх міжпроцедурних оптимізацій.

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

вбудований
Увімкнути дампи з усіх вбудованих оптимізацій.

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

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

If опції пропущено, за замовчуванням оптимізовано-оптальний, що означає скинути всю інформацію
про успішні оптимізації з усіх проходів.

Якщо ім'я файлу надається, то дампи з усіх застосовних оптимізацій
об'єднані в ім'я файлу. В іншому випадку дамп виводиться на stderr, Хоча
множинний -fopt-info приймаються варіанти, тільки один з них може включати a ім'я файлу. Якщо
надаються інші імена файлів, тоді всі, крім першого, такі параметри ігноруються.

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

У наступному прикладі інформація про оптимізацію виводиться до stderr:

gcc -O3 -fopt-info

Цей приклад:

gcc -O3 -fopt-info-missed=missed.all

виводить звіт про пропущену оптимізацію з усіх проходів до пропустив.все, а цей:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

друкує інформацію про втрачені можливості оптимізації з проходів векторизації
on stderr. Зверніть увагу на це -fopt-info-vec-missed еквівалентна -fopt-info-missed-vec.

Як інший приклад,

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

виводить інформацію про пропущені оптимізації, а також оптимізовані розташування з усіх
підкладка переходить у inline.txt.

Нарешті, розглянемо:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Тут два вихідних назви файлів vec.miss і loop.opt конфліктують, оскільки лише один
вихідний файл дозволений. У цьому випадку діє лише перший варіант і
наступні параметри ігноруються. Тільки таким чином vec.miss виробляється, що містить відвали
з векторізатора про втрачені можливості.

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

-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 будується.)

-fno-eliminate-unused-debug-types
Зазвичай, створюючи вихід DWARF 2, GCC уникає виведення символу налагодження для
типи, які ніде не використовуються у вихідному файлі, що компілюється. Іноді це корисно
щоб GCC видав налагоджуючу інформацію для всіх типів, оголошених у блоці компіляції,
незалежно від того, чи використовуються вони насправді в цьому підрозділі компіляції, для
Наприклад, якщо в налагоджувачі ви хочете привести значення до типу, який насправді не є
використовується у вашій програмі (але оголошується). Однак частіше це призводить до а
значний обсяг втраченого простору.

опції Що Контроль Оптимізація
Ці параметри керують різними видами оптимізації.

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

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

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

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

Більшість оптимізацій увімкнено, лише якщо -O рівень встановлюється в командному рядку. Інакше
вони вимкнені, навіть якщо вказано окремі прапорці оптимізації.

Залежно від цілі та того, як GCC був налаштований, дещо інший набір
оптимізацію можна ввімкнути на кожному -O рівня, ніж перераховані тут. Ви можете викликати GCC
з -Q --help=оптимизатори щоб дізнатися точний набір оптимізацій, які ввімкнено на
кожен рівень.

-O
-O1 Оптимізація. Оптимізація компіляції займає трохи більше часу і набагато більше пам’яті
велика функція.

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

-O вмикає такі прапорці оптимізації:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fcompare-elim
-fcprop-реєстри -fdce -fdefer-pop -fзатримка-гілка -fdse -поширювати вперед
-fguess-гіл-ймовірність -fif-перетворення2 -fif-перетворення
-finline-functions-called-once -fipa-pure-const -фіпа-профіль -фіпа-довідка
-fmerge-constants -fmove-loop-інваріанти -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copy-prop -ftree-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -безкоштовно-безкоштовно -ftree-phiprop
-Free-раковина -ftree-slsr -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 -fdevirtualize-спекулятивно
-дорогі оптимізації -fgcse -fgcse-lm -fhoist-adjacent-loads
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-alignment -фіпа-шра
-fipa-icf -fisolate-erroeous-paths-dereference -flra-remat -foptimize-sibling-calls
-foptimize-strlen -fpartial-inlining -fpeephole2 -freorder-блоки
-freorder-blocks-and-partition -freorder-functions -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-overflow -ftree-builtin-call-dce -перетворення з трьома перемикачами -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-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-cost-model, -ftree-partial-pre і -fipa-cp-clone Варіанти.

-O0 Скоротіть час компіляції та змусьте налагодження дати очікувані результати. Це
за замовчуванням.

-Ос Оптимізувати за розміром. -Ос дозволяє все -O2 оптимізації, які зазвичай не збільшуються
розмір коду. Він також виконує подальшу оптимізацію, призначену для зменшення розміру коду.

-Ос вимикає такі прапорці оптимізації: -falign-functions -falign-стрибки
-Falign-loops -falign-етикетки -freorder-блоки -freorder-blocks-and-partition
-fprefetch-loop-arrays

-Швидко
Нехтуйте суворим дотриманням стандартів. -Швидко дозволяє все -O3 оптимізації. Це також
дозволяє оптимізації, які не дійсні для всіх стандартно-сумісних програм. Це
включається -швидка математика і специфічні для Fortran -fno-protect-parens і -fstack-масиви.

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

Якщо ви використовуєте кілька -O варіанти, з номерами рівнів або без них, останній такий варіант
той, який ефективний.

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

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

Налаштування за замовчуванням (якщо не оптимізовано за розміром) для 32-розрядних GNU/Linux x86 і 32-розрядних
Цілі Darwin x86 є -fomit-frame-pointer. Ви можете налаштувати GCC за допомогою
--enable-frame-pointer налаштувати параметр, щоб змінити значення за замовчуванням.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-foptimize-sibling-calls
Оптимізуйте однотипні та хвостові рекурсивні виклики.

Увімкнено на рівнях -O2, -O3, -Ос.

-foptimize-strlen
Оптимізуйте різні стандартні рядкові функції C (наприклад, "strlen", "strchr" або "strcpy") і
їхні аналоги "_FORTIFY_SOURCE" у швидші альтернативи.

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

Вбудовування насправді контролюється рядом параметрів, які можна вказати
індивідуально за допомогою --парам name=значення, -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 вмикає цю опцію за замовчуванням. Якщо ви хочете змусити компілятор перевірити, чи a
на змінну посилається, незалежно від того, увімкнена чи ні оптимізація, use
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.

Увімкнено за замовчуванням о -O1 і вище.

За замовчуванням - -fbranch-count-reg.

-fno-function-cse
Не розміщуйте адреси функцій в регістрах; зробіть кожну інструкцію, яка викликає a
константна функція містить адресу функції явно.

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

За замовчуванням - -ffunction-cse

-fno-zero-initialized-in-bss
Якщо ціль підтримує розділ BSS, GCC за замовчуванням розміщує змінні, які є
ініціалізується на нуль у BSS. Це може заощадити місце в отриманому коді.

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

За замовчуванням - -fzero-ініціалізовано-в-bss.

-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
Послідовність завантаження/збереження буде змінена на завантаження поза циклом і копію/збереження всередині
петлі.

Увімкнено за замовчуванням, коли -fgcse активовано

-fgcse-sm
Коли -fgcse-sm увімкнено, після глобального спільного запускається проходження магазину
усунення підвиразів. Цей перехід намагається вивести магазини з циклів. При використанні
в поєднанні з -fgcse-lm, цикли, що містять послідовність завантаження/збереження, можна змінити
до навантаження перед циклом і магазину після циклу.

Не ввімкнено на жодному рівні оптимізації.

-fgcse-las
Коли -fgcse-las увімкнено, глобальне загальне видалення підвиразів проходить
усуває надлишкові навантаження, які надходять після зберігання в одне й те саме місце пам’яті (обидва
часткове та повне звільнення).

Не ввімкнено на жодному рівні оптимізації.

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

-faggressive-loop-optimizations
Цей параметр повідомляє оптимізатору циклу використовувати мовні обмеження для визначення меж
кількість ітерацій циклу. Це передбачає, що код циклу не викликає
невизначена поведінка, наприклад, викликаючи переповнення цілих чисел зі знаком або виходу за межі
доступи до масиву. Для орієнтування використовуються межі кількості ітерацій циклу
Оптимізація розгортання та відлущування циклу та тесту виходу з циклу. Цей параметр увімкнено
за замовчуванням

-funsafe-loop-optimizations
Ця опція повідомляє оптимізатору циклу припустити, що індекси циклу не переповнюються, і
що цикли з нетривіальною умовою виходу не є нескінченними. Це дозволяє ширше
діапазон оптимізації циклу, навіть якщо сам оптимізатор циклу не може довести, що ці
припущення справедливі. Якщо ви використовуєте -Wunsafe-loop-optimizations, попереджає компілятор
якщо він знайде такий цикл.

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

Увімкнено на рівнях -O2, -O3, -Ос.

-fauto-inc-dec
Комбінуйте збільшення або зменшення адрес з доступом до пам’яті. Цей пропуск є
завжди пропускав архітектури, які не мають інструкцій для підтримки цього.
Увімкнено за замовчуванням о -O і вище на архітектурах, які це підтримують.

-fdce
Виконайте видалення мертвого коду (DCE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fdse
Виконайте ліквідацію мертвих магазинів (DSE) на RTL. Увімкнено за замовчуванням о -O і вище.

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

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fif-перетворення2
Використовуйте умовне виконання (якщо доступне) для перетворення умовних переходів
еквіваленти без галузей.

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fdeclone-ctor-dtor
C++ ABI вимагає кількох точок входу для конструкторів і деструкторів: одна для a
базовий підоб'єкт, один для повного об'єкта, а один для віртуального деструктора, який викликає
оператор видалити потім. Для ієрархії з віртуальними базами базовий і повний
варіанти є клонами, що означає дві копії функції. За допомогою цього параметра
базовий і повний варіанти змінюються на thunks, які називають загальну реалізацію.

Увімкнено -Ос.

-fdelete-null-pointer-checks
Припустимо, що програми не можуть безпечно розіменовувати нульові покажчики, і що немає коду чи даних
елемент знаходиться там. Це дає змогу прості постійні оптимізації згортання взагалі
рівні оптимізації. Крім того, інші проходи оптимізації в GCC використовують цей прапор
контроль глобального аналізу потоків даних, який усуває марні перевірки на нульові покажчики;
вони припускають, що якщо покажчик перевіряється після того, як він уже розіменований, він
не може бути нульовим.

Однак зауважте, що в деяких середовищах це припущення не відповідає дійсності. Використовуйте
-fno-delete-null-pointer-checks щоб вимкнути цю оптимізацію для програм, які залежать
на таку поведінку.

Деякі цілі, особливо вбудовані, вимикають цю опцію на всіх рівнях. Інакше
він увімкнений на всіх рівнях: -O0, -O1, -O2, -O3, -Ос. Перепустки, які використовують інформацію
включаються незалежно на різних рівнях оптимізації.

-fdevirtualize
Спроба перетворити виклики у віртуальні функції на прямі виклики. Це робиться обидва
всередині процедури та міжпроцедурно як частина непрямого вбудовування
(-findirect-inlining) і міжпроцедурне поширення константи (-fipa-cp). Увімкнено о
рівні -O2, -O3, -Ос.

-fdevirtualize-спекулятивно
Спроба перетворити виклики віртуальних функцій у спекулятивні прямі виклики. На основі
Аналіз графу спадкування типу, визначення для даного виклику множини
ймовірні цілі. Якщо набір невеликий, бажано розміру 1, змініть виклик на a
умовний вибір між прямими і непрямими викликами. Спекулятивні виклики дозволяють
більше оптимізацій, таких як вбудовування. Коли вони здаються марними після подальшого
оптимізації, вони перетворюються назад у вихідний вигляд.

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

-дорогі оптимізації
Виконайте ряд незначних оптимізацій, які є відносно дорогими.

Увімкнено на рівнях -O2, -O3, -Ос.

-вільно
Спробуйте видалити зайві інструкції розширення. Це особливо корисно для
архітектура x86-64, яка неявно розширюється до нуля в 64-розрядних регістрах після
запис до їх нижньої 32-розрядної половини.

Увімкнено для Alpha, AArch64 та x86 на рівнях -O2, -O3, -Ос.

-fno-lifetime-dse
У C++ на значення об'єкта впливають лише зміни протягом його життя: when
починається конструктор, об’єкт має невизначене значення та будь-які зміни під час
час життя об'єкта мертвий, коли об'єкт знищений. Зазвичай мертвий магазин
ліквідація скористається цим; якщо ваш код спирається на значення
сховище об’єкта, яке зберігається після терміну життя об’єкта, ви можете використовувати цей прапор для
вимкнути цю оптимізацію.

-five-range-shrinkage
Спробуйте зменшити тиск регістра через скорочення діапазону живого регістра. Це
корисно для швидких процесорів з невеликими або помірними наборами регістрів.

-fira-algorithm=алгоритм
Використовуйте вказаний алгоритм фарбування для інтегрованого розподільника регістрів. The
алгоритм аргумент може бути пріоритет, який визначає пріоритетне забарвлення Чоу, або CB,
який визначає забарвлення Чайтіна-Бріггса. Забарвлення Чайтіна-Бріггса не реалізовано
для всіх архітектур, але для тих цілей, які її підтримують, це значення за замовчуванням
тому що він генерує кращий код.

-fira-region=регіон
Використовуйте вказані регіони для інтегрованого розподільника регістрів. The регіон аргумент
має бути одним із наступних:

всі Використовуйте всі цикли як області розміщення регістрів. Це може дати найкращі результати для
машини з невеликим та/або неправильним набором регістрів.

змішаний
Використовуйте всі цикли, окрім циклів з невеликим тиском у регістрі, як області. Це
value зазвичай дає найкращі результати в більшості випадків і для більшості архітектур, і
увімкнено за замовчуванням під час компіляції з оптимізацією для швидкості (-O, -O2, ...).

один Використовуйте всі функції як єдиний регіон. Зазвичай це призводить до найменшого коду
розмір і ввімкнено за замовчуванням для -Ос or -O0.

-fira-таль-напір
Використовуйте IRA для оцінки тиску в реєстрі в коді підйому пропуску для прийняття рішень про підйом
вирази. Цей параметр зазвичай призводить до меншого розміру коду, але він може сповільнити його
компілятор.

Цей параметр увімкнено на рівні -Ос для всіх цілей.

-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.

-flra-remat
Увімкнути чутливу до CFG рематеріалізацію в LRA. Замість завантажувальних значень пролито
псевдо, LRA намагається рематеріалізувати (перерахувати) цінності, якщо це вигідно.

Увімкнено на рівнях -O2, -O3, -Ос.

-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
що є кандидатом на передчасне вилучення з черги глухих закладів. Це має
ефект лише під час другого проходу планування, і тільки якщо -fsched-stalled-insns is
використаний -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
увімкнено.

-fsel-sched-pipelining-outer-loops
Під час вибору конвеєрних циклів під час вибіркового планування також конвейерні зовнішні цикли. Це
варіант не має ефекту, якщо -fsel-sched-pipelining увімкнено.

-fsemantic-interposition
Деякі формати об'єктів, наприклад ELF, дозволяють вставляти символи динамічним компоновщиком.
Це означає, що для символів, експортованих з DSO, компілятор не може виконувати
міжпроцедурне поширення, вбудовування та інші оптимізації в очікуванні того, що
функція або змінна, про яку йдеться, можуть змінитися. Хоча ця функція корисна, для
наприклад, щоб переписати функції виділення пам'яті за допомогою реалізації налагодження, це так
дорого з точки зору якості коду. З -fno-semantic-interposition компілятор
припускає, що якщо для функцій відбудеться інтерпозиція, буде мати функцію перезапису
точно така ж семантика (і побічні ефекти). Аналогічно, якщо трапиться інтерпозиція
для змінних конструктор змінної буде однаковим. Прапор не має
ефект для функцій, явно оголошених inline (де це ніколи не дозволено
інтерпозиція для зміни семантики) і для символів, явно оголошених слабкими.

-fshrink-wrap
Функція Emit виступає лише перед частинами функції, які цього потребують, а не в
верхня частина функції. Цей прапор увімкнено за замовчуванням в -O і вище.

-fcaller-saves
Увімкнути виділення значень регістрам, які заблоковані викликами функцій
надсилання додаткових інструкцій для збереження та відновлення реєстрів навколо таких викликів. Такий
розподіл виконується лише тоді, коли здається, що це призводить до кращого коду.

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

Увімкнено на рівнях -O2, -O3, -Ос.

-fcombine-stack-adjustments
Відстежує коригування стеку (натискання та вибухання) та посилання на пам’ять стека, а потім намагається
знайти способи їх поєднання.

Увімкнено за замовчуванням о -O1 і вище.

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

Увімкнено на рівнях -O2, -O3, -Ос.

-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 і вище.

-fhoist-adjacent-loads
Спекулятивно підняти вантажі з обох гілок if-then-else, якщо вантажі від
суміжні розташування в одній структурі і цільова архітектура має умовну
інструкція переміщення. Цей прапор увімкнено за замовчуванням в -O2 і вище.

-ftree-copy-prop
Виконайте копіювання на деревах. Цей пропуск усуває непотрібні операції копіювання.
Цей прапор увімкнено за замовчуванням в -O і вище.

-fipa-pure-const
Дізнайтеся, які функції є чистими чи постійними. Увімкнено за замовчуванням о -O і вище.

-фіпа-довідка
Дізнайтеся, які статичні змінні не виходять із блоку компіляції. Увімкнено
за замовчуванням на -O і вище.

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

-фіпа-профіль
Виконайте міжпроцедурне поширення профілю. Функції викликаються тільки з холоду
функції позначені як холодні. Також функції, що виконуються один раз (наприклад, "холодний",
«noreturn», статичні конструктори або деструктори). Холодні функції і
Частини функцій, які виконуються один раз, оптимізуються за розміром. Увімкнено
за замовчуванням на -O і вище.

-fipa-cp
Виконайте міжпроцедурне поширення константи. Ця оптимізація аналізує програму
щоб визначити, коли значення, передані функціям, є константами, а потім оптимізувати
відповідно. Ця оптимізація може істотно підвищити продуктивність, якщо
додаток має константи, передані функціям. Цей прапорець увімкнено за замовчуванням в
-O2, -Ос і -O3.

-fipa-cp-clone
Виконайте клонування функції, щоб посилити поширення міжпроцедурної константи. Коли
увімкнено, міжпроцедурне поширення константи виконує функцію клонування, коли
видиму ззовні функцію можна викликати з постійними аргументами. Тому що це
оптимізація може створити кілька копій функцій, вона може значно збільшитися
розмір коду (див --парам ipcp-unit-growth=значення). Цей прапор увімкнено за замовчуванням в
-O3.

-fipa-cp-alignment
Якщо ввімкнено, ця оптимізація поширює вирівнювання параметрів функції для підтримки
кращі операції векторизації та рядків.

Цей прапор увімкнено за замовчуванням в -O2 і -Ос. Це вимагає цього -fipa-cp активовано

-fipa-icf
Виконайте згортання ідентичного коду для функцій і змінних лише для читання. The
оптимізація зменшує розмір коду і може порушити розмотування стеків шляхом заміни функції
еквівалентним з іншою назвою. Оптимізація працює ефективніше
увімкнено оптимізацію часу зв’язку.

Тим не менш, поведінка схожа на оптимізацію Gold Linker ICF, GCC ICF працює
різні рівні і, отже, оптимізації не однакові - є еквівалентності, що
знайдені тільки GCC, а еквівалентності знайдені тільки Gold.

Цей прапор увімкнено за замовчуванням в -O2 і -Ос.

-fisolate-erroeous-paths-dereference
Виявити шляхи, які викликають помилкову або невизначену поведінку через разыменування нульового
покажчик. Ізолюйте ці шляхи від основного потоку керування та поверніть оператор за допомогою
помилкова або невизначена поведінка в пастку. Цей прапор увімкнено за замовчуванням в -O2
і вище.

-fisolate-помилкові-шляхи-атрибут
Виявлення шляхів, які викликають помилкову або невизначену поведінку через використання нульового значення
способом, забороненим атрибутом "returns_nonnull" або "nonnull". Ізолюйте ці шляхи
з основного потоку керування та перетворити оператор з помилковою або невизначеною поведінкою
в пастку. Наразі це не ввімкнено, але може бути увімкнено за допомогою -O2 в майбутньому.

-Free-раковина
Виконуйте рух вперед по деревах. Цей прапор увімкнено за замовчуванням в -O і
вище.

-ftree-bit-ccp
Виконайте розріджене розповсюдження константи умовного біта на деревах та розповсюджуйте покажчик
інформація про вирівнювання. Цей перехід працює лише з локальними скалярними змінними і є
увімкнено за замовчуванням на -O і вище. Це вимагає цього -ftree-ccp активовано

-ftree-ccp
Виконайте розріджене умовне постійне поширення (CCP) на деревах. Тільки цей пропуск
працює з локальними скалярними змінними і вмикається за замовчуванням на -O і вище.

-fssa-phiopt
Виконайте відповідність шаблону на вузлах SSA PHI, щоб оптимізувати умовний код. Цей пропуск є
увімкнено за замовчуванням на -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 має бути налаштований --з-ісл щоб включити
Інфраструктура перетворення графітової петлі.

-шлюз-розв'язка
Виконайте перетворення циклів обміну на циклах. Зміна двох вкладених циклів
перемикає внутрішній і зовнішній цикли. Наприклад, заданий цикл, наприклад:

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 --з-ісл до
увімкнути інфраструктуру перетворення циклу Graphite.

-floop-strip-mine
Виконуйте перетворення видобутку циклів на петлях. Видобуток смуги розбиває цикл на
два вкладених цикли. Зовнішня петля має кроки, рівні розміру смужки і внутрішню
петля має кроки вихідної петлі всередині смужки. Довжину смужки можна змінювати
використання loop-block-tile-size параметр. Наприклад, заданий цикл, наприклад:

DO I = 1, N
A(I) = A(I) + C
ENDDO

loop strip mining перетворює цикл так, ніби він був написаний:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

Ця оптимізація стосується всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --з-ісл до
увімкнути інфраструктуру перетворення циклу 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 --з-ісл до
увімкнути інфраструктуру перетворення циклу Graphite.

-fgraphite-identity
Увімкнути перетворення ідентичності для графіту. Для кожного SCoP ми створюємо
багатогранне представлення та перетворіть його назад у Gimple. Використання -fgraphite-identity
ми можемо перевірити витрати або переваги трансформації GIMPLE -> GRAPHITE -> GIMPLE.
Деякі мінімальні оптимізації також виконуються генератором коду ISL, як індекс
розщеплення та усунення мертвого коду в циклах.

-floop-nest-optimize
Увімкнути оптимізатор гнізд циклів на основі ISL. Це загальний оптимізатор гнізд циклів
на алгоритмах оптимізації Плутона. Він обчислює структуру циклу, оптимізовану для
локальність даних і паралельність. Цей варіант є експериментальним.

-floop-unroll-and-jam
Увімкнути розгортання та застрявання для оптимізатора гнізд циклів на основі ISL. Коефіцієнт розгортання може бути
змінено за допомогою loop-unroll-jam-size параметр. Розгорнутий розмір (підрахунок
від самого внутрішнього) можна змінити за допомогою loop-unroll-jam-depth параметр.
.

-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 окремо від кожної
інші, такі, що вони, швидше за все, містять очікувані значення під час налагодження
сесія

-ftree-coalesce-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
також визначені змінні, а не лише тимчасові елементи компілятора. Це може серйозно обмежити
можливість налагодження оптимізованої програми, скомпільованої з -fno-var-tracking-assignments.
У запереченій формі цей прапор запобігає об’єднанню SSA змінних користувача, у тому числі
вбудовані. Цей параметр увімкнено за замовчуванням.

-ftree-ter
Виконайте тимчасову заміну експресії під час фази SSA->normal. Неодружений
тимчасові елементи use/single def замінюються в місці їх використання на їх визначення
вираз. Це призводить до не-GIMPLE коду, але дає розширювачам набагато більше
складні дерева для роботи, що призведе до кращого генерування RTL. Це увімкнено за допомогою
за замовчуванням на -O і вище.

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

-ftree-vectorize
Виконайте векторизацію на деревах. Цей прапор дозволяє -ftree-loop-vectorize і
-ftree-slp-vectorize якщо не вказано явно.

-ftree-loop-vectorize
Виконайте векторизацію циклів на деревах. Цей прапорець увімкнено за замовчуванням в -O3 і коли
-ftree-vectorize активовано

-ftree-slp-vectorize
Виконайте базову блокову векторизацію на деревах. Цей прапор увімкнено за замовчуванням в -O3 і
коли -ftree-vectorize активовано

-fvect-cost-model=модель
Змінити модель вартості, яка використовується для векторизації. The модель аргумент повинен бути одним з
необмежений, динамічний or дешево, З необмежений змоделюйте векторизований кодовий шлях
вважається прибутковим у той час як з динамічний Модель перевірка часу виконання охороняє
векторизований код-шлях, щоб увімкнути його лише для кількості ітерацій, які, ймовірно, будуть виконуватися
швидше, ніж при виконанні початкового скалярного циклу. The дешево модель відключає
векторизація циклів там, де це було б занадто дорого, наприклад, через
необхідні перевірки під час виконання на залежність або вирівнювання даних, але в іншому випадку дорівнює
динамічний модель. Модель вартості за замовчуванням залежить від інших прапорів оптимізації та є
або динамічний or дешево.

-fsimd-cost-model=модель
Змінити модель вартості, яка використовується для векторизації циклів, позначених OpenMP або Cilk
Плюс директива simd. The модель аргумент повинен бути одним з необмежений, динамічний, дешево.
Усі значення модель мають те саме значення, що описано в -fvect-cost-model і
за замовчуванням модель витрат, визначена с -fvect-cost-model використовується.

-ftree-vrp
Виконайте поширення діапазону значень на деревах. Це схоже на постійне поширення
pass, але замість значень поширюються діапазони значень. Це дозволяє
оптимізатори для видалення непотрібних перевірок діапазону, таких як перевірки прив’язаності до масиву та нульовий покажчик
чеки. Це ввімкнено за замовчуванням на -O2 і вище. Видалення перевірки нульового покажчика
виконується лише якщо -fdelete-null-pointer-checks активовано

-fsplit-ivs-in-unroller
Дозволяє виразити значення індукційних змінних у наступних ітераціях
розгорнутий цикл із використанням значення на першій ітерації. Це порушує тривалу залежність
ланцюжків, що покращує ефективність планування проходів.

Комбінація з -fweb і CSE часто достатньо для отримання того ж ефекту.
Однак це ненадійно у випадках, коли тіло циклу складніше, ніж a
один базовий блок. Він також взагалі не працює на деяких архітектурах через
обмеження в пропуску 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, для функцій із визначеним користувачем атрибутом розділу та на будь-якому
архітектура, яка не підтримує іменовані розділи.

Увімкнено для x86 на рівнях -O2, -O3.

-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" стає статичними функціями і фактично оптимізується
більш агресивно за допомогою міжпроцедурних оптимізаторів.

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

-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.

Єдине важливе, про що слід пам’ятати, – це ввімкнути оптимізацію під час посилань
потрібно використовувати драйвер GCC для виконання кроку підключення. Після цього GCC виконується автоматично
оптимізація часу зв'язку, якщо будь-який із залучених об'єктів був скомпільований з -flto
параметр командного рядка. Як правило, слід вказати параметри оптимізації, які будуть використовуватися
для оптимізації часу зв'язку, хоча GCC намагається вгадати оптимізацію
рівень для використання з параметрів, що використовуються під час компіляції, якщо ви не вкажете один у link-
час. Ви завжди можете скасувати автоматичне рішення про оптимізацію часу зв’язку за адресою
час зв'язку шляхом проходження -fno-lto до команди посилання.

Щоб оптимізація всієї програми була ефективною, необхідно створити певне ціле
програмні припущення. Компілятор повинен знати, якими можуть бути функції та змінні
доступ до бібліотек і середовища виконання за межами блоку, оптимізованого під час підключення. Коли
підтримується компонувальником, плагіном компоновщика (див -fuse-linker-plugin) проходить
інформація для компілятора про використані та видимі ззовні символи. Коли
плагін компонування недоступний, -f ціла програма слід використовувати, щоб дозволити компілятору
зробити ці припущення, що призводить до більш агресивних рішень щодо оптимізації.

Коли -fuse-linker-plugin не вмикається тоді, коли файл компілюється з -flto, то
згенерований об’єктний файл більший за звичайний об’єктний файл, оскільки містить GIMPLE
байт-коди і звичайний кінцевий код (див -ffat-lto-об'єкти. Це означає, що об’єкт
файли з інформацією LTO можуть бути пов'язані як звичайні об'єктні файли; якщо -fno-lto проходить
до компоновщика не застосовуються міжпроцедурні оптимізації. Зверніть увагу, що коли
-fno-fat-lto-objects увімкнено, етап компіляції швидший, але ви не можете виконати a
звичайне посилання на них без LTO.

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

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

Це створює окремі об’єктні файли з неоптимізованим кодом ассемблера, але
отриманий двійковий файл myprog оптимізовано на -O3. Якщо замість цього кінцевий двійковий файл
створений за допомогою -fno-lto, То myprog не оптимізовано.

Створюючи остаточний двійковий файл, GCC застосовує до них лише оптимізацію часу з’єднання
файли, які містять байт-код. Таким чином, ви можете змішувати та поєднувати об’єктні файли та
бібліотеки з байт-кодами GIMPLE та кінцевим об'єктним кодом. GCC вибирає автоматично
які файли оптимізувати в режимі LTO і які файли зв’язувати без подальшого
обробка

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

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

Наразі наступні параметри та їх налаштування беруться з першого об’єктного файлу
який це чітко вказав: -fPIC, -fpic, -fpie, -fзагальний, -фекційні виключення,
-fnon-call-exceptions, -fgnu-tm і все -m цільові прапори.

Певні прапори зміни ABI повинні збігатися в усіх одиницях компіляції та спробах
замінити це під час з’єднання з конфліктуючим значенням ігнорується. Це включає
такі варіанти, як -freg-struct-return і -fpcc-struct-return.

Інші варіанти, такі як -ffp-контракт, -fno-strict-overflow, -fwrapv, -фно-трапв or
-fno-strict-aliasing передаються до стадії зв’язку та консервативно об’єднуються
для конфліктуючих одиниць перекладу. Конкретно -fno-strict-overflow, -fwrapv і
-фно-трапв мати пріоритет і напр -ffp-contract=вимкнено має пріоритет
-ffp-contract=швидко. Ви можете змінити їх під час посилання.

Рекомендується скомпілювати всі файли, які беруть участь у одному посиланні
ті самі параметри, а також вкажіть ці параметри під час посилання.

Якщо LTO зустрічає об’єкти зі зв’язуванням C, оголошеними з несумісними типами, окремо
одиниці перекладу, які повинні бути пов’язані між собою (невизначена поведінка відповідно до ISO C99
6.2.7), може бути виданий нефатальний діагноз. Поведінка все ще не визначена під час виконання
час. Подібну діагностику можна поставити для інших мов.

Ще одна особливість LTO полягає в тому, що можна застосовувати міжпроцедурні оптимізації
у файлах, написаних різними мовами:

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

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

Скажімо, якщо об’єктні файли, що містять байт-код GIMPLE, зберігаються в архіві бібліотеки
libfoo.a, їх можна витягти та використати у посиланні LTO, якщо ви використовуєте a
лінкер з підтримкою плагінів. Щоб створити статичні бібліотеки, придатні для LTO, використовуйте gcc-ar
і gcc-ranlib замість ar і ranlib; щоб показати символи об’єктних файлів з
Байт-код GIMPLE, використовуйте gcc-nm. Ці команди цього вимагають ar, ranlib і nm були
зібрано з підтримкою плагінів. Під час посилання використовуйте прапорець -fuse-linker-plugin до
переконатися, що бібліотека бере участь у процесі оптимізації LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

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

Якщо ви не використовуєте компоновщик з підтримкою плагінів і/або не вмикаєте компонувальник
плагін, потім об’єкти всередині libfoo.a витягуються та зв’язуються, як зазвичай, але вони
не брати участі в процесі оптимізації LTO. Для того, щоб зробити статичну бібліотеку
підходить як для оптимізації LTO, так і для звичайного зв'язування, компілюйте його об'єктні файли з
-flto -ffat-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 щоб вказати розділення, що віддзеркалює вихідні файли або збалансований
щоб вказати розділення на однакові за розміром шматки (за можливості) або Макс для створення
новий розділ для кожного символу, де це можливо. Уточнення ніхто як алгоритм
повністю вимикає розділення та потокову передачу. Значенням за замовчуванням є збалансований. У той час як
1to1 можна використовувати як обхідний шлях для різних проблем упорядкування коду, Макс
розділення призначене лише для внутрішнього тестування. Значення один вказує, що
у той час як значення має використовуватися рівно один розділ ніхто обходить розділення і
виконує крок оптимізації часу з’єднання безпосередньо з фази WPA.

-flto-odr-type-merging
Увімкнути потокову передачу назв зіпсованих типів типів C++ та їх об’єднання на
час посилання. Це збільшує розмір об’єктних файлів LTO, але дозволяє діагностувати One
Визначення Порушення правил.

-flto-compression-level=n
Цей параметр визначає рівень стиснення, що використовується для написання мови середнього рівня
до об’єктних файлів LTO і має значення лише в поєднанні з режимом LTO (-flto).
Допустимі значення: від 0 (без стиснення) до 9 (максимальне стиснення). Цінності поза цим
діапазон обмежені до 0 або 9. Якщо параметр не вказано, значення за замовчуванням збалансовано
використовується налаштування стиснення.

-flto-звіт
Друкує звіт із внутрішніми деталями про роботу оптимізатора часу зв’язку. The
зміст цього звіту відрізняється від версії до версії. Це має бути корисним для GCC
розробників під час обробки об’єктних файлів у режимі LTO (через -flto).

Вимкнено за умовчанням.

-flto-report-wpa
Люблю -flto-звіт, але друкуйте лише для фази WPA оптимізації часу зв’язку.

-fuse-linker-plugin
Дозволяє використовувати плагін компонувальника під час оптимізації часу з’єднання. Цей варіант залежить
про підтримку плагінів у компонувальнику, який доступний у золотому кольорі або в GNU ld 2.21 або
новіший.

Цей параметр дозволяє витягувати об’єктні файли з байт-кодом GIMPLE з бібліотеки
архіви. Це покращує якість оптимізації, відкриваючи більше коду за посиланням-
оптимізатор часу. Ця інформація визначає, до яких символів можна отримати зовнішній доступ
(за об'єктом, що не є LTO, або під час динамічного зв'язування). Покращення якості коду в результаті
двійкові файли (і спільні бібліотеки, які використовують приховану видимість) подібні до
-f ціла програма, Побачити -flto для опису впливу цього прапора та способів
використай це.

Цей параметр увімкнено за замовчуванням, якщо підтримка LTO в GCC увімкнена і GCC був
налаштований для використання з компонувальником, який підтримує плагіни (GNU ld 2.21 або новішої або золотої).

-ffat-lto-об'єкти
Об’єкти Fat LTO – це об’єктні файли, які містять як проміжну мову, так і мову
об'єктний код. Це робить їх придатними як для зв’язування LTO, так і для звичайного зв’язування. Це
Опція ефективна лише при компіляції з -flto і ігнорується під час посилання.

-fno-fat-lto-objects покращує час компіляції порівняно зі звичайним LTO, але вимагає
повний набір інструментів, щоб знати про LTO. Для цього потрібен компоновщик з підтримкою плагіна компонувальника
для базової функціональності. Крім того, nm, ar і ranlib необхідно підтримувати компонувальник
плагіни, що дозволяють створювати повнофункціональне середовище збірки (здатне створювати статичні
бібліотеки тощо). GCC надає gcc-ar, gcc-nm, gcc-ranlib обгортки для передачі
правильні варіанти цих інструментів. З нежирним LTO make-файли потрібно змінити для використання
Ними.

За замовчуванням - -fno-fat-lto-objects на цілях з підтримкою плагіна компонувальника.

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

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

Увімкнено на рівнях -O, -O2, -O3, -Ос.

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

Увімкнено на рівнях -O, -O2, -O3, -Ос.

-fprofile-correction
Можуть бути профілі, зібрані за допомогою інструментального двійкового файлу для багатопоточних програм
непостійний через пропущені оновлення лічильника. Якщо вказано цю опцію, GCC використовує
евристики для виправлення або згладжування таких невідповідностей. За замовчуванням GCC видає an
повідомлення про помилку, коли виявлено невідповідний профіль.

-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=шлях
Увімкнути оптимізацію профілю, спрямовану на зворотний зв’язок, а також наступні оптимізації, які
як правило, прибуткові лише за наявності зворотнього зв’язку профілю: -fгілля-ймовірності,
-fvpt, -закрутки-петлі, -fpeel-loops, -ftracer, -ftree-vectorize, і Ftree-loop-
розподілити шаблони.

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

If шлях вказано, GCC дивиться на шлях щоб знайти файли даних зворотного зв’язку профілю.
Побачити -fprofile-dir.

-fauto-профіль
-fauto-profile=шлях
Увімкніть оптимізацію на основі зворотного зв’язку на основі вибірки та наступні оптимізації
які, як правило, приносять прибуток лише за наявності зворотнього зв’язку профілю:
-fгілля-ймовірності, -fvpt, -закрутки-петлі, -fpeel-loops, -ftracer,
-ftree-vectorize, -finline-функції, -fipa-cp, -fipa-cp-clone,
-fpredictive-commoning, -перемикачі-петлі, -fgcse-після перезавантаження, і
-ftree-loop-distribute-patterns.

шлях це ім'я файлу, що містить інформацію профілю AutoFDO. Якщо пропущено, це
за замовчуванням fbdata.afdo у поточному каталозі.

Для створення файлу даних профілю AutoFDO потрібно запустити вашу програму з файлом пер
утиліта на підтримуваній цільовій системі GNU/Linux. Додаткову інформацію див
<https://perf.wiki.kernel.org/>.

Напр

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- ваша_програма

Потім використовуйте create_gcov інструмент для перетворення вихідних даних профілю у формат, який може бути
використовується GCC. Ви також повинні надати нерозчісований двійковий файл для вашої програми для цього
інструмент. Побачитиhttps://github.com/google/autofdo>.

Напр

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo

Наступні параметри керують поведінкою компілятора щодо арифметики з плаваючою комою.
Ці параметри є компромісом між швидкістю та правильністю. Усе має бути спеціально увімкнено.

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

Ця опція запобігає небажаній надмірній точності на таких машинах, як 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.

-fprofile-reorder-functions
Переупорядкування функцій на основі інструментарію профілю збирає перший час виконання
функції та впорядковує ці функції в порядку зростання.

Увімкнено за допомогою -fprofile-use.

-fvpt
Якщо поєднується з -fprofile-arcs, ця опція вказує компілятору додати код
збирати інформацію про значення виразів.

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

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

Увімкнено за замовчуванням за допомогою -закрутки-петлі і -fpeel-loops.

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

Увімкнено на рівнях -O2, -O3, -Ос.

-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 може мати ці оптимізації.

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

-fbranch-target-load-optimize
Виконайте оптимізацію навантаження цільового регістра гілки перед прологом/епілогом.
Використання цільових регістрів зазвичай може бути відкрито лише під час перезавантаження, таким чином, підйому
завантаження з циклів і виконання міжблочного планування потребує окремої оптимізації
прохід.

-fbranch-target-load-optimize2
Виконайте оптимізацію навантаження цільового регістра гілки після прологу/епілогу.

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

-fstack-протектор
Випускайте додатковий код, щоб перевірити переповнення буфера, наприклад, атаки, що руйнують стек. Це
здійснюється шляхом додавання захисної змінної до функцій з уразливими об’єктами. Це
включає функції, які викликають "alloca", і функції з буферами більше 8 байт.
Захисники ініціалізуються, коли вводиться функція, а потім перевіряються, коли
виходить із функції. Якщо захисна перевірка не вдається, друкується повідомлення про помилку та програма
виходи.

-fstack-protector-all
Люблю -fstack-протектор за винятком того, що всі функції захищені.

-fstack-protector-strong
Люблю -fstack-протектор але включає додаткові функції для захисту --- ті
які мають визначення локальних масивів або мають посилання на локальні адреси кадрів.

-fstack-protector-explicit
Люблю -fstack-протектор але захищає лише ті функції, які мають
атрибут "stack_protect".

-fstdarg-opt
Оптимізуйте пролог функцій змінних аргументів щодо їх використання
аргументів.

ПРИМІТКА. В Ubuntu 14.10 і новіших версіях, -fstack-protector-strong увімкнено за допомогою
за замовчуванням для C, C++, ObjC, ObjC++, якщо жодного з -fno-стек-протектор, -nostdlib, ні
-автономний знайдені.

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

Наприклад, реалізація наступної функції "foo":

static int a, b, c;
int foo (void) { return a + b + c; }

зазвичай обчислює адреси всіх трьох змінних, але якщо ви компілюєте його з
-fsection-анкери, замість цього він отримує доступ до змінних із загальної точки прив’язки. The
ефект подібний до наступного псевдокоду (який не є дійсним C):

int foo (недійсний)
{
зареєструвати int *xr = &x;
return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Не всі цілі підтримують цю опцію.

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

Назви конкретних параметрів і значення значень прив'язані до
внутрішні елементи компілятора, і можуть бути змінені без попередження в майбутньому
Релізи

У кожному випадку значення є цілим числом. Допустимі варіанти для name є:

передбачуваний-відгалуження-результат
Коли передбачено, що гілка буде зайнята з імовірністю, нижчою за цей поріг
(у відсотках), то це вважається добре передбачуваним. За замовчуванням – 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.

inline-min-speedup
Коли очікуване покращення продуктивності часу виконання абонента + абонента перевищує це
threshold (у прецентах), функція може бути вбудована незалежно від обмеження на
--парам max-inline-insns-single і --парам max-inline-insns-auto.

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

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

великий підрозділ-insns
Обмеження, що визначає велику одиницю перекладу. Зростання, викликане вбудовуванням одиниць
більше цієї межі обмежено --парам inline-unit-growth. Для невеликих одиниць
це може бути занадто туго. Наприклад, розглянемо одиницю, що складається з функції А
який є вбудованим і B, який просто викликає A тричі. Якщо B мале відносно A,
зростання одиниці становить 300\% і все ж така підкладка дуже розумна. Для дуже великих
одиниці, що складаються з невеликих інлайнових функцій, однак загальний приріст одиниці
обмеження необхідне, щоб уникнути експоненційного вибуху розміру коду. Таким чином, для менших
одиниць, розмір збільшено до --парам великий підрозділ-insns перед застосуванням --парам
inline-unit-growth. За замовчуванням – 10000.

inline-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане вбудовуванням. The
Значення за замовчуванням — 20, що обмежує зростання одиниці в 1.2 рази від початкового розміру. Холодний
функції (або позначені як холодні за допомогою атрибута, або за допомогою зворотного зв'язку профілю) не є
враховується в розмірі одиниці.

ipcp-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане міжпроцедурними
постійне поширення. Значенням за замовчуванням є 10, що обмежує зростання одиниці до 1.1
разів більше початкового розміру.

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

big-stack-frame-growth
Визначає максимальне зростання кадрів великого стека, викликане вбудовуванням у відсотках.
Значенням за замовчуванням є 1000, що обмежує зростання кадру великого стека в 11 разів
оригінальний розмір.

max-inline-insns-рекурсивний
max-inline-insns-recursive-auto
Вказує максимальну кількість інструкцій для позалінійної копії само-
рекурсивна вбудована функція може перерости в рекурсивне вбудовування.

--парам max-inline-insns-рекурсивний застосовується до функцій, оголошених inline. Для
функції, не оголошені вбудованими, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -O3) увімкнено; --парам max-inline-insns-
рекурсивно-автоматично замість цього застосовується. Значення за замовчуванням — 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Вказує максимальну глибину рекурсії, яка використовується для рекурсивного вбудовування.

--парам max-inline-recursive-depth застосовується до функцій, оголошених inline. Для
функції, не оголошені вбудованими, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -O3) увімкнено; --парам max-inline-recursive-
глибина-авто замість цього застосовується. Значення за замовчуванням — 8.

min-inline-recursive-probability
Рекурсивне вбудовування вигідно лише для функції з глибокою рекурсією
середній і може зашкодити функції з невеликою глибиною рекурсії за рахунок збільшення
передайте розмір або складність тіла функції іншим оптимізаторам.

Коли доступний зворотній зв’язок профілю (див -fprofile-generate) фактична рекурсія
глибину можна вгадати з ймовірності того, що функція рекурсує через даний виклик
вираз. Цей параметр обмежує вбудовування лише викликом виразів, чий
ймовірність перевищує заданий поріг (у відсотках). Значення за замовчуванням – 10.

ранній інлайнінг-insns
Укажіть зростання, яке може досягти ранній інлайнер. Фактично це збільшує кількість
вбудовування для коду, що має великий штраф абстракції. Значення за замовчуванням – 14.

max-early-inliner-iterations
Межа ітерацій раннього інлайнера. Це в основному обмежує кількість
вкладені непрямі виклики, які може розв’язувати ранній інлайнер. Ще глибші ланцюги
обробляється пізнім вкладенням.

comdat-sharing-probability
Імовірність (у відсотках), що вбудована функція C++ з видимістю comdat є
спільне для кількох компіляційних одиниць. Значення за замовчуванням – 20.

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

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-peel-гілки
Максимальна кількість гілок на гарячому шляху через очищену послідовність.

max-fully-oled-insns
Максимальна кількість insns повністю відклеєної петлі.

максимальний час повного очищення
Максимальна кількість ітерацій циклу, яка підходить для повного пілінгу.

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

max-unswitch-insns
Максимальна кількість insns неперемкненого циклу.

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

lim-дорого
Мінімальна вартість дорогого виразу в циклі інваріантного руху.

iv-розглянути-всі-кандидати-пов'язані
Зв’язана з кількістю кандидатів на індукційні змінні, нижче якої всі кандидати
розглядаються для кожного використання в оптимізації індукційної змінної. Якщо є
більше кандидатів, ніж це, лише найрелевантніші вважаються уникними
квадратична часова складність.

iv-max-considered-use
Оптимізація змінної індукції відмовляється від циклів, які містять більше індукції
змінне використання.

iv-always-prune-can-set-bound
Якщо кількість кандидатів у наборі менше цього значення, завжди намагайтеся
видалити непотрібні ivs з набору при додаванні нового.

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

vect-max-version-for-alias-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
керування версіями для псевдоніма у векторізаторі.

vect-max-peeling-for-alignment
Максимальна кількість відколів циклу для покращення вирівнювання доступу для векторизатора. Значення
-1 означає «без обмежень».

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

hot-bb-count-ws-permille
Основний підрахунок профілю блоку вважається гарячим, якщо він сприяє заданому
пропуск (тобто 0...1000) всього профільованого виконання.

hot-bb-frequency-fraction
Виберіть частку частоти виконання базового блоку введення
Функція даного базового блоку повинна вважатися гарячою.

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

вбудована очікувана ймовірність
Контролювати ймовірність виразу, що має вказане значення. Це
параметр приймає у відсотках (тобто 0 ... 100) як вхідні дані. Імовірність за замовчуванням
90 отримано емпірично.

align-threshold
Виберіть частку максимальної частоти виконання базового блоку в a
функція для вирівнювання основного блоку.

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 (
за замовчуванням) вимикає розширення регіону.

max-sched-insn-conflict-delay
Максимальна затримка конфлікту для insn, яка розглядається для спекулятивного руху.
Значення за замовчуванням - 3.

sched-spec-prob-cutoff
Мінімальна ймовірність успіху спекуляцій (у відсотках), тому спекулятивна
insns заплановано. Значення за замовчуванням — 40.

sched-spec-state-edge-prob-cutoff
Мінімальна ймовірність, яку має мати грань, щоб планувальник зберегти свій стан
через нього. Значення за замовчуванням – 10.

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.

max-combine-insns
Максимальна кількість інструкцій, яку RTL-комбінатор намагається об’єднати. За замовчуванням
значення 2 ат -Ог і 4 інакше.

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

ssp-буфер-розмір
Мінімальний розмір буферів (тобто масивів), які отримують захист від руйнування стека
коли -fstack-захист використовується.

За замовчуванням до Ubuntu 10.10 було "8". Зараз це "4", щоб збільшити
кількість функцій, захищених захистом стека.

мінімальний розмір для спільного використання стека
Мінімальний розмір змінних, які беруть участь у спільному використанні слотів стека, якщо ні
оптимізація. Значення за замовчуванням — 32.

max-jump-thread-duplication-stmts
Максимальна кількість операторів, дозволених у блоці, яку потрібно продублювати, коли
стрибки нарізки.

max-fields-for-field-sensitive
Максимальна кількість полів у структурі, що обробляється чутливим до поля способом
аналіз покажчиків. За замовчуванням дорівнює нулю для -O0 і -O1, і 100 для -Ос, -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.

sccvn-max-alias-queries-per-access
Максимальна кількість запитів псевдоніма-оракула, які ми виконуємо під час пошуку надмірностей
для вантажів і магазинів. Якщо це обмеження досягнуто, пошук припиняється, а завантаження або
магазин не вважається зайвим. Кількість запитів визначається алгоритмічно
обмежена кількістю сховищ на всіх шляхах від завантаження до запису функції.
За замовчуванням максимальна кількість запитів становить 1000.

ira-max-loops-num
IRA за замовчуванням використовує розподіл регіональних реєстрів. Якщо функція містить більше
циклів, ніж число, задане цим параметром, лише не більше заданої кількості
найбільш часто виконувані цикли утворюють регіони для розміщення регіональних реєстрів.
Значення параметра за замовчуванням — 100.

ira-max-conflict-table-size
Хоча IRA використовує складний алгоритм для стиснення таблиці конфліктів,
таблиця все ще може вимагати надмірного обсягу пам'яті для величезних функцій. Якщо
Таблиця конфліктів для функції може бути більше розміру в МБ, зазначеного цим
параметр, розподільник регістрів замість цього використовує швидший, простіший і менший
якісний алгоритм, який не вимагає побудови таблиці конфліктів псевдореєстрів.
Значення параметра за замовчуванням — 2000.

ira-loop-reserved-regs
IRA можна використовувати для оцінки більш точного тиску регістра в циклах прийняття рішень
для переміщення інваріантів циклу (див -O3). Зарезервована кількість доступних реєстрів
деякі інші цілі дає цей параметр. Значення за замовчуванням
Параметр дорівнює 2, що є мінімальною кількістю регістрів, необхідних типовому
інструкції. Це значення є найкращим, знайденим у численних експериментах.

lra-спадкування-відливи-імовірність-відсічення
LRA намагається повторно використовувати значення, перезавантажені в регістрах в наступних insns. Це
оптимізація називається успадкуванням. Для цього в якості регіону використовується EBB
оптимізація. Параметр визначає мінімальну ймовірність провалу краю в
відсоток, що використовується для додавання BB до успадкування EBB в LRA. Значення за замовчуванням
параметр 40. Значення було вибрано з численних запусків SPEC2000 на x86-64.

loop-invariant-max-bbs-in-loop
Інваріантний рух циклу може бути дуже дорогим як під час компіляції, так і в
обсяг необхідної пам'яті під час компіляції, з дуже великими циклами. Петлі з більше
базові блоки, ніж цей параметр, не матимуть циклічної інваріантної оптимізації руху
виконано на них. Значення параметра за замовчуванням становить 1000 for -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-фактор росту разів
розмір вихідного параметра покажчика.

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
Два проходи скалярного скорочення агрегатів (SRA та IPA-SRA) мають на меті замінити
скалярні частини агрегатів із використанням незалежних скалярних змінних. Ці
параметри контролюють максимальний розмір сукупності в одиницях зберігання
розглядається для заміни при компіляції для швидкості (sra-max-scalarization-size-
Ospeed) або розмір (sra-max-scalarization-size-Osize) відповідно.

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 ітерація.

loop-unroll-jam-size
Вкажіть коефіцієнт розгортання для -floop-unroll-and-jam варіант. Значення за замовчуванням
є 4.

loop-unroll-jam-depth
Укажіть розмір, який потрібно розгорнути (відраховуючи від самого внутрішнього циклу) для
-floop-unroll-and-jam. Значення за замовчуванням – 2.

ipa-cp-value-list-size
IPA-CP намагається відстежити всі можливі значення та типи, передані функції
параметр, щоб поширити їх і виконати девіртуалізацію. ipa-cp-value-
розмір списку – максимальна кількість значень і типів, які він зберігає на один формаль
параметр функції.

ipa-cp-eval-threshold
IPA-CP обчислює власну оцінку евристики прибутковості клонування та виконує
ці можливості клонування з результатами, які перевищують ipa-cp-eval-threshold.

ipa-cp-recursion-penalty
Відсоток штрафу, який отримають рекурсивні функції, коли вони будуть оцінені
для клонування.

ipa-cp-single-call-penalty
Функції відсоткового штрафу, що містять один виклик до іншої функції
отримувати, коли їх оцінюють для клонування.

ipa-max-agg-items
IPA-CP також здатний поширювати ряд скалярних значень, переданих в файлі
сукупність. ipa-max-agg-items контролює максимальну кількість таких значень на одне
параметр.

ipa-cp-loop-hint-bonus
Коли IPA-CP визначає, що кандидат на клонування створить кількість
ітерації циклу відомі, це додає бонус ipa-cp-loop-hint-bonus до
бал рентабельності кандидата.

ipa-cp-array-index-hint-bonus
Коли IPA-CP визначає, що кандидат на клонування створить індекс масиву
доступ відомий, це додає бонус ipa-cp-array-index-hint-bonus до
бал рентабельності кандидата.

ipa-max-aa-steps
Під час аналізу функціональних органів IPA-CP використовує аналіз псевдонімів, щоб
відстежувати значення, на які вказують параметри функції. Щоб не витрачати багато часу
аналізуючи величезні функції, він здається і вважає всю пам'ять забитою
вивчення ipa-max-aa-steps висловлювання, що змінюють пам'ять.

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. Цей параметр увімкнено за замовчуванням на рівні оптимізації -Швидко.

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

tree-reassoc-width
Встановіть максимальну кількість інструкцій, що виконуються паралельно в повторно асоційованому дереві.
Цей параметр перевизначає залежну від цільової евристики, яка використовується за замовчуванням, якщо не має
нульове значення.

sched-pressure-algorithm
Виберіть між двома доступними реалізаціями -fsched-тиск. Алгоритм 1
є оригінальною реалізацією і, швидше за все, запобігти вказівкам
переупорядковується. Алгоритм 2 був розроблений як компроміс між
відносно консервативний підхід за алгоритмом 1 і досить агресивний
підхід, використаний планувальником за замовчуванням. Він більшою мірою покладається на наявність a
звичайний реєстровий файл і точні класи тиску в регістрі. Побачити haifa-sched.c
у джерелах GCC для більш детальної інформації.

Вибір за замовчуванням залежить від цілі.

max-slsr-can-scan
Встановіть максимальну кількість наявних кандидатів, які розглядаються під час пошуку a
основою для нового кандидата прямолінійного зниження сили.

асан-глобали
Увімкнути виявлення переповнення буфера для глобальних об’єктів. Цей вид захисту є
увімкнено за замовчуванням, якщо ви використовуєте -fsanitize=адреса варіант. Щоб вимкнути глобальний
використання охорони об'єктів --парам asan-globals=0.

асан-стек
Увімкнути виявлення переповнення буфера для об’єктів стека. Цей вид захисту є
увімкнено за замовчуванням під час використання-fsanitize=адреса. Щоб вимкнути захист стека, використовуйте
--парам asan-stack=0 варіант.

асан-інструмент-читання
Увімкнути виявлення переповнення буфера для читання пам’яті. Цей вид захисту є
увімкнено за замовчуванням під час використання -fsanitize=адреса. Щоб вимкнути читання з пам’яті
використання захисту --парам asan-instrument-reads=0.

асан-інструмент-пише
Увімкнути виявлення переповнення буфера для запису в пам’ять. Цей вид захисту є
увімкнено за замовчуванням під час використання -fsanitize=адреса. Щоб вимкнути запис в пам'ять
використання захисту --парам asan-instrument-writes=0 варіант.

асан-мемінтрін
Увімкнути виявлення для вбудованих функцій. Цей вид захисту забезпечується за допомогою
за замовчуванням при використанні -fsanitize=адреса. Щоб вимкнути захист вбудованих функцій
використання --парам асан-мемінтрин=0.

asan-use-after-return
Увімкнути виявлення використання після повернення. Цей вид захисту забезпечується за допомогою
за замовчуванням при використанні -fsanitize=адреса варіант. Щоб вимкнути використання після повернення
використання виявлення --парам asan-use-after-return=0.

asan-instrumentation-with-call-threshold
Якщо кількість звернень до пам’яті у функції, що інструментується, більше або дорівнює
цей номер, використовуйте зворотні виклики замість вбудованих перевірок. Наприклад, щоб вимкнути вбудований код
використання --парам asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
Статичні конструктори, створені за допомогою Pointer Bounds Checker, можуть стати дуже великими і
значно збільшити час компіляції на рівні оптимізації -O1 і вище. Це
Параметр – це максимальна кількість операторів в одному створеному конструкторі.
Значення за замовчуванням – 5000.

max-fsm-thread-path-insns
Максимальна кількість інструкцій для копіювання при дублюванні блоків у кінцевому стані
Шлях потоку автоматичного переходу. За замовчуванням – 100.

max-fsm-thread-length
Максимальна кількість базових блоків на шляху потоку переходу кінцевого автомата. The
за замовчуванням - 10.

max-fsm-thread-paths
Максимальна кількість нових шляхів потоку переходу для створення кінцевого автомата.
За замовчуванням 50.

опції Управління la Препроцесор
Ці параметри керують препроцесором C, який запускається на кожному вихідному файлі C перед фактичним
складання.

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

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

-Xpreprocessor варіант
Проходити варіант як опція для препроцесора. Ви можете використовувати це для забезпечення системи-
конкретні параметри препроцесора, які GCC не розпізнає.

Якщо ви хочете передати параметр, який приймає аргумент, ви повинні використовувати -Xpreprocessor
двічі, один раз для варіанту і один раз для аргументу.

-no-integrated-cpp
Виконайте попередню обробку як окремий прохід перед компіляцією. За замовчуванням виконується GCC
попередня обробка як невід'ємна частина токенізації та синтаксичного аналізу вхідних даних. Якщо цей варіант
надається відповідна мовна передня частина (Cc1, cc1plusабо cc1obj для C, C++,
і Objective-C, відповідно) замість цього викликається двічі, один раз лише для попередньої обробки
і один раз для фактичної компіляції попередньо обробленого введення. Ця опція може бути корисною
в поєднанні з -B or -обгортка параметри для визначення альтернативного препроцесора або
виконати додаткову обробку джерела програми між звичайною попередньою обробкою і
складання.

-D name
Попередньо визначити name як макрос, з визначенням 1.

-D name=визначення
Вміст визначення маркуються та обробляються так, ніби вони з’явилися під час
третій етап перекладу в а #визначити директива. Зокрема, визначення буде
скорочено за допомогою вбудованих символів нового рядка.

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

Якщо ви хочете визначити функціональний макрос у командному рядку, напишіть його аргумент
список з оточуючими дужками перед знаком рівності (якщо є). Дужки є
значуще для більшості оболонок, тому вам потрібно буде процитувати параметр. З sh і CSH,
-D'name(аргументи...)=визначення' працює.

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

-U name
Скасуйте будь-яке попереднє визначення name, вбудований або забезпечений 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-ідентифікатори
Приймайте універсальні імена символів в ідентифікаторах. Цей параметр увімкнено за замовчуванням
для C99 (і пізніших стандартних версій C) і C++.

-fno-canonical-system-headers
Під час попередньої обробки не скорочуйте шляхи системних заголовків за допомогою канонікалізації.

-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.

Зверніть увагу, що «-ftrack-macro-expansion=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 Якщо використовується будь-який з цих параметрів, то компонувальник не запускається, а імена об’єктних файлів
не слід використовувати як аргументи.

-fuse-ld=bfd
Використовувати bfd компонувальник замість стандартного компонувальника.

-запобіжник-ld=золото
Використовувати золото компонувальник замість стандартного компонувальника.

-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 -нові за замовчуванням використовується.

-нові за замовчуванням
Не використовуйте стандартні системні бібліотеки під час підключення. Лише вказані вами бібліотеки
передаються компоновщику, а параметри, що вказують зв'язок системних бібліотек, наприклад
as -static-libgcc or -shared-libgcc, ігноруються. Використовуються стандартні файли запуску
звичайно, якщо -nostartfiles використовується.

Компілятор може генерувати виклики "memcmp", "memset", "memcpy" і "memmove". Ці
записи зазвичай вирішуються записами в libc. Ці точки входу повинні бути
надається через якийсь інший механізм, якщо вказано цей параметр.

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

Компілятор може генерувати виклики "memcmp", "memset", "memcpy" і "memmove". Ці
записи зазвичай вирішуються записами в libc. Ці точки входу повинні бути
надається через якийсь інший механізм, якщо вказано цей параметр.

Одна зі стандартних бібліотек, яку ми обійшли -nostdlib і -нові за замовчуванням is libgcc.a, то
бібліотека внутрішніх підпрограм, які GCC використовує для подолання недоліків окремих
машини або спеціальні потреби для деяких мов.

У більшості випадків потрібно libgcc.a навіть якщо ви хочете уникнути інших стандартних бібліотек.
Іншими словами, коли ви вказуєте -nostdlib or -нові за замовчуванням ви повинні зазвичай
вкажіть -lgcc також. Це гарантує, що у вас немає невирішених посилань на
внутрішні підпрограми бібліотеки GCC. (Прикладом такої внутрішньої підпрограми є
"__main", що використовується для забезпечення виклику конструкторів 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 by
за замовчуванням. Це дозволяє виняткам поширюватися через такі спільні бібліотеки без
витрати на переміщення під час завантаження бібліотеки.

Однак, якщо бібліотека або основний виконуваний файл повинні викидати або перехоплювати винятки, ви
має зв’язати його за допомогою драйвера G++ або GCJ, відповідно до мов, що використовуються в
програмі або за допомогою параметра -shared-libgcc, щоб він був пов’язаний із спільним
libgcc.

-статичний-лібазан
Коли -fsanitize=адреса Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти libasan. Якщо libasan доступна як спільна бібліотека, і
la -статичний параметр не використовується, то це посилання на спільну версію libasan.
повне г, повне г,, показали, від, номер, XNUMX -статичний-лібазан параметр спрямовує драйвер GCC на посилання libasan статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-статичний-лібцан
Коли -fsanitize=thread Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти libtsan. Якщо libtsan доступна як спільна бібліотека, і
la -статичний параметр не використовується, то це посилання на спільну версію libtsan.
повне г, повне г,, показали, від, номер, XNUMX -статичний-лібцан параметр спрямовує драйвер GCC на посилання libtsan статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-static-liblsan
Коли -fsanitize=витік Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти liblsan. Якщо liblsan доступна як спільна бібліотека, і
la -статичний параметр не використовується, то це посилання на спільну версію liblsan.
повне г, повне г,, показали, від, номер, XNUMX -static-liblsan параметр спрямовує драйвер GCC на посилання liblsan статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-статичний-лібубсан
Коли -fsanitize=не визначено Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібубсан. Якщо лібубсан доступна як спільна бібліотека,
і -статичний параметр не використовується, то це посилання на спільну версію
лібубсан, -статичний-лібубсан параметр спрямовує драйвер GCC на посилання лібубсан
статично, без обов'язкового статичного зв'язування інших бібліотек.

-static-libmpx
Коли -fcheck-pointer межі і -mmpx параметри використовуються для зв'язування програми, GCC
драйвер автоматично встановлює посилання на libmpx. Якщо libmpx доступний як спільний
бібліотека та -статичний параметр не використовується, то це посилання проти спільних
версія libmpx, -static-libmpx параметр спрямовує драйвер GCC на посилання libmpx
статично, без обов'язкового статичного зв'язування інших бібліотек.

-static-libmpxwrappers
Коли -fcheck-pointer межі і -mmpx параметри використовуються для зв’язування програми без
також використовуючи -fno-chkp-use-wrappers, драйвер GCC автоматично встановлює посилання
libmpxwrappers. Якщо libmpxwrappers доступна як спільна бібліотека, а також -статичний
параметр не використовується, то це посилання на спільну версію libmpxwrappers,
-static-libmpxwrappers параметр спрямовує драйвер GCC на посилання libmpxwrappers
статично, без обов'язкового статичного зв'язування інших бібліотек.

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

-z ключове слово
-z передається безпосередньо компонувальнику разом з ключовим словом ключове слово. Дивіться розділ
в документації вашого компонувальника для дозволених значень та їх значень.

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

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

Якщо стандартна система включає в себе каталог, або каталог, зазначений з -ісистема, Є
також зазначено с -I, то -I варіант ігнорується. У каталозі все ще шукають, але
як системний каталог на його нормальному положенні в системі включає ланцюжок. Це до
переконайтеся, що процедура GCC виправляє помилкові системні заголовки та порядок для
Директива "include_next" не змінюється випадково. Якщо вам дійсно потрібно змінитися
порядок пошуку системних каталогів, використовуйте -nostdinc та / або -ісистема Варіанти.

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

- цитатареж
Додайте каталог реж до заголовка списку каталогів для пошуку
файли лише для випадку "#include"файл""; їх не шукають за "#include
<файл>", інакше як -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 все ще працює, але бібліотечний аспект ні.

--no-sysroot-suffix
Для деяких цілей суфікс додається до кореневого каталогу, зазначеного з --sysroot,
залежно від інших використаних параметрів, щоб, наприклад, можна було знайти заголовки в
dir/suffix/usr/include замість dir/usr/include. Ця опція вимикає додавання
такого суфікса.

-Я- Цей параметр не підтримується. Будь ласка, використовуйте - цитата замість цього для -I каталогів раніше
la -Я- і видаліть -Я- варіант. Будь-які каталоги, які ви вказали з -I варіанти раніше
la -Я- параметр шукається лише для регістру "#include"файл""; вони не
шукав "#includeфайл>".

Якщо додаткові каталоги вказані з -I варіанти після -Я- варіант, ці
у каталогах здійснюється пошук усіх директив "#include". (Звичайно всі -I
каталоги використовуються таким чином.)

Крім того, -Я- Параметр забороняє використання поточного каталогу (де
поточний вхідний файл) як перший каталог пошуку для "#include"файл"".
Немає способу подолати цей ефект -Я-. З -Я. можна вказати пошук
каталог, який є поточним під час виклику компілятора. Це не зовсім те
те саме, що робить препроцесор за замовчуванням, але часто це задовільний.

-Я- не перешкоджає використанню стандартних системних каталогів для заголовних файлів.
Таким чином, -Я- і -nostdinc є незалежними.

Уточнення Мета машина і компілятор версія
Звичайним способом запуску GCC є запуск виконуваного файлу, який викликається ПКУабо машина-gcc коли хрест-
складання, або машина-gcc-версія щоб запустити версію, відмінну від тієї, що була встановлена
останній.

апаратні засоби моделі і Конфігурації
Кожен тип цільової машини може мати власні спеціальні параметри, починаючи з -m, вибирати
серед різних апаратних моделей або конфігурацій --- наприклад, 68010 проти 68020, плаваючий
співпроцесор або немає. Одну встановлену версію компілятора можна компілювати для будь-якої моделі
або конфігурації, відповідно до вказаних параметрів.

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

AAArch64 опції

Ці параметри визначені для реалізацій AArch64:

-mabi=name
Згенеруйте код для вказаної моделі даних. Допустимі значення є ilp32 для SysV-
як модель даних, де int, long int і покажчик є 32-бітовими, і lp64 для SysV-подібних
модель даних, де int є 32-розрядними, а long int і покажчиком є ​​64-бітними.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що LP64 і
ILP32 ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з тим же
ABI та зв’язати з сумісним набором бібліотек.

-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
змінні.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Увімкніть або вимкніть обхідний шлях для помилки ARM Cortex-A53 під номером 835769. Це
передбачає вставку інструкції NOP між інструкціями пам’яті та 64-розрядним цілим числом
інструкції множення-накопичувачі.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Увімкніть або вимкніть обхідний шлях для помилки ARM Cortex-A53 під номером 843419. Це
Обхідний шлях помилки виконується під час посилання, і це передасть лише відповідний прапор
до лінкера.

-березень=name
Вкажіть назву цільової архітектури, необов’язково з одним або кількома суфіксами
модифікатори функцій. Цей варіант має форму -березень=арка{+[немає]особливість}*, де
тільки допустиме значення для арка is armv8-a. Допустимі значення для особливість він має
задокументовані в підрозділі нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки.

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

-mtune=name
Вкажіть назву цільового процесора, для якого GCC має налаштувати продуктивність
код. Допустимі значення для цієї опції: родової, кора-a53, кора-a57,
кора-a72, exynos-m1, thunderx, xgene1.

Крім того, цей параметр може вказати, що GCC має налаштувати продуктивність коду
для системи big.LITTLE. Допустимі значення для цієї опції:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

Де жодного з -mtune=, -mcpu= or -березень= вказано, код налаштований на виконання
добре в діапазоні цільових процесорів.

Цей параметр не може бути суфіксом модифікаторів функцій.

-mcpu=name
Вкажіть назву цільового процесора, за бажанням із суфіксом однієї чи кількох функцій
модифікатори. Цей варіант має форму -mcpu=центральний процесор{+[немає]особливість}*, де допустимо
значення для центральний процесор ті самі, що доступні для -mtune.

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

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код ассемблера (наче від - марш) і визначити цільовий процесор, для якого потрібно
налаштувати на виконання (наче за -mtune). Де цей параметр використовується разом із
- марш or -mtune, ці параметри мають пріоритет над відповідною частиною цього
варіант.

- марш і -mcpu Модифікатори функцій

Модифікатори функцій, які використовуються з - марш і -mcpu може бути одним із таких:

crc Увімкнути розширення CRC.

крипто
Увімкнути розширення Crypto. Це означає, що розширений SIMD увімкнено.

fp Увімкнути інструкції з плаваючою комою.

simd
Увімкніть розширені інструкції SIMD. Це означає, що інструкції з плаваючою комою є
увімкнено. Це значення за замовчуванням для всіх поточних можливих значень параметрів - марш і
-mcpu=.

Адаптєва Богоявлення опції

Ці -m визначені параметри для Adapteva Epiphany:

-mhalf-reg-file
Не виділяйте жодного регістра в діапазоні "r32"...r63". Це дозволяє виконувати код
апаратні варіанти, у яких відсутні ці регістри.

-mprefer-short-insn-regs
Переважно виділяють регістри, які дозволяють генерувати короткі команди. Це може
призведе до збільшення кількості інструкцій, тому це може або зменшити, або збільшити загальне
розмір коду.

-mbranch-cost=Num
Приблизно встановіть вартість гілок Num «прості» інструкції. Ця вартість становить лише а
евристичний і не гарантує отримання послідовних результатів у всіх випусках.

-mcmove
Увімкнути генерацію умовних ходів.

-mnops=Num
випускати Num NOP перед кожною іншою згенерованою інструкцією.

-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", тому використовуйте ці інструкції для прямих викликів. The
за замовчуванням -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, що робить завантаження невеликим негативним
константи та певні бітові маски швидше. Допустимі значення для Реджо він має r43 і r63,
які визначають використання цього регістру як фіксованого регістра, і ніхто, що означає, що ні
для цього використовується реєстр. За замовчуванням є -m1reg-немає.

ARC опції

Наступні параметри керують варіантом архітектури, для якого компілюється код:

-mbarrel-shifter
Створення інструкцій, які підтримується перемикачом бочки. Це значення за замовчуванням, якщо
-mcpu=ARC601 діє.

-mcpu=центральний процесор
Встановіть тип архітектури, використання реєстрів і параметри планування інструкцій для центральний процесор.
Також доступні варіанти псевдонімів ярликів для зворотної сумісності та
зручність. Підтримувані значення для центральний процесор він має

ARC600
Компіляція для ARC600. Псевдоніми: -mA6, -mARC600.

ARC601
Компіляція для ARC601. Псевдонім: -mARC601.

ARC700
Компіляція для ARC700. Псевдоніми: -mA7, -mARC700. Це значення за замовчуванням під час налаштування
з --with-cpu=arc700.

-mdpfp
-mdpfp-compact
FPX: генеруйте інструкції FPX подвійної точності, налаштовані для компактної реалізації.

-mdpfp-швидкий
FPX: генеруйте інструкції FPX подвійної точності, налаштовані для швидкої реалізації.

-mno-dpfp-lrsr
Вимкніть інструкції LR та SR від використання допоміжних регістрів розширення FPX.

-mea
Створення розширених арифметичних інструкцій. Наразі лише "divaw", "adds", "sub",
і "sat16" підтримуються. Це завжди ввімкнено для -mcpu=ARC700.

-мно-мпи
Не генеруйте інструкції mpy для ARC700.

- mmul32x16
Згенеруйте 32x16-розрядні інструкції для множення та mac.

-mmul64
Згенеруйте інструкції mul64 і mulu64. Діє лише для -mcpu=ARC600.

-мнорм
Сформувати інструкцію норми. Це значення за замовчуванням, якщо -mcpu=ARC700 діє.

-mspfp
-mspfp-compact
FPX: генеруйте інструкції FPX Single Precision, налаштовані для компактної реалізації.

-mspfp-швидкий
FPX: генеруйте інструкції FPX Single Precision, налаштовані для швидкої реалізації.

-msimd
Увімкнути генерацію інструкцій ARC SIMD за допомогою вбудованих програм, що стосуються цілі. Тільки дійсний
та цінності -mcpu=ARC700.

-msoft-float
Цей параметр ігнорується; він надається лише з метою сумісності. програмне забезпечення
Код з плаваючою комою видається за замовчуванням, і це за замовчуванням може замінити FPX
варіанти; mspfp, mspfp-compactабо mspfp-швидкий для одиничної точності, і mdpfp, mdpfp-
компактнийабо mdpfp-швидкий для подвійної точності.

-mswap
Створення інструкцій підкачки.

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

-mdsp-packa
Передано асемблеру, щоб увімкнути розширення DSP Pack A. Також встановлює
символ препроцесора "__Xdsp_packa".

-mdvbf
Передано асемблеру, щоб увімкнути подвійне розширення viterbi butterfly. Також
встановлює символ препроцесора "__Xdvbf".

-mlock
Передано асемблеру, щоб увімкнути розширення Locked Load/Store Conditional.
Також встановлює символ препроцесора "__Xlock".

-mmac-d16
Передано асемблеру. Також встановлює символ препроцесора "__Xxmac_d16".

-mmac-24
Передано асемблеру. Також встановлює символ препроцесора "__Xxmac_24".

-mrtsc
Передано асемблеру, щоб увімкнути 64-розрядне розширення Time-Stamp Counter
інструкція. Також встановлює символ препроцесора "__Xrtsc".

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

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

-mxy
Передано асемблеру, щоб увімкнути розширення XY Memory. Також встановлює
символ препроцесора "__Xxy".

Наступні параметри визначають, як анотується код збірки:

- неправильний розмір
Анотуйте інструкції асемблера з приблизними адресами.

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

До компонувальника передаються такі параметри:

- marclinux
Передано до компонувальника, щоб указати використання емуляції "arclinux". Цей варіант
увімкнено за замовчуванням у ланцюгах інструментів, створених для «arc-linux-uclibc» і
"arceb-linux-uclibc" цілі, коли профілювання не запитується.

-marclinux_prof
Передано до компоновщика, щоб указати використання емуляції "arclinux_prof". Це
Параметр увімкнено за замовчуванням у ланцюжках інструментів, створених для «arc-linux-uclibc» і
"arceb-linux-uclibc" цілі, коли запитується профілювання.

Наступні параметри контролюють семантику згенерованого коду:

-mepilogue-cfi
Увімкнути генерацію інформації про кадри виклику для епілогів.

-mno-епілог-cfi
Вимкнути створення інформації про кадри виклику для епілогів.

-mlong-дзвінки
Генеруйте виклики insns як реєструйте непрямі виклики, забезпечуючи таким чином повний доступ
32-бітовий діапазон адрес.

-mmedium-дзвінки
Не використовуйте для викликів діапазон адресації менше ніж 25 біт, який є доступним зміщенням
для безумовної інструкції розгалуження та зв’язку. Умовне виконання функції
виклики пригнічуються, щоб дозволити використання 25-бітового діапазону, а не 21-бітового діапазону
з умовним розгалуженням і зв’язком. Це значення за замовчуванням для ланцюжків інструментів, створених для
цілі "arc-linux-uclibc" і "arceb-linux-uclibc".

-mno-sdata
Не генеруйте посилання на sdata. Це значення за замовчуванням для ланцюжків інструментів, створених для
цілі "arc-linux-uclibc" і "arceb-linux-uclibc".

-mucb-mcount
Інструмент з mcount викликів, як використовується в коді UCB. Тобто виконайте підрахунок у викликаному,
не абонента. За замовчуванням інструменти ARC підраховують у абоненті.

-mvolatile-cache
Використовуйте звичайні доступи до кешованої пам’яті для непостійних посилань. Це значення за замовчуванням.

-mno-volatile-cache
Увімкнути обхід кешу для мінливих посилань.

Наступні параметри точного налаштування генерації коду:

-злоякісний виклик
Виконайте оптимізацію вирівнювання інструкцій щодо виклику.

-mauto-modify-reg
Увімкнути використання попереднього/постового модифікації із зміщенням регістра.

-mbbit-глазок
Увімкнути bbit peephole2.

-mno-brcc
Цей параметр вимикає вхід для конкретної цілі arc_reorg генерувати "BRcc"
інструкції. Це не впливає на генерацію "BRcc", що керується проходом комбінатора.

-mcase-vector-pcrel
Використовуйте таблиці випадків перемикачів, що залежать від ПК - це дозволяє скорочувати таблицю випадків. Це
за замовчуванням для -Ос.

-mcompact-casesi
Увімкнути шаблон компактних футлярів. Це значення за замовчуванням для -Ос.

-mno-cond-exec
Вимкніть спеціальний пропуск ARCompact для створення умовних інструкцій виконання. За рахунок
для затримки планування слотів і взаємодії між номерами операндів, розмірами літералів,
довжини інструкцій та підтримки умовного виконання, незалежне від цілі
пропуск для генерування умовного виконання часто відсутній, тому порт ARC зберіг a
спеціальний прохід, який намагається знайти більше умовного виконання
можливості після розподілу регістрів, скорочення гілок і планування слотів затримки
було зроблено. Цей перехід зазвичай, але не завжди, покращує продуктивність і код
розмір, за рахунок додаткового часу компіляції, тому є можливість перемикання
це вимкнути. Якщо у вас виникли проблеми з інструкціями виклику, які перевищують допустимий зсув
діапазон, оскільки вони умовні, вам слід розглянути можливість використання -mmedium-дзвінки
замість цього.

- борошнистий-cbranchsi
Увімкнути використання шаблону cbranchsi перед перезавантаженням.

-mexpand-adddi
Розгорніть «adddi3» та «subdi3» під час генерації rtl на «add.f», «adc» тощо.

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

-mlra
Увімкнути розподіл локального реєстру. Це все ще експериментальне для ARC, тому за замовчуванням
компілятор використовує стандартне перезавантаження (тобто -мно-лра).

-mlra-priority-none
Не вказуйте жодного пріоритету для цільових реєстрів.

-mlra-priority-compact
Вкажіть пріоритет цільового регістра для r0..r3 / r12..r15.

-mlra-пріоритет-некомпактний
Зменшити пріоритет цільового реєстратора для r0..r3 / r12..r15.

-mno-millicode
Під час оптимізації за розміром (використовуючи -Ос), прологи та епілоги, які мають зберегти або
відновлення великої кількості регістрів часто скорочується за допомогою виклику спец
функція в libgcc; це називають а мілікод дзвонити. Як можуть позувати ці дзвінки
проблеми з продуктивністю та/або викликають проблеми з підключенням під час зв’язування нестандартним способом,
ця опція надається, щоб вимкнути генерацію виклику мілікоду.

-mmixed-code
Налаштуйте розподіл регістрів, щоб допомогти генерувати 16-розрядні інструкції. Це взагалі має
ефект зменшення середнього розміру команди при збільшенні команди
рахувати.

-mq-клас
Увімкнути альтернативні інструкції 'q'. Це значення за замовчуванням для -Ос.

-mRcq
Увімкнути обробку обмежень Rcq - більшість генерації короткого коду залежить від цього. Це
за замовчуванням.

-mRcw
Увімкнути обробку обмежень Rcw - ccfsm condexec переважно залежить від цього. Це
за замовчуванням.

-msize-level=рівень
Точна оптимізація розміру щодо довжини інструкцій та вирівнювання. The
визнані цінності для рівень є:

0 Немає оптимізації розміру. Цей рівень не підтримується та розглядається як 1.

1 Короткі інструкції використовуються кон'юнктурно.

2 Крім того, вирівнювання циклів і коду після бар’єрів скидаються.

3 Крім того, необов'язкове вирівнювання даних відкидається, а параметр Os активовано

Це значення за замовчуванням 3 коли -Ос діє. Інакше поведінка, коли цього немає
набір еквівалентний рівню 1.

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

Підтримувані значення для центральний процесор він має

ARC600
Налаштуйте процесор ARC600.

ARC601
Налаштуйте процесор ARC601.

ARC700
Налаштуйте процесор ARC700 зі стандартним блоком множника.

ARC700-xmac
Налаштуйте процесор ARC700 з блоком XMAC.

ARC725D
Налаштуйте процесор ARC725D.

ARC750D
Налаштуйте процесор ARC750D.

-mmultcost=Num
Прийняти вартість для інструкції множення, с 4 дорівнює звичайній інструкції.

-munalign-prob-threshold=ймовірність
Встановити поріг ймовірності для невирівнювання гілок. При налаштуванні на ARC700 і
оптимізуючи швидкість, переважно випромінювати гілки без заповненого слота затримки
невирівняний і довгий, якщо профілювання не вказує, що ймовірність для гілки до
бути прийнятий нижче ймовірність. За замовчуванням є (REG_BR_PROB_BASE/2), тобто 5000.

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

-маргонавт
Застарілий FPX.

-big-endian
-EB Скомпілювати код для цілей з великим порядком байтів. Використання цих параметрів тепер застаріло. Користувачі
бажаючи коду з великим порядком, слід використовувати цілі "arceb-elf32" і "arceb-linux-uclibc"
під час побудови ланцюжка інструментів, для якого за замовчуванням є великий байт.

-mlittle-endian
-EL Скомпілювати код для цілей з малим порядком. Використання цих параметрів тепер застаріло.
Користувачі, які хочуть код з маленьким порядком байтів, повинні використовувати "arc-elf32" і "arc-linux-uclibc"
цілі під час побудови ланцюжка інструментів, для якого за замовчуванням є байтове значення.

-mbarrel_shifter
Замінено -mbarrel-shifter.

-mdpfp_compact
Замінено -mdpfp-compact.

-mdpfp_fast
Замінено -mdpfp-швидкий.

-mdsp_packa
Замінено -mdsp-packa.

-MEA
Замінено -mea.

-mmac_24
Замінено -mmac-24.

-mmac_d16
Замінено -mmac-d16.

-mspfp_compact
Замінено -mspfp-compact.

-mspfp_fast
Замінено -mspfp-швидкий.

-mtune=центральний процесор
Цінності arc600, arc601, arc700 і arc700-xmac та цінності центральний процесор замінюються на ARC600, ARC601,
ARC700 і ARC700-xmac відповідно

-multcost=Num
Замінено - багатовартість.

ARM опції

Ці -m параметри визначені для порту ARM:

-mabi=name
Згенеруйте код для вказаного 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
Запобігайте зміні порядку інструкцій у пролозі функції або злиття
ці інструкції з інструкціями в тілі функції. Це означає, що все
функції починаються з розпізнаваного набору інструкцій (або фактично однієї на вибір
з невеликого набору різних прологів функцій), і цю інформацію можна використовувати для
знайти початок функцій всередині виконуваного фрагмента коду. За замовчуванням є
-msched-prolog.

-mfloat-abi=name
Визначає, який ABI з плаваючою комою використовувати. Допустимі значення: м'який, softfp і
жорсткий.

Уточнення м'який змушує GCC генерувати вихідні дані, що містять виклики бібліотеки для floating-
точкові операції. softfp дозволяє генерувати код з використанням апаратної плаваючої коми
інструкції, але все ще використовує конвенції про виклики soft-float. жорсткий дозволяє
генерування інструкцій з плаваючою комою та використання специфічних для FPU умов викликів.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що жорсткий поплавок
і soft-float ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з
той самий ABI і зв'язок із сумісним набором бібліотек.

-mlittle-endian
Згенеруйте код для процесора, що працює в режимі малого байта. Це значення за замовчуванням для
всі стандартні конфігурації.

-big-endian
Створення коду для процесора, що працює в режимі big-endian; за замовчуванням – компілювати
код для процесора з малим кінцем.

-березень=name
Це визначає назву цільової архітектури 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, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-march=armv7ve є архітектурою armv7-a з розширеннями віртуалізації.

-march=armv8-a+crc дозволяє генерувати код для архітектури ARMv8-A разом з
додаткові розширення CRC32.

-березня = рідний змушує компілятор автоматично визначати архітектуру збірки
комп'ютер. Наразі ця функція підтримується лише в GNU/Linux, і не у всіх
архітектури визнані. Якщо автоматичне визначення не вдалось, параметр не має
ефект

-mtune=name
Цей параметр визначає назву цільового процесора 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,
кора-a12, кора-a15, кора-a53, кора-a57, кора-a72, кора головного мозку-r4, кора головного мозку-r4f,
кора головного мозку-r5, кора головного мозку-r7, кора-m7, кора-m4, кора-m3, кора-m1, кора-m0,
кора-m0plus, cortex-m1.small-multiple, cortex-m0.small-multiple,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

Крім того, цей параметр може вказати, що GCC має налаштувати продуктивність коду
для системи big.LITTLE. Допустимі назви: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

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

-mtune = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в GNU/Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mcpu=name
Це визначає назву цільового процесора ARM. GCC використовує цю назву для отримання
ім'я цільової архітектури ARM (як би вказано в - марш) і процесор ARM
тип, для якого потрібно налаштувати продуктивність (наче вказано в -mtune). Де цей варіант
використовується разом з - марш or -mtune, ці параметри мають пріоритет над
відповідна частина цього варіанту.

Допустимі назви для цієї опції такі ж, як і для -mtune.

-mcpu=загальний-арка також допустимо і еквівалентно -березень=арка
-mtune=загальний-арка, Побачити -mtune для отримання додаткової інформації.

-mcpu = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в GNU/Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mfpu=name
Це визначає, яке обладнання з плаваючою комою (або апаратна емуляція) доступне
ціль. Допустимі назви: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, неоновий, неон-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8, і crypto-neon-fp-armv8.

If -msoft-float вказано, це визначає формат значень з плаваючою комою.

Якщо вибране обладнання з плаваючою комою включає розширення NEON (наприклад -mfpu=неоновий),
зверніть увагу, що операції з плаваючою комою не генеруються шляхом автоматичної векторизації GCC
якщо не -funsafe-math-optimizations також уточнюється. Це тому, що обладнання NEON
не повністю реалізує стандарт IEEE 754 для арифметики з плаваючою комою (в
певні деноральні значення розглядаються як нульові), тому використання інструкцій NEON може
призводять до втрати точності.

-mfp16-format=name
Вкажіть формат типу "__fp16" з плаваючою комою з напівточністю. Допустимі
імена є ніхто, тобто, і альтернатива; за замовчуванням ніхто, у цьому випадку "__fp16"
тип не визначений.

-mstructure-size-boundary=n
Розміри всіх конструкцій і об’єднань округляються до кратного числа
біти, встановлені цією опцією. Допустимі значення: 8, 32 і 64. Значення за замовчуванням
різниться для різних ланцюжків інструментів. Для цільового ланцюга інструментів COFF значенням за замовчуванням є
8. Значення 64 допускається лише в тому випадку, якщо базовий ABI підтримує його.

Зазначення більшого числа може створити швидший та ефективніший код, але також може
збільшити розмір програми. Різні значення потенційно несумісні.
Код, скомпільований з одним значенням, не обов’язково буде працювати з кодом або бібліотеками
складені з іншим значенням, якщо вони обмінюються інформацією за допомогою структур або об'єднань.

-mabort-on-noreturn
Згенеруйте виклик функції "abort" в кінці функції "noreturn". це є
виконується, якщо функція намагається повернути.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 64-мегабайтної адресації
діапазон версії інструкції виклику підпрограми на основі зміщення.

Навіть якщо цей перемикач увімкнено, не всі виклики функцій перетворюються на довгі виклики.
Евристика полягає в тому, що статичні функції, функції, які мають "short_call"
атрибут, функції, які входять до сфери дії директиви "#pragma no_long_calls",
і функції, визначення яких вже були скомпільовані в поточному
блок компіляції не перетворюються на довгі виклики. Винятки з цього правила такі
слабкі визначення функцій, функції з атрибутом "long_call" або "section"
атрибут і функції, які входять до сфери дії директиви "#pragma long_calls".
завжди перетворюються на довгі дзвінки.

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновлює
поведінка за замовчуванням, як і розміщення викликів функцій у межах "#pragma
long_calls_off". Зауважте, що ці перемикачі не впливають на роботу компілятора
генерує код для обробки викликів функцій за допомогою покажчиків функцій.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpic-register=Реджо
Вкажіть регістр, який буде використовуватися для PIC-адресації. Для стандартного базового випадку PIC,
за замовчуванням — будь-який відповідний регістр, визначений компілятором. Для одного базового випадку PIC,
за замовчуванням R9 якщо ціль заснована на EABI або ввімкнена перевірка стека, інакше
за замовчуванням R10.

-mpic-data-є-текст-відносний
Припустимо, що кожен сегмент даних відноситься до текстового сегмента під час завантаження. тому
він дозволяє адресувати дані за допомогою операцій, пов'язаних з ПК. Цей параметр увімкнено за замовчуванням
для цілей, відмінних від VxWorks RTP.

-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=name
Вкажіть модель доступу для покажчика локального сховища потоку. Дійсними є моделі
м'який, який генерує виклики "__aeabi_read_tp", cp15, який отримує потік
вказівник безпосередньо з "cp15" (підтримується архітектурою arm6k), і автоматичний, Яка
використовує найкращий доступний метод для вибраного процесора. Налаштування за замовчуванням
автоматичний.

-mtls-dialect=діалект
Вкажіть діалект для доступу до локального сховища потоку. Два діалектs є
підтримується---гну і 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, а також увімкнено для всіх інших архітектур. Якщо
неузгоджений доступ не увімкнено, тоді доступ до слів у упакованих структурах даних a
байт за раз.

Атрибут ARM «Tag_CPU_unaligned_access» встановлюється у згенерованому об’єктному файлі на
або true або false, залежно від налаштування цієї опції. Якщо доступ не вирівняний
увімкнено, то також визначено символ препроцесора "__ARM_FEATURE_UNALIGNED".

-mneon-for-64bits
Дозволяє використовувати Neon для обробки скалярних 64-бітних операцій. За замовчуванням це вимкнено
оскільки вартість переміщення даних з основних регістрів до Neon висока.

-mslow-flash-data
Припустимо, що завантаження даних із flash відбувається повільніше, ніж інструкція отримання. Тому буквально
навантаження зведено до мінімуму для кращої продуктивності. Ця опція підтримується лише тоді, коли
компіляція для M-профілю ARMv7 і вимкнена за замовчуванням.

-masm-syntax-unified
Припустимо, що вбудований асемблер використовує уніфікований синтаксис asm. Наразі значення за замовчуванням вимкнено
що передбачає розділений синтаксис. Наразі ця опція доступна лише для Thumb1 і
не впливає на стан ARM і Thumb2. Однак це може змінитися в майбутніх випусках
GCC. Розділений синтаксис слід вважати застарілим.

-mrestrict-it
Обмежує генерацію IT-блоків, щоб відповідати правилам ARMv8. IT-блоки можуть
містять лише одну 16-бітну інструкцію з вибраного набору інструкцій. Це
Параметр увімкнено за замовчуванням для режиму Thumb ARMv8.

-mprint-tune-info
Надрукуйте інформацію про налаштування ЦП як коментар у файлі ассемблера. Цей варіант використовується
тільки для регресійного тестування компілятора і не призначений для звичайного використання в
компіляція коду. Цей параметр вимкнено за замовчуванням.

AVR опції

Ці параметри визначені для реалізацій 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{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "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{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
«Розширені» пристрої з програмною пам’яттю до 8@tie{}КіБ. mcu@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
«Розширені» пристрої з програмною пам’яттю від 16@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
«at90scr100», «at90usb646», «at90usb647», «at94k», «m3000».

"avr51"
«Розширені» пристрої з 128@tie{}КіБ пам’яті програм. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
"Розширені" пристрої з 3-байтовим ПК, тобто з програмою понад 128@tie{}КіБ
пам'ять. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
Пристрої "XMEGA" з програмною пам'яттю понад 8@tie{}КіБ і до 64@tie{}КіБ.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам'ять. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам’яті та більше ніж 64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ. mcu@краватка{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ і більше
64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"авртини"
"TINY" Крихітні основні пристрої з 512@tie{}B до 4@tie{}КіБ програмної пам'яті.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"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, але призводить до менших розмірів
розмір коду.

-mn-flash=Num
Припустимо, що флеш-пам’ять має розмір Num разів 64@tie{}КіБ.

-mno-переривання
Згенерований код несумісний з апаратними перериваннями. Розмір коду менший.

- розслабитися
Спробуйте замінити "CALL" відповідно. Інструкція «JMP» за допомогою коротшої «RCALL» відповідно. "RJMP"
інструкція, якщо є. Налаштування - розслабитися просто додає --mlink-relax варіант для
командний рядок асемблера та -- розслабтеся параметр у командному рядку компонувальника.

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

Якщо потрібні заглушки компоновщика, необхідно ввімкнути розслаблення, дивіться розділ «EIND» і
заглушки лінкера нижче.

-mrmw
Припустимо, що пристрій підтримує інструкції Read-Modify-Write "XCH", "LAC", "LAS"
і "LAT".

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

Ця опція використовується внутрішньо компілятором для вибору та створення мультиліб
архітектури "avr2" і "avr25". Ці архітектури поєднують пристрої з і без
"SPH". Для будь-яких налаштувань, крім -mmcu=avr2 or -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{}бітів покажчика стека.

-nodevicelib
Не створюйте посилання на бібліотеку AVR-LibC, специфічну для пристрою, "libdev.a".

-Waddr-space-convert
Попереджають про перетворення між адресними просторами в тому випадку, коли отримана адреса
простір не міститься у вхідному адресному просторі.

"EIND" і пристрої з більш ніж 128 Кібайт Flash

Вказівники в реалізації мають ширину 16@tie{}бітів. Адреса функції або мітки
представлений у вигляді адреси слова, щоб непрямі переходи та виклики могли націлюватися на будь-який код
адреса в діапазоні 64@tie{}Кі слів.

Щоб полегшити непрямий перехід на пристрої з понад 128@tie{}Кі байт
пам'яті програми, існує спеціальний регістр функції під назвою "EIND", який служить як
найбільш значуща частина цільової адреси, коли є інструкції "EICALL" або "EIJMP".
використаний

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

* Компілятор ніколи не встановлює "EIND".

* Компілятор використовує "EIND" неявно в інструкціях "EICALL"/"EIJMP" або може прочитати
"EIND" безпосередньо, щоб імітувати непрямий виклик/стрибок за допомогою "RET"
інструкція.

* Компілятор припускає, що "EIND" ніколи не змінюється під час коду запуску або під час
додаток. Зокрема, "EIND" не зберігається/відновлюється у функції чи переривання
рутинна служба пролог/епілог.

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

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

* Сценарій компонувальника за замовчуванням упорядкований для коду з "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{}КіБ не підтримується GCC для цільових пристроїв AVR. Якщо ви використовуєте
вбудований ассемблер для читання з місць за межами 16-розрядного діапазону адрес і зміни
одного з регістрів "RAMP", ви повинні скинути його на нуль після доступу.

AVR Вбудовані макроси

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

Ще більше вбудованих макросів для AVR див AVR Названий адреса Приміщення і AVR Вбудований
Функції.

"__AVR_ARCH__"
Вбудований макрос, який розв’язується до десяткового числа, що ідентифікує архітектуру та
залежить від -mmcu=mcu варіант. Можливі значення:

2, 25, 3, 31, 35, 4, 5, 51, 6

та цінності mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

відповідно і

100, 102, 104, 105, 106, 107

та цінності mcu="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
відповідно. Якщо mcu вказує пристрій, цей вбудований макрос встановлюється відповідним чином. Для
наприклад, з -mmcu=atmega8 макросу визначено 4.

"__AVR_Пристрій__"
Установка -mmcu=пристрій визначає цей вбудований макрос, який відображає назву пристрою. Для
наприклад, -mmcu=atmega8 визначає вбудований макрос "__AVR_ATmega8__", -mmcu=attiny261a
визначає "__AVR_ATtiny261A__" тощо.

Назви вбудованих макросів відповідають схемі "__AVR_Пристрій__" де Пристрій є
назва пристрою згідно з посібником користувача AVR. Різниця між Пристрій у вбудованому
макрос і пристрій in -mmcu=пристрій полягає в тому, що останній завжди пишеться в нижньому регістрі.

If пристрій це не пристрій, а лише базова архітектура avr51, цей макрос не є
визначений.

"__AVR_DEVICE_NAME__"
Установка -mmcu=пристрій визначає цей вбудований макрос до імені пристрою. Наприклад,
з -mmcu=atmega8 макрос визначено як "atmega8".

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{}КіБ програмної пам’яті.

"__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-переривання параметр командного рядка.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Деякі пристрої AVR (AT90S8515, ATmega103) не повинні пропускати 32-розрядні інструкції через
апаратна помилка. Інструкції пропуску: "SBRS", "SBRC", "SBIS", "SBIC" і "CPSE".
Другий макрос визначається, лише якщо також встановлено "__AVR_HAVE_JMP_CALL__".

"__AVR_ISA_RMW__"
Пристрій має інструкції Read-Modify-Write (XCH, LAC, LAS і LAT).

"__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.

The optional огляд визначає кремнієву редакцію цільового Blackfin
процесор. Увімкнено будь-які обхідні шляхи, доступні для цільової силіконової версії.
If огляд is ніхто, обхідні шляхи не ввімкнені. Якщо огляд is будь-якийВсі
увімкнено обхідні шляхи для цільового процесора. Макрос "__SILICON_REVISION__".
визначається двома шістнадцятковими цифрами, що представляють головне та другорядне числа в
ревізія кремнію. Якщо огляд is ніхто, "__SILICON_REVISION__" не визначено.
If огляд is будь-який, "__SILICON_REVISION__" визначено як 0xffff. Якщо це
необов'язковий огляд не використовується, GCC припускає останню відому силіконову версію
цільовий процесор Blackfin.

GCC визначає макрос препроцесора для вказаного центральний процесор. Для bfin-elf ланцюжок інструментів,
цей параметр призводить до того, що апаратний BSP, наданий libgloss, буде пов’язаний у if -msim is
не дано.

Без цієї опції, bf532 за замовчуванням використовується як процесор.

Зауважте, що підтримка для bf561 є неповним. Для bf561, є лише макрос препроцесора
визначений.

-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, то
Використовується одно-додаткова/двоядерна модель програмування. У цій моделі основний
функцію Core B слід назвати як "coreb_main".

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

-mcorea
Створіть окрему програму для Core A BF561, використовуючи програму one-application-per-
базова модель програмування. Для підтримки Core використовуються правильні стартові файли та сценарії посилань
A, і визначено макрос "__BFIN_COREA". Цей параметр можна використовувати тільки в
поєднання з - багатоядерний.

-mcoreb
Створіть окрему програму для Core B BF561, використовуючи програму one-application-per-
базова модель програмування. Для підтримки Core використовуються правильні стартові файли та сценарії посилань
B і визначено макрос "__BFIN_COREB". Коли використовується цей параметр, "coreb_main"
слід використовувати замість «основний». Цей параметр можна використовувати лише разом із
- багатоядерний.

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

-micplb
Припустимо, що ICPLB увімкнено під час виконання. Це впливає на певну аномалію
обхідні шляхи. Для цілей Linux за замовчуванням передбачається, що ICPLB увімкнено; для
автономні програми за замовчуванням вимкнено.

C6X опції

-березень=name
Це визначає назву цільової архітектури. GCC використовує це ім’я для визначення
які інструкції він може видавати під час генерації коду складання. Допустимі
назви: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з малим порядком байтів. Це значення за замовчуванням.

-msim
Виберіть файли запуску та скрипт компоновника, які підходять для симулятора.

-msdata=за замовчуванням
Помістіть невеликі глобальні та статичні дані в розділ ".neardata", на який вказує
реєстр «В14». Помістіть невеликі неініціалізовані глобальні та статичні дані в розділ ".bss",
який примикає до розділу ".neardata". Помістіть невеликі дані лише для читання в файл
розділ ".rodata". Для великих фрагментів даних використовуються відповідні розділи
".fardata", ".far" і ".const".

-msdata=все
Помістіть усі дані, а не лише невеликі об’єкти, у розділи, зарезервовані для малих даних, і
використовуйте адресацію щодо регістру «B14» для доступу до них.

-msdata=немає
Не використовуйте розділи, зарезервовані для невеликих даних, і використовуйте абсолютні адреси
отримати доступ до всіх даних. Помістіть усі ініціалізовані глобальні та статичні дані в ".fardata"
розділ, а всі неініціалізовані дані в розділі ".far". Помістіть всі постійні дані
розділ ".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, сумісну з симулятором. Застосовується до ELF
тільки компілятор.

-м'ята32
Виберіть тип цілого числа як 32-бітну ширину.

-mbit-ops
Генерує інструкції "sbit"/"cbit" для маніпуляцій з бітами.

-mdata-model=модель
Виберіть модель даних. Вибір для модель він має близько, далеко or середа. середа є за замовчуванням.
Тим не менш, далеко недійсний з -mcr16c, оскільки архітектура CR16C не підтримує
далека модель даних.

Дарвін опції

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

FSF GCC on Darwin не створює «жирні» об'єктні файли; він створює об’єктний файл для
єдина архітектура, для якої створено GCC. GCC від Apple щодо Дарвіна справді створює «жир»
файлів, якщо їх декілька -арх використовуються варіанти; це робиться за допомогою компілятора або компоновщика
кілька разів і об’єднуючи результати разом з ліпо.

Підтип створеного файлу (наприклад ppc7400 or ppc970 or i686) визначається
прапори, які вказують на ISA, на який націлено GCC, наприклад -mcpu or - марш,
-force_cpusubtype_ALL параметр можна використовувати, щоб змінити це.

Інструменти Дарвіна відрізняються за своєю поведінкою, коли вони представлені з невідповідністю ISA. The
монтажник, as, дозволяє використовувати лише інструкції, які дійсні для підтипу
файл, який він створює, тому ви не можете помістити 64-розрядні інструкції в a ppc750 об'єктний файл. The
компонувальник для спільних бібліотек, /usr/bin/libtool, виходить з ладу і друкує помилку, якщо запитають
створити спільну бібліотеку з менш обмеженим підтипом, ніж її вхідні файли (для
приклад, намагаючись поставити a ppc970 об'єктний файл у a ppc7400 бібліотека). Лінкер для
виконувані файли, ld, тихо надає виконуваному файлу найбільш обмежувальний підтип з усіх його
вхідні файли.

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

Каталог фреймворків — це каталог із фреймворками. Рамка - це а
каталог з a Заголовки та / або PrivateHeaders каталогу, що міститься безпосередньо в ньому
закінчується .framework. Ім'я фреймворка є ім'ям цього каталогу без урахування
la .framework. Заголовки, пов’язані з фреймворком, знаходяться в одному з цих двох
довідники, с Заголовки обшукується першим. Субфреймворк - це каркас
каталог, який знаходиться у фреймворку Frameworks каталог. Включає підрамник
заголовки можуть з’являтися лише в заголовку фреймворка, який містить підфреймворк, або
у заголовку субфреймворка. Два підфреймворка є братами і сестрами, якщо вони зустрічаються в
той самий каркас. Субфреймворк не повинен мати те саме ім'я, що і фреймворк; а
у разі порушення видається попередження. Наразі підрамник не може мати
підрамки; у майбутньому механізм може бути розширений для підтримки цього. The
стандартні рамки можна знайти в /Система/Бібліотека/Фреймворки і
/ Library / Frameworks. Приклад включення виглядає як "#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-use-cxa-atexit, -fno-виключення, -fno-non-call-exceptions, -fapple-kext,
-fno-слабий і -fno-rtti де це застосовно. Цей режим також встановлюється -mno-altivec,
-msoft-float, -fno-вбудований і -mlong-гілка для цілей PowerPC.

-mone-byte-bool
Перевизначте значення за замовчуванням для "bool", щоб "sizeof(bool)==1". За замовчуванням "sizeof(bool)"
дорівнює 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 створює динамічну бібліотеку замість виконуваного файлу when
зв’язування за допомогою Дарвіна 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 використовуються для виконання
операції з плаваючою комою. Якщо вони не замінені підпрограмами, які емулюють
операції з плаваючою комою або скомпільовані таким чином, щоб викликати такі емуляції
підпрограм, ці підпрограми видають операції з плаваючою комою. Якщо ви збираєтесь для
Alpha без операцій з плаваючою комою, ви повинн