EngelsFransSpaans

Ad


OnWorks-favicon

g++-4.7 - Online in de cloud

Voer g++-4.7 uit in de gratis hostingprovider van OnWorks via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht g++-4.7 die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

PROGRAMMA:

NAAM


gcc - GNU project C en C++ compiler

KORTE INHOUD


gcc [-c|-S|-E] [-standaard=standaard]
[-g] [-blz] [-Oniveau]
[-Wwaarschuwen...] [-pedant]
[-Idir...] [-Ldir
[-Dmacro[=def]...] [-Umacro]
[-foptie...] [-mmachine-optie
[-o uitbestand] [@filet] in bestand...

Alleen de meest bruikbare opties worden hier vermeld; zie hieronder voor de rest. g ++ accepteert
meestal dezelfde opties als gcc.

PRODUCTBESCHRIJVING


Wanneer u GCC aanroept, doet het normaal gesproken de voorbewerking, compilatie, montage en koppeling.
Met de "algemene opties" kunt u dit proces tussentijds stopzetten. Voor
bijvoorbeeld, de -c optie zegt de linker niet uit te voeren. Dan bestaat de uitvoer uit object
bestanden die door de assembler worden uitgevoerd.

Andere opties worden doorgegeven aan één verwerkingsstadium. Sommige opties regelen de
preprocessor en anderen de compiler zelf. Nog andere opties besturen de assembler en
koppelaar; de meeste hiervan zijn hier niet gedocumenteerd, omdat u ze zelden hoeft te gebruiken.

De meeste opdrachtregelopties die u met GCC kunt gebruiken, zijn handig voor C-programma's; wanneer
een optie is alleen handig met een andere taal (meestal C++), de uitleg zegt het zo
uitdrukkelijk. Als de beschrijving voor een bepaalde optie geen bron vermeldt
taal, kunt u die optie gebruiken met alle ondersteunde talen.

De gcc programma accepteert opties en bestandsnamen als operanden. Veel opties hebben meerdere
letter namen; daarom kunnen meerdere opties van één letter niet worden gegroepeerd: -dv is zeer
verschillend van -d -v.

U kunt opties en andere argumenten door elkaar halen. De volgorde die u gebruikt, doet dat voor het grootste deel niet
materie. Volgorde is belangrijk als je meerdere opties van dezelfde soort gebruikt; bijvoorbeeld, als
jij specificeert -L meerdere keren, worden de mappen doorzocht in de opgegeven volgorde. Ook,
de plaatsing van de -l optie is aanzienlijk.

Veel opties hebben lange namen die beginnen met -f of -W---bijvoorbeeld,
-fmove-loop-invarianten, -Wformaat enzovoort. De meeste hiervan hebben zowel positieve als negatieve
formulieren; de negatieve vorm van -foei zou -fno-foo. Deze handleiding documenteert er slechts één van
deze twee vormen, welke niet de standaard is.

OPTIES


Keuze Samengevat
Hier is een overzicht van alle opties, gegroepeerd op type. Verklaringen zijn in de volgende:
secties.

globaal Opties
-c -S -E -o filet -geen-canonieke-voorvoegsels -pijp -pass-exit-codes -x taal -v
-### --help[=klasse[, ...]] --doel-hulp --versie -wikkel @filet -fplugin=filet
-fplugin-arg-naam=arg -fdump-ada-specificatie[-slank] -fdump-go-spec=filet

C Taal Opties
-ansi -standaard=standaard -fgnu89-inline -aux-info bestandsnaam
-fallow-parameterloze-variadic-functies -fno-asm -fno-ingebouwd -fno-ingebouwd-functie
-gehost -vrijstaand -fopenmp -fms-extensies -fplan9-extensies -trigrafieën
-geen-geïntegreerde-cpp - traditioneel -traditionele-cpp -fallow-single-precisie
-fcond-mismatch -vlas-vector-conversies -fsigned-bitvelden -fsigned-char
-funsigned-bitvelden -funsigned-char

C + + Taal Opties
-fabi-versie=n -fno-toegangscontrole -fcheck-nieuw -fbehoud-ruimte
-fconstexpr-diepte=n -ffriend-injectie -fno-elide-constructeurs -fno-enforce-eh-specificaties
-ffor-bereik -fno-voor-scope -fno-gnu-trefwoorden -fno-impliciete-sjablonen
-fno-impliciete-inline-sjablonen -fno-implementeren-inlines -fms-extensies
-fno-nonansi-ingebouwd -fnothrow-opt -fno-operatornamen -fno-optionele-diags
-fpermissief -fno-mooie-sjablonen -frepo -fno-rtti -statistieken -ftemplate-diepte=n
-fno-threadsafe-statica -zekering-cxa-atexit -fno-zwak -nostdinc++ -fno-standaard-inline
-zichtbaarheid-inlijnen-verborgen -zichtbaarheid-ms-compat -Wabi -Wconversie-null
-Wctor-dtor-privacy -Wwis-niet-virtuele-dtor -vernauwing -Wnobehalve
-Wniet-virtuele-dtor -Worden -Weffc++ -Wstrict-null-schildwacht
-Wno-niet-sjabloon-vriend -Wold-stijl-cast -Woverloaded-virtueel -Wno-pmf-conversies
-Wsign-promo

Doelstelling C en Objectief-C++ Taal Opties
-fconstante-string-klasse=naam van de klasse -fgnu-looptijd -fnext-runtime -fno-nul-ontvangers
-fobjc-abi-versie=n -fobjc-call-cxx-cdtors -fobjc-directe-verzending -fobjc-uitzonderingen
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freeplace-objc-klassen -fzero-link
-gen-decls -Wassign-onderscheppen -Wno-protocol -Wkiezer -Wstrict-selector-overeenkomst
-Wondeclared-selector

Taal Onafhankelijk Opties
-fbericht-lengte=n -fdiagnostics-show-locatie=[eens|elke lijn]
-fno-diagnose-show-optie

waarschuwing Opties
-fsyntaxis-alleen -fmax-fouten=n -pedant -pedant-fouten -w -Wextra -Muur
-Wadres -Waggregate-retour -Warray-grenzen -Wno-attributen
-Wno-ingebouwde-macro-opnieuw gedefinieerd -Wc++-compatibel -Wc++11-compatibel -Wcast-uitlijnen -Wcast-kwaliteit
-Wchar-abonnementen -Wingewikkeld -Wcommentaar -Wconversie -Wdekking-mismatch -Wno-cpp
-Wno-verouderd -Wno-verouderde-declaraties -Wdisabled-optimalisatie -Wno-div-door-nul
-Wdubbele-promotie -Weeg lichaam -Wenum-vergelijken -Wno-endif-labels -fout -Fout=*
-Wfatal-fouten -Wfloat-gelijk -Wformaat -Wformaat=2 -Wno-formaat-bevat-nul
-Wgeen-formaat-extra-args -Wformat-niet-letterlijk -Wformat-beveiliging -Wformat-y2k
-Wframe-groter-dan=len -Wno-vrij-nonheap-object -Wjump-missers-init
-Wignored-kwalificaties -Wimpliciet -Wimplicit-functie-declaratie -Wimpliciet-int
-Winit-zelf -Winlijn -Wmisschien-niet-geïnitialiseerd -Wno-in-naar-pointer-cast
-Wno-ongeldige-offsetof -Winvalid-pch -Wgroter-dan=len -Wunsafe-loop-optimalisaties
-Wlogische-op -Lang-lang -Wbelangrijk -Wmisschien-niet-geïnitialiseerd -Wmissing-bretels
-Wmissing-veld-initializers -Wmissing-formaat-kenmerk -Ontbrekende-include-dirs
-Wno-spatlap -Wno-multichar -Wnonnull -Wno-overloop -Woverlengte-snaren -Wingepakt
-Wpacked-bitfield-compatibel -Gevoerd - Tussen haakjes -Wpedantic-ms-formaat
-Wno-pedant-ms-formaat -Wpointer-arith -Wno-aanwijzer-naar-int-cast -Wredundant-verklaart
-Wretour-type -Wvolgorde-punt -Wschaduw -Wsign-vergelijk -Wsign-conversie
-Wstack-beschermer -Wstack-gebruik=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overloop -Wstrict-overloop=n -Wsuggest-attribuut=[zuiver|const|geen terugkeer]
-Wschakelaar -Wswitch-standaard -Wswitch-opsomming -Wsync-nand -Wsysteem-headers -Wtrampolines
-Schrijven -Wtype-limieten -Wundef -Geïnitialiseerd -Wunknown-pragma's -Wno-pragma's
-Wunsuffixed-float-constanten -Wongebruikt -Wunused-functie -Wongebruikt-label
-Wunused-local-typedefs -Wunused-parameter -Wno-ongebruikt-resultaat -Wunused-waarde
-Wunused-variabele -Wunused-maar-set-parameter -Wunused-maar-set-variabele
-Wvariadic-macro's -Wvector-operatie-prestaties -Wvla -Wvluchtig-register-var
-Wwrite-tekenreeksen -Wzero-als-null-pointer-constante

C en Objectief-C-only waarschuwing Opties
-Wbad-functie-cast -Wmissing-verklaringen -Ontbrekend-parametertype
-Wmissing-prototypes -Wnested-externen -Wold-stijl-verklaring -Wold-stijl-definitie
-Wstrict-prototypes -Wtraditioneel -Wtraditionele-conversie
-Wdeclaratie-na-statement -Wpointer-teken

Debugging Opties
-dbrieven -stortspecificaties - dumpmachine -dumpversie -fdbg-cnt-lijst -fdbg-cnt=contra-
waardelijst -fdisable-ipa-pas_naam -fdisable-rtl-pas_naam -fdisable-rtl-doorgang-
naam=bereiklijst -fdisable-boom-pas_naam -fdisable-boom-pas-naam=bereiklijst
-fdump-noaddr -fdump-ongenummerd -fdump-ongenummerde-links -fdump-vertaaleenheid[-n]
-fdump-klasse-hiërarchie[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-passen -fdump-statistieken -fdump-boom-alles -fdump-tree-origineel[-n]
-fdump-tree-geoptimaliseerd[-n] -fdump-boom-cfg -fdump-boom-vcg -fdump-tree-alias
-fdump-boom-ch -fdump-boom-ssa[-n] -fdump-boom-pre[-n] -fdump-boom-ccp[-n]
-fdump-boom-dce[-n] -fdump-boom-gimple[-trekken] -fdump-boom-spatklep[-n]
-fdump-boom-dom[-n] -fdump-boom-dse[-n] -fdump-boom-phiprop[-n] -fdump-boom-phiopt[-n]
-fdump-boom-forwprop[-n] -fdump-boom-kopieernaam[-n] -fdump-tree-nr -fdump-boom-vect
-fdump-boom-gootsteen -fdump-boom-sra[-n] -fdump-boom-forwprop[-n] -fdump-boom-vrij[-n]
-fdump-boom-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-finale-insns=filet -fvergelijk-foutopsporing[=kiest] -fvergelijk-foutopsporing-seconde
-feliminate-dwerg2-dups -feliminate-ongebruikte-debug-types
-feliminate-ongebruikte-debug-symbolen -femit-class-debug-altijd -weerbaar-soort-passeren
-weerbaar-soort-passeren=bereiklijst -fdebug-types-sectie -fmem-rapport -fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport -fprofile-bogen -random-seed=snaar -fsched-verbose=n
-fsel-sched-uitgebreid -fsel-sched-dump-cfg -fsel-sched-pipelining-uitgebreid -fstack-gebruik
-fest-dekking -ftime-rapport -fvar-tracking -fvar-tracking-opdrachten
-fvar-tracking-toewijzingen-toggle -g -gniveau -goggle -gcoff -gdwerg-versie -ggdb
-grecord-gcc-schakelaars -gno-record-gcc-schakelaars -gstabs -gstabs+ -gstrict-dwerg
-gno-strikte-dwerg -gvms -gxcoff -gxcoff+ -fno-samenvoegen-debug-strings
-fno-dwerg2-cfi-asm -fdebug-prefix-map=oud=nieuwe -femit-struct-debug-baseonly
-femit-struct-debug-gereduceerd -femit-struct-debug-gedetailleerd[=spec-lijst] -p -blz
-print-bestandsnaam=bibliotheek -print-libgcc-bestandsnaam -print-meerdere mappen
-print-multi-lib -print-multi-os-map -print-prog-naam=programma
-print-zoekmap -Q -print-sysroot -print-sysroot-headers-achtervoegsel -opslaan-temps
-save-temps=cwd -save-temps=obj -tijd[=filet]

Optimization Opties
-falign-functies[=n] -falign-sprongen[=n] -falign-labels[=n] -falign-loops[=n]
-Fassociatieve-wiskunde -fauto-inc-dec -fbranch-waarschijnlijkheden -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fbtr-bb-exclusief -fcaller-opslaat -fcheck-data-deps
-fcombine-stack-aanpassingen -fconserve-stack -fvergelijk-elim -fcprop-registers
-fcrossspringen -fcse-volg-sprongen -fcse-blokken-overslaan -fcx-fortran-regels
-fcx-beperkt bereik -fdata-secties -fdce -fvertraagde-tak -fdelete-null-pointer-controles
-fdevirtualiseren -fdse -angstig-inlining -fipa-sra -fexpensive-optimalisaties
-ffat-lto-objecten -ffast-wiskunde -alleen eindige-wiskunde -float-winkel
-fexcess-precisie=stijl -vooruit-propageren -ffp-contract=stijl -ffunctie-secties
-fgcse -fgcse-na-herladen -fgcse-las -fgcse-lm -fgrafiet-identiteit -fgcse-sm
-fif-conversie -fif-conversie2 -findirect-inlining -finline-functies
-finline-functies-eenmaal genoemd -finline-limiet=n -finline-kleine-functies -fipa-cp
-fipa-cp-kloon -fipa-matrix-reorg -fipa-pta -fipa-profiel -fipa-pure-const
-fipa-referentie -fira-algoritme=algoritme -fira-regio=regio -fira-loop-druk
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -vijfpunten
-fkeep-inline-functies -fhoud-statische-consts -floop-blok -floop-afvlakken
-floop-uitwisseling -floop-strip-mijn -floop-paralleliseer-alles -flto
-fto-compressie-niveau -flto-partitie=alg -flto-rapport -fmerge-alle-constanten
-fmerge-constanten -fmodulo-sched -fmodulo-sched-toestaan-regmoves -fmove-loop-invarianten
spatlap -fmodderlapir -fspatlap -fno-filiaal-tel-reg -fno-standaard-inline
-fno-uitstellen-pop -fno-functie-cse -fno-raad-tak-waarschijnlijkheid -fno-inline
-fno-wiskunde-errno -fno-kijkgaatje -fno-kijkgaatje2 -fno-sched-interblock -fno-sched-specificatie
-fno-ondertekende nullen -fno-toplevel-herordenen -fno-trapping-wiskunde
-fno-nul-geïnitialiseerd-in-bss -fomit-frame-aanwijzer -foptimaliseren-register-verplaatsen
-foptimize-broer-zus-oproepen -fgedeeltelijke-inlining -fpel-loops -fvoorspellende-commoning
-fprefetch-loop-arrays -fprofiel-correctie -fprofiel-dir=pad -fprofile-genereren
-fprofile-genereren=pad -fprofile-gebruik -fprofile-gebruik=pad -fprofile-waarden
-freciprocal-wiskunde -vrij -fregverplaatsing -frename-registers -freeorder-blokken
-freeorder-blokken-en-partitie -freeorder-functies -frerun-cse-na-lus
-nieuwe planning-modulo-geplande-lussen -grond-wiskunde -fsched2-gebruik-superblokken
-fsched-druk -fsched-specificatie-laden -fsched-spec-load-gevaarlijk
-fsched-vastgelopen-insns-dep[=n] -fsched-vastgelopen-insns[=n] -fsched-groep-heuristiek
-fsched-kritiek-pad-heuristiek -fsched-spec-insn-heuristiek -fsched-rank-heuristiek
-fsched-laatste-insn-heuristiek -fsched-dep-count-heuristiek -fschema-insns
-fschema-insns2 -fsectie-ankers -fselectieve planning -fselectieve planning2
-fsel-sched-pijpleidingen -fsel-sched-pipelining-buitenste lussen -fkrimpfolie
-fsignalering-nans -fsingle-precisie-constante -fsplit-ivs-in-uitroller
-fsplit-wide-types -stack-beschermer -fstack-protector-all -fstrict-aliasing
-fstrict-overloop -fthread-sprongen -ftracer -ftree-bit-ccp -ftree-ingebouwde-aanroep-dce
-ftree-ccp -ftree-ch -ftree-coalescentie-inline-vars -ftree-coalescentie-vars -ftree-kopie-prop
-ftree-kopieernaam -ftree-dce -ftree-dominator-opteert -ftree-dse -ftree-forwprop
- vrij van bomen -ftree-lus-als-omzetten -ftree-loop-if-convert-winkels -ftree-lus-im
-ftree-phiprop -ftree-loop-distributie -ftree-loop-distribueer-patronen
-ftree-loop-ivcanon -ftree-loop-lineair -ftree-loop-optimaliseren -ftree-parallelize-loops=n
-ftree-pre -ftree-gedeeltelijke-pre -ftree-pta -ftree-redenoc -vtree-gootsteen -ftree-sra
-ftree-switch-conversie -ftree-staart-samenvoegen -ftree-ter -ftree-vect-loop-versie
-ftree-vectoriseren -ftree-vrp -fun-at-a-time -funroll-alle-loops -funroll-loops
-funsafe-loop-optimalisaties -funsafe-math-optimalisaties -funswitch-loops
-fvariabele-uitbreiding-in-afroller -fvect-kostenmodel -fvpt -fweb -f hele-programma -fwpa
-zekering-ld=Links -fuse-linker-plug-in --param naam=waarde -O -O0 -O1 -O2 -O3 -Jij
-Of snel

preprocessor Opties
-Avraag=beantwoorden -A-vraag[=beantwoorden] -C -dd -dI -dM -DN -Dmacro[=def] -E -H
-idirna dir omvatten filet -imacro's filet -ipvoorvoegsel filet -imetvoorvoegsel dir
-imetvoorvoegselvoor dir -isysteem dir -imultilib dir -isysroot dir -M -MM -MF -MG
- MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-uitbreiding -fworking-map
-opnieuw toewijzen -trigrafieën -ondef -Umacro -Wp,optie -Xpreprocessor optie

Assembler Keuze
-Wah,optie -Xmonteur optie

Links Opties
object-bestandsnaam -lbibliotheek -nostartbestanden -nodefaultlibs -nostlib -taart -rdynamisch -s
-statisch -statisch-libgcc -statische-libstdc++ -gedeeld -gedeelde-libgcc -symbolisch -T script
-Wl,optie -Xlinker optie -u symbool

Directory Opties
-Bvoorvoegsel -Idir -iplugindir=dir -ikquotedir -Ldir -specificaties=filet -IK- --sysroot=dir

Machine Afhankelijk Opties
Arch64 Opties -mbig-endian -mlittle-endian -mgeneral-regs-only -mcmodel=klein
-mcmodel=klein -mcmodel=groot -mstrict-uitlijnen -momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer -mtls-dialect=besch -mtls-dialect=traditioneel -maart=naam
-mcpu=naam -mtune=naam

Adapteva Driekoningen Opties -mhalf-reg-bestand -mprefer-short-insn-regs -mbranch-kosten=num
-mcverplaatsen -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-wijzigen
-mstack-offset=num -mround-dichtstbijzijnde -mlong-oproepen -mkorte-oproepen -mklein16 -mfp-modus=mode
-mvect-dubbel -max-vect-align=num -msplit-vecmove-vroeg -m1reg-reg

ARM Opties -maps-frame -mno-apcs-frame -mabi=naam -mapcs-stapelcontrole
-mno-apcs-stapelcontrole -mapcs-zweven -mno-apcs-float -maps-herintredende
-mno-apcs-reentrant -msched-proloog -mno-sched-proloog -mlittle-endian -mbig-endian
-mwords-little-endian -mfloat-abi=naam -mfpe -mfp16-formaat=naam -mthumb-interactie
-mno-duim-interwork -mcpu=naam -maart=naam -mfpu=naam -mstructuur-grootte-grens=n
-mabort-op-noreturn -mlong-oproepen -mno-lange gesprekken -msingle-pic-basis
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mcirrus-fix-ongeldige-insns
-mno-cirrus-fix-ongeldige-insns -mpoke-functie-naam -duim -marme -mtpcs-frame
-mtpcs-blad-frame -mcaller-super-interworking -mcallee-super-interworking -mtp=naam
-mtls-dialect=tongval -mword-verhuizingen -mfix-cortex-m3-ldrd -munaligned-toegang
-mneon-voor-64bits

AVR Opties -mmcu=MCU -maccumuleren-args -mbranch-kosten=kosten -mcall-prologen -mint8
-mno-onderbreekt -montspan -mkorte-oproepen -mstrict-X -mtiny-stapel

Zwartvintonijn Opties -mcpu=cpu[-sirene] -msim -momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer -mspecld-anomalie -mno-specld-anomalie -mcsync-afwijking
-mno-csync-anomalie -mlow-64k -mno-low64k -mstack-check-l1 -midden-gedeelde-bibliotheek
-mno-id-gedeelde-bibliotheek -mshared-bibliotheek-id=n -mleaf-id-gedeelde-bibliotheek
-mno-blad-id-gedeelde-bibliotheek -msep-gegevens -mno-sep-gegevens -mlong-oproepen -mno-lange gesprekken
-mfast-fp -minline-plt -mmulticore -mcore -mcoreb -msdram -micplb

C6X Opties -mbig-endian -mlittle-endian -maart=cpu -msim -msdata=sdata-type

CRIS Opties -mcpu=cpu -maart=cpu -mtune=cpu -mmax-stackframe=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-bijwerkingen
-mstack-uitlijnen -mdata-uitlijnen -mconst-uitlijnen -m32-bit -m16-bit -m8-bit
-mno-proloog-epiloog -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-oplossing -mno-mul-bug-oplossing

CR16 Opties -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops -mdata-model=model

Darwin Opties -alle_laden -allowable_client -boog -arch_errors_fataal -arch_only
-bind_at_load -bundel -bundel_lader -klantnaam -compatibiliteit_versie
-huidige versie -dode_strip -afhankelijkheidsbestand -dylib_bestand -dylinker_installatienaam
-dynamisch -dynamische lib -geëxporteerde_symbols_list -bestandslijst -flat_naamruimte
-force_cpusubtype_ALL -force_flat_naamruimte -headerpad_max_install_names -iframework
-afbeelding_basis -in het -installatienaam -keep_private_externs -multi_module
-vermenigvuldig_gedefinieerd -vermenigvuldig_gedefinieerd_ongebruikt -noall_load
-no_dead_strip_inits_and_terms -nofixvoorbinding -geenmultidefs -niet voorbinden
-neuslinkedit -pagezero_size -voorbinden -prebind_all_twolevel_modules -private_bundel
-read_only_relocs -seks uitlijnen -sectieobjectsymbolen -waarom? -seg1adr -secreteren
-sectieobjectsymbolen -sectorder -segadr -segs_read_only_adr -segs_read_write_adr
-seg_addr_tabel -seg_addr_tabel_bestandsnaam -seglinkedit -segrot -segs_read_only_adr
-segs_read_write_adr -enkele_module -statisch -sub_bibliotheek -sub_paraplu
-tweeniveau_naamruimte -paraplu -onbepaald -niet-geëxporteerde_symbolen_lijst
-zwakke_referentie_mismatches -wat is geladen -F -gespuugd -vol -mmacosx-versie-min=versie
-mkernel -moon-byte-bool

December Alpha Opties -mno-fp-regs -msoft-zweven -malpha-as -mg -mieeee
-mieee-met-onnauwkeurig -mieee-conform -mfp-trap-modus=mode -mfp-afrondingsmodus=mode
-mtrap-precisie=mode -mbuild-constanten -mcpu=CPU-type -mtune=CPU-type -mbwx -m max
-mfix -mcix -mfloat-vax -mfloat-ieee -mexpliciete-relocs -msmall-gegevens -mgrote-gegevens
-msmall-tekst -mgrote-tekst -geheugen-latentie=niet de tijd of

December Alfa/VMS Opties -mvms-retourcodes -mdebug-main=voorvoegsel -mmalloc64

FR30 Opties -mklein-model -mno-lsim

FRV Opties -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-zweven -msoft-zweven
-malloc-cc -mfixed-cc -mdwoord -mno-dword -mdubbel -mno-dubbel -media -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-bibliotheek-foto
-mlinked-fp -mlong-oproepen -kwaadaardige-labels -mlibrary-foto -macc-4 -macc-8 -mpak
-mno-pakket -mno-vlaggen -mcond-zet -mno-cond-zet -moptimize-lid
-mno-optimaliseer-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-tak
-mno-vliw-tak -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-geneste-cond-exec -mtomcat-statistieken -mTLS -mtls -mcpu=cpu

GNU / Linux Opties -mglibc -muclib -mbionisch -mandroïde -tno-android-cc -tno-android-ld

H8 / 300 Opties -montspan -mh -Mevrouw - mn -mint32 -kwaadaardig-300

HPPA Opties -maart=architectuur-type -mbig-schakelaar -mdisable-fpregs
-mdisable-indexering -mfast-indirecte-oproepen -mg -mgnu-ld -mhp-ld
-mvast-bereik=register-bereik -mjump-in-vertraging -mlinker-opt -mlong-oproepen
-mlong-load-store -mno-grote-schakelaar -mno-fpregs-uitschakelen -mno-indexering uitschakelen
-mno-snel-indirecte-oproepen -mno-gas -mno-sprong-in-vertraging -mno-long-load-store
-mno-draagbare-runtime -mno-soft-float -mno-space-regs -msoft-zweven -mpa-risico-1-0
-mpa-risico-1-1 -mpa-risico-2-0 -mportable-runtime -mschema=CPU-type -mspace-regs
-msio -mwsio -munix=unix-standaard -nolibld -statisch -draden

i386 en x86-64 Opties -mtune=CPU-type -maart=CPU-type -mfpmath=eenheid -masm=tongval
-mno-fancy-wiskunde-387 -mno-fp-ret-in-387 -msoft-zweven -mno-breed-vermenigvuldigen -mrtd
-kwaadaardig-dubbel -mpreferred-stack-grens=num -mincoming-stack-grens=num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecipe -mrecept=opteren -mvzerupper -mpprefer-avx128 - mmmx
-ms -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnu -mpopcnt -mabm -mbmi -MTB -mfma4
-mxop -mlzct -mbmi2 -mlwp -mthreads -mno-uitlijnen-stringops -minline-all-stringops
-minline-stringops-dynamisch -mstringop-strategie=alg -mpush-args
-bereken-uitgaande-args -m128bit-lang-dubbel -m96bit-lang-dubbel -mregparm=num
-msseregparm -mveclibabi= type dan: -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstack opnieuw uitlijnen
-momit-blad-frame-aanwijzer -mno-rode-zone -mno-tls-direct-seg-refs -mcmodel=codemodel
-mabi=naam -madress-mode=mode -m32 -m64 -mx32 -mlarge-data-drempel=num -msse2avx
-mfentry -m8bit-idiv -mavx256-gesplitste niet-uitgelijnde belasting -mavx256-split-unaligned-store

i386 en x86-64 Dakramen en raamkozijnen Opties -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -muncode -mwin32 -mvensters -fno-set-stack-uitvoerbaar

IA-64 Opties -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-foto
-mvluchtige-asm-stop -mregister-namen -msgegevens -mno-sdata -mconstante-gp -mauto-foto
-mfused-gek -minline-float-deel-min-latentie -minline-float-deel-max-doorvoer
-mno-inline-float-delen -minline-int-verdeel-min-latentie
-minline-int-verdeel-max-doorvoer -mno-inline-int-delen -minline-sqrt-min-latentie
-minline-sqrt-max-doorvoer -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mvast-bereik=register-bereik -mtls-grootte=tls-formaat -mtune=CPU-type -milp32 -mlp64
-msched-br-data-specificatie -msched-ar-data-specificatie -msched-controle-specificatie -msched-br-in-data-specificatie
-msched-ar-in-data-specificatie -msched-in-control-specificatie -msched-spec-ldc
-msched-specificatie-controle-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-na-elke-cyclus
-msched-telling-spec-in-kritiek-pad -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-nul-kosten -msched-max-geheugen-insns-harde-limiet
-msched-max-geheugen-insns=max-insns

IA-64/VMS Opties -mvms-retourcodes -mdebug-main=voorvoegsel -mmalloc64

LM32 Opties -mbarrel-shift ingeschakeld -mdivide ingeschakeld -mmultiply ingeschakeld
-msign-uitbreiden ingeschakeld -muser ingeschakeld

M32R/D Opties -m32r2 -m32rx -m32r -mdebug -kwaadaardige-loops -mno-align-loops
-missue-tarief=aantal -mbranch-kosten=aantal -mmodel=code-grootte-model-type -msdata=sdata-
type dan: -mno-flush-func -mflush-func=naam -mno-flush-trap -mflush-trap=aantal -G num

M32C Opties -mcpu=cpu -msim -memregs=aantal

M680x0 Opties -maart=boog -mcpu=cpu -mtune=toon -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitveld -mno-bitveld -mc68000 -mc68020 -mnobitveld -mrtd -mno-rtd
-mdiv -mno-div -mkort -mno-kort -mhard-zweven -m68881 -msoft-zweven -mprel
-kwaadaardig-in -mstrict-uitlijnen -msep-gegevens -mno-sep-gegevens -mshared-bibliotheek-id=n
-midden-gedeelde-bibliotheek -mno-id-gedeelde-bibliotheek -mxgot -mno-xgot

MCore Opties -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-onmiddellijk
-mno-relax-onmiddellijk -mwide-bitvelden -mno-brede bitvelden -m4byte-functies
-mno-4byte-functies -mcallgraph-gegevens -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment

IkP Opties -mabsdiff -mall-opteert -gemiddeld -mgebaseerd=n -mbitoppen -mc=n -mclip
-mconfig=naam -mkop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-vluchtig -ml
-mleadz -mm -mmminmax -mmult -mno-opteert -mherhalen -Mevrouw -msatur -msdram -msim -msimnovec
-mtf -min=n

MicroBlaze Opties -msoft-zweven -mhard-zweven -mklein-verdeelt -mcpu=cpu -mmmpy
-mxl-zacht-mul -mxl-zacht-div -mxl-barrel-shift -mxl-patroon-vergelijken -mxl-stapelcontrole
-mxl-gp-opt -mno-clearbss -mxl-vermenigvuldigen-hoog -mxl-float-omzetten -mxl-float-sqrt
-mxl-modus-app-model

MIPS Opties -DE -EB -maart=boog -mtune=boog -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicbellen -mno-abicalls
-mgedeeld -mno-gedeeld -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-zweven -msoft-zweven -msingle-float -mdubbele-zwevende -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=fpu-type -msmartmips -mno-smartmips -gehandicapt-single
-mno-gepaarde-single -mdmx -mno-mdmx -mips3d -mno-mips3d - mmt -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum -mlokale-sdata
-mno-lokale-sdata -mextern-sdata -mno-externe-sdata -mgpopt -mno-gopt -ingesloten-gegevens
-mno-ingebedde-gegevens -muninit-const-in-rodata -mno-unitit-const-in-rodata
-mcode-leesbaar=het instellen van -msplit-adressen -mno-split-adressen -mexpliciete-relocs
-mno-expliciete-relocs -mcheck-nul-divisie -mno-check-nul-divisie -mdivide-vallen
-tussenpauzes -mmmpy -mno-memcpy -mlong-oproepen -mno-lange gesprekken -mad -mno-gek
-mfused-gek -mno-gefuseerd-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=func -mno-flush-func -mbranch-kosten=num -mbranch-waarschijnlijk
-mno-tak-waarschijnlijk -mfp-uitzonderingen -mno-fp-uitzonderingen -mvr4130-uitlijnen -mno-vr4130-uitlijnen
-msynci -mno-sync -mrelax-pic-oproepen -mno-relax-pic-oproepen -mmcount-ra-adres

MMIX Opties -mlibfuncties -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-uitbreiden -mknuthdiv -mtoplevel-symbolen -melf -mtak-voorspellen
-mno-tak-voorspelling -mbase-adressen -mno-base-adressen -msingle-uitgang
-mno-enkele-uitgang

MN10300 Opties -mmult-bug -mno-multi-bug -mno-am33 -mama33 -mam33-2 -mama34 -mtune=processor-
type dan: -mretourwijzer-op-d0 -mno-crt0 -montspan -mlw -msetlb

PDP-11 Opties -mfpu -msoft-zweven -mac0 -mno-ac0 -m40 -m45 -m10 -mbkopie
-mbcopy-ingebouwd -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-duur -mbrach-goedkoop
-munix-asm -mdec-asm

picoChip Opties -mae=een_type -mvliw-vooruitblik=N -msymbool-als-adres
-mno-inefficiënte-waarschuwingen

PowerPC Opties Zie RS/6000- en PowerPC-opties.

RL78 Opties -msim -mmul=geen -mmul=g13 -mmul=rl78

RS / 6000 en PowerPC Opties -mcpu=CPU-type -mtune=CPU-type -mcmodel=codemodel -mkracht
-mno-kracht -mkracht2 -mno-kracht2 -mpowerpc -mpowerpc64 -mno-powerpc -maltiefc
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfpnd
-mno-vprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-harde-dfp
-mnew-geheugensteuntjes -schimmel-ezelsbruggetjes -mfull-toc -minimale-toc -mno-fp-in-toc
-mno-som-in-toc -m64 -m32 -mxl-compatibel -mno-xl-compatibel -mp -kwaadaardige macht
-kwaadaardig-natuurlijk -msoft-zweven -mhard-zweven -mveelvoudig -mno-meerdere -msingle-float
-mdubbele-zwevende -msimple-fpu -mtekenreeks -mno-tekenreeks -mupdate -mno-update
-mavoid-geïndexeerde-adressen -mno-vermijd-geïndexeerde-adressen -mfused-gek -mno-gefuseerd-madd
-mbit-uitlijnen -mno-bit-align -mstrict-uitlijnen -mno-strikt-uitlijnen -mrelocable
-mno-verplaatsbaar -mrelocable-lib -mno-verplaatsbare-lib -mtoc -mno-toc -kleine
-mlittle-endian -groot -mbig-endian -mdynamic-geen-foto -maltiefc -mswdiv
-msingle-pic-basis -mprioritize-restricted-insns=prioriteit
-msched-kostbare-dep=afhankelijkheidstype -minsert-sched-nops=schema -mcall-sysv
-mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=abi-type -msecure-plt
-mbss-plt -mblock-move-inline-limit=num - misel -mno-isel -misel=ja -misel=nee -msp
-mno-spec -mspe=ja -mspe=nee -verslechterd -mgen-cel-microcode -mwarn-cel-microcode
-mvropslaan -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ja
-mfloat-gprs=nee -mfloat-gprs=enkel -mfloat-gprs=dubbel -m prototype -mno-prototype
-msim -mmvme -gekken -mgeel mes -lid -msgegevens -msdata=opteren -mvxwerkt -G num
-pdraad -mrecipe -mrecept=opteren -mno-recept -mrecip-precisie -mno-recept-precisie
-mveclibabi= type dan: -mfriz -mno-friz -mpointers-naar-geneste-functies
-mno-pointers-naar-geneste-functies -msave-toc-indirect -mno-save-toc-indirect

RX Opties -m64bit-verdubbelt -m32bit-verdubbelt -fpu -nofpu -mcpu= -mbig-endian-gegevens
-mlittle-endian-gegevens -msmall-gegevens -msim -mno-sim -mas100-syntaxis -mno-as100-syntaxis
-montspan -mmax-constante-grootte= -mint-register= -mpid -msave-acc-in-onderbreekt

S / 390 en zSerie Opties -mtune=CPU-type -maart=CPU-type -mhard-zweven -msoft-zweven
-mhard-dfp -mno-harde-dfp -mlong-dubbel-64 -mlong-dubbel-128 -mbackchain
-mno-backchain -mpacked-stack -mno-verpakt-stack -msmall-exec -mno-klein-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-foutopsporing -mesa -mzar -mtpf-trace
-mno-tpf-trace -mfused-gek -mno-gefuseerd-madd -mwarn-framegrootte -mwarn-dynamicstack
-mstack-grootte -mstack-bewaker

Score Opties -meb -mel - mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opties -m1 -m2 -m2e -m2a-nofpu -m2a-enkelvoudig -m2a-eenpersoons -m2a -m3 -m3e
-m4-nofpu -m4-enkelvoudig -m4-single -m4 -m4a-nofpu -m4a-enkelvoudig -m4a-eenpersoons
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -muitlijnen -montspan - twijfelbaar -mfmovd -mhitachi -mrenesas
-mno-renas -mnomacsave -mieeee -mno-ieee -mbitoppen -mismaat -minline-ic_invalidate
-mpadstructuur -mruimte -prefergot -musermodus -multikosten=aantal -mdiv=strategie
-mdivsi3_libfunc=naam -mvast-bereik=register-bereik -maanpassen-afrollen
-mindexed-adressering -mgettrcost=aantal -mpt-vast -bereken-uitgaande-args
-mingeldige-symbolen -msoft-atomisch -mbranch-kosten=num -mcbranchdi -mcmpeqdi -mfused-gek
-verweer-cmove

solaris 2 Opties -mimpure-tekst -mno-onzuivere-tekst -pthreads -pdraad

SPARC Opties -mcpu=CPU-type -mtune=CPU-type -mcmodel=codemodel -geheugen-model=mem-
model -m32 -m64 -map-regs -mno-app-regs -mfaster-structuren -mno-sneller-structs
-mplat -mno-plat -mfpu -mno-fpu -mhard-zweven -msoft-zweven -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -unaligned-dubbels
-mno-niet-uitgelijnde dubbels -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU Opties -mwarn-reloc -fout-reloc -msafe-dma -munsafe-dma -mtak-hints
-mklein-mem -grote-mem -mstdmain -mvast-bereik=register-bereik -me32 -me64
-adres-ruimte-conversie -mno-adres-ruimte-conversie -mcache-grootte=cache grootte
-matomische-updates -mno-atomaire-updates

Systeem V Opties -Qy -Qn -YP,paden -Ja,dir

TEGEL-Gx Opties -mcpu=cpu -m32 -m64

TEGELPro Opties -mcpu=cpu -m32

V850 Opties -mlong-oproepen -mno-lange gesprekken -mep -mno-ep -mprolog-functie
-mno-prolog-functie -mruimte -mtda=n -msda=n -mzda=n -map-regs -mno-app-regs
-mdisable-callt -mno-uitschakelen-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mbig-schakelaar

VAX Opties - mg -mg nu -munix

VxWorks Opties -mrtp -niet-statisch -Bstatisch -Bdynamisch -Xbind-lui -Xbind-nu

x86-64 Opties Zie i386- en x86-64-opties.

Xstormy16 Opties -msim

Xtensa Opties -mconst16 -mno-const16 -mfused-gek -mno-gefuseerd-madd -mforce-geen-pic
-mserialiseren-vluchtig -mno-serialiseren-vluchtig -mtext-sectie-literals
-mno-tekst-sectie-literals -mtarget-uitlijnen -mno-target-uitlijnen -lange oproepen
-mno-longcalls

zSerie Opties Zie S/390- en zSeries-opties.

Code Generatie Opties
-fcall-opgeslagen-reg -fcall-gebruikt-reg -fvast-reg -uitzonderingen -fnon-call-uitzonderingen
-funwind-tafels -fasynchrone-afwikkel-tabellen -finhibit-maat-richtlijn
-finstrument-functies -finstrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=filet,filet, ... -fno-gemeenschappelijk -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tafels -frecord-gcc-schakelaars
-freg-struct-return -fkorte-enums -fkort-dubbel -fkort-wchar -fverbose-asm
-fpack-structuur[=n] -fstack-controle -fstack-limiet-register=reg -fstack-limiet-symbool=sym
-fno-stack-limiet -fsplitstack -fleading-onderstrepingsteken -ftls-model=model -ftrapv
-fwrapv -fbounds-controle -fzichtbaarheid -fstrict-vluchtige-bitfields

Opties Controlling de Soort of uitgang
Compilatie kan tot vier fasen omvatten: voorbewerking, eigenlijke compilatie, assemblage en
koppelen, altijd in die volgorde. GCC is in staat om meerdere
bestanden ofwel in verschillende assembler-invoerbestanden, of in één assembler-invoerbestand; dan
elk invoerbestand van de assembler produceert een objectbestand en het koppelen combineert al het object
bestanden (die nieuw zijn gecompileerd en die zijn opgegeven als invoer) in een uitvoerbaar bestand.

Voor een bepaald invoerbestand bepaalt het achtervoegsel van de bestandsnaam wat voor soort compilatie is
gedaan:

filet.c
C-broncode die moet worden voorbewerkt.

filet.i
C-broncode die niet mag worden voorbewerkt.

filet.ii
C++ broncode die niet voorbewerkt mag worden.

filet.m
Objective-C broncode. Merk op dat je moet linken met de libobjc bibliotheek om een
Objectief-C programma werk.

filet.mi
Objective-C-broncode die niet mag worden voorbewerkt.

filet.MM
filet.M
Objective-C++ broncode. Merk op dat je moet linken met de libobjc bibliotheek om te maken
een Objective-C++ programma werk. Let daar op .M verwijst naar een letterlijke hoofdletter M.

filet.miii
Objective-C++ broncode die niet voorbewerkt mag worden.

filet.h
C-, C++-, Objective-C- of Objective-C++-headerbestand dat moet worden omgezet in een voorgecompileerd
header (standaard), of C, C++ header-bestand dat moet worden omgezet in een Ada-specificatie (via de
-fdump-ada-specificatie schakelaar).

filet. Cc
filet.cp
filet.cxx
filet.cpp
filet.CPP
filet.c++
filet.C
C++-broncode die moet worden voorbewerkt. Merk op dat in .cxx, de laatste twee letters
moeten beide letterlijk zijn x. Hetzelfde, .C verwijst naar een letterlijke hoofdletter C.

filet.MM
filet.M
Objective-C++ broncode die moet worden voorbewerkt.

filet.miii
Objective-C++ broncode die niet voorbewerkt mag worden.

filet.H H
filet.H
filet.pk
filet.hxx
filet.pk
filet.HPP
filet.h++
filet.tcc
C++-headerbestand dat moet worden omgezet in een vooraf gecompileerde header of Ada-specificatie.

filet.f
filet.voor
filet.ftn
Vaste vorm Fortran-broncode die niet voorbewerkt mag worden.

filet.F
filet.VOOR
filet.fpp
filet.FPP
filet.FTN
Vaste vorm Fortran-broncode die moet worden voorbewerkt (met de traditionele
voorverwerker).

filet.f90
filet.f95
filet.f03
filet.f08
Vrije Fortran-broncode die niet voorbewerkt mag worden.

filet.F90
filet.F95
filet.F03
filet.F08
Vrije vorm Fortran-broncode die moet worden voorbewerkt (met de traditionele
voorverwerker).

filet.Gaan
Ga broncode.

filet.advertenties
Ada-broncodebestand dat een declaratie van een bibliotheekeenheid bevat (een declaratie van a
pakket, subprogramma of generiek, of een generieke instantie), of een bibliotheekeenheid
hernoemingsdeclaratie (een pakket-, generieke of subprogramma hernoemingsdeclaratie). Zo een
bestanden worden ook wel bril.

filet.adb
Ada-broncodebestand met de body van een bibliotheekeenheid (een subprogramma of pakketbody).
Dergelijke bestanden worden ook wel lichamen.

filet.s
Montagecode.

filet.S
filet.sx
Assemblercode die moet worden voorbewerkt.

anders
Een objectbestand dat direct in het linken moet worden ingevoerd. Elke bestandsnaam zonder herkend
achtervoegsel wordt op deze manier behandeld.

U kunt de invoertaal expliciet specificeren met de -x optie:

-x taal
Specificeer expliciet de taal voor de volgende invoerbestanden (in plaats van de
compiler een standaard kiezen op basis van het achtervoegsel van de bestandsnaam). Deze optie geldt voor iedereen
volgende invoerbestanden tot de volgende -x optie. Mogelijke waarden voor taal zijn:

c c-header cpp-uitvoer
c++ c++-header c++-cpp-uitvoer
doelstelling-c doelstelling-c-header doelstelling-c-cpp-output
objectieve-c++ objectieve-c++-header objectieve-c++-cpp-output
assembler assembler-met-cpp
ada
f77 f77-cpp-invoer f95 f95-cpp-invoer
go
Java

-x geen
Schakel elke specificatie van een taal uit, zodat volgende bestanden worden afgehandeld
volgens de achtervoegsels van hun bestandsnaam (zoals ze zijn als -x helemaal niet gebruikt).

-pass-exit-codes
Normaal gesproken gcc programma zal afsluiten met de code van 1 als een willekeurige fase van de compiler
retourneert een niet-succesvolle retourcode. Als u opgeeft -pass-exit-codes gcc programma
zal in plaats daarvan terugkeren met de numeriek hoogste fout die is geproduceerd door elke fase die is geretourneerd
een foutindicatie. De frontends C, C++ en Fortran retourneren 4, indien een internal
Er is een compilerfout opgetreden.

Als u slechts enkele van de compilatiestadia wilt, kunt u gebruik maken van -x (of bestandsnaam achtervoegsels)
vertellen gcc waar te beginnen, en een van de opties -c, -Sof -E om te zeggen waar gcc is
stop. Merk op dat sommige combinaties (bijvoorbeeld -x cpp-uitgang -E) instrueren gcc doen
helemaal niets.

-c Compileer of assembleer de bronbestanden, maar koppel niet. De koppelingsfase is gewoon:
niet klaar. De uiteindelijke uitvoer is in de vorm van een objectbestand voor elk bronbestand.

Standaard wordt de naam van het objectbestand voor een bronbestand gemaakt door het achtervoegsel te vervangen .c,
.i, .s, enz., met .o.

Niet-herkende invoerbestanden, waarvoor geen compilatie of montage vereist is, worden genegeerd.

-S Stop na de eigenlijke compilatiefase; niet monteren. De uitvoer is in de
vorm van een assembler-codebestand voor elk gespecificeerd niet-assembler-invoerbestand.

Standaard wordt de assembler-bestandsnaam voor een bronbestand gemaakt door het achtervoegsel te vervangen
.c, .i, enz., met .s.

Invoerbestanden die geen compilatie vereisen, worden genegeerd.

-E Stop na de voorbewerkingsfase; voer de compiler niet goed uit. De uitvoer is binnen
de vorm van voorbewerkte broncode, die naar de standaarduitvoer wordt gestuurd.

Invoerbestanden die geen voorbewerking vereisen, worden genegeerd.

-o filet
Plaats uitvoer in bestand filet. Dit geldt ongeacht wat voor soort output het ook is
wordt geproduceerd, of het nu gaat om een ​​uitvoerbaar bestand, een objectbestand, een assemblerbestand of
voorbewerkte C-code.

If -o niet is opgegeven, is de standaardinstelling om een ​​uitvoerbaar bestand in a.out, het object
bestand voor bron.achtervoegsel in bron.o, het assembler-bestand in bron.s, een voorgecompileerde
header-bestand in bron.achtervoegsel.gch, en alle voorbewerkte C-bronnen op standaarduitvoer.

-v Druk (op standaardfoutuitvoer) de opdrachten af ​​die zijn uitgevoerd om de fasen van uit te voeren
compilatie. Druk ook het versienummer af van het compiler-stuurprogramma en van de
preprocessor en de eigenlijke compiler.

-###
Like -v behalve dat de commando's niet worden uitgevoerd en argumenten worden geciteerd tenzij ze
alleen alfanumerieke tekens of "./-_" bevatten. Dit is handig voor shellscripts om:
de door de bestuurder gegenereerde opdrachtregels vastleggen.

-pijp
Gebruik pijpen in plaats van tijdelijke bestanden voor communicatie tussen de verschillende stadia van
compilatie. Dit werkt niet op sommige systemen waar de assembler niet kan lezen
uit een pijp; maar de GNU-assembler heeft geen problemen.

--help
Druk (op de standaarduitvoer) een beschrijving af van de opdrachtregelopties die worden begrepen door
gcc. Indien de -v optie is dan ook gespecificeerd --help zal ook worden doorgegeven aan de
verschillende processen aangeroepen door gcc, zodat ze de opdrachtregelopties kunnen weergeven
ze accepteren. Als de -Wextra optie is ook gespecificeerd (vóór de --help
optie), dan opdrachtregelopties waaraan geen documentatie is gekoppeld
zal ook getoond worden.

--doel-hulp
Druk (op de standaarduitvoer) een beschrijving af van doelspecifieke opdrachtregelopties
voor elk gereedschap. Voor sommige doelen kan ook extra doelspecifieke informatie zijn:
afgedrukt.

--help={klasse|[^]qualifier}[, ...]
Druk (op de standaarduitvoer) een beschrijving af van de opdrachtregelopties die worden begrepen door
de compiler die in alle opgegeven klassen en kwalificaties past. Dit zijn de
ondersteunde klassen:

optimalisatieprogramma's
Hiermee worden alle optimalisatie-opties weergegeven die door de compiler worden ondersteund.

waarschuwingen
Hierdoor worden alle opties weergegeven die waarschuwingsberichten beheren die door de
compiler.

doel
Hierdoor worden doelspecifieke opties weergegeven. In tegenstelling tot de --doel-hulp optie
doelspecifieke opties van de linker en assembler zullen dat echter niet zijn
weergegeven. Dit komt omdat die tools momenteel geen ondersteuning bieden voor het uitgebreide
--help= syntaxis.

params
Hierdoor worden de waarden weergegeven die door de worden herkend --param optie.

taal
Hierdoor worden de ondersteunde opties weergegeven taal, Waar taal is de naam
van een van de talen die in deze versie van GCC worden ondersteund.

gemeenschappelijk
Hierdoor worden de opties weergegeven die voor alle talen gelden.

Dit zijn de ondersteunde kwalificaties:

ongedocumenteerde
Geef alleen die opties weer die niet gedocumenteerd zijn.

toegetreden
Geef opties weer met een argument dat verschijnt na een gelijkteken in dezelfde
doorlopend stuk tekst, zoals: --help=doel.

apart
Geef opties weer met een argument dat als een afzonderlijk woord wordt weergegeven na de
originele optie, zoals: -o output-bestand.

Dus om bijvoorbeeld alle ongedocumenteerde doelspecifieke schakelaars weer te geven die worden ondersteund door
de compiler kan het volgende worden gebruikt:

--help=doel,ongedocumenteerd

De betekenis van een kwalificatie kan worden omgekeerd door deze vooraf te laten gaan door de ^ karakter, dus voor
voorbeeld om alle binaire waarschuwingsopties weer te geven (dwz degenen die aan of uit zijn)
en die geen argument aannemen) die een beschrijving hebben, gebruik:

--help=waarschuwingen,^toegetreden,^ongedocumenteerd

Het argument om --help= mag niet uitsluitend uit omgekeerde kwalificaties bestaan.

Het combineren van meerdere klassen is mogelijk, hoewel dit de uitvoer meestal beperkt
zo veel dat er niets te zien is. Een geval waarin het wel werkt, is wanneer
een van de lessen is doel. Dus om bijvoorbeeld al het doelspecifiek weer te geven
optimalisatie-opties kunnen de volgende worden gebruikt:

--help=doel, optimalisaties

De --help= optie kan worden herhaald op de opdrachtregel. Elk opeenvolgend gebruik zal
de gevraagde klasse van opties weergeven en de opties die er al zijn overslaan
weergegeven.

Indien de -Q optie verschijnt op de opdrachtregel voor de --help= optie, dan de
beschrijvende tekst weergegeven door --help= is gewijzigd. In plaats van de weergegeven
opties, wordt aangegeven of de optie is ingeschakeld, uitgeschakeld of ingesteld
naar een specifieke waarde (ervan uitgaande dat de compiler dit weet op het punt waar de
--help= optie wordt gebruikt).

Hier is een ingekort voorbeeld van de ARM-poort van: gcc:

% gcc -Q -mabi=2 --help=doel -c
De volgende opties zijn doelspecifiek:
-mabie= 2
-mabort-on-noreturn [uitgeschakeld]
-mapcs [uitgeschakeld]

De uitvoer is gevoelig voor de effecten van eerdere opdrachtregelopties, dus voor:
het is bijvoorbeeld mogelijk om erachter te komen welke optimalisaties zijn ingeschakeld op -O2 door het gebruiken van:

-Q -O2 --help=optimalisaties

Als alternatief kunt u ontdekken welke binaire optimalisaties zijn ingeschakeld door: -O3 door het gebruiken van:

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep ingeschakeld

-geen-canonieke-voorvoegsels
Breid geen symbolische links uit, los verwijzingen op naar: /../ or /./, of maak het pad
absoluut bij het genereren van een relatief voorvoegsel.

--versie
Geef het versienummer en de copyrights van de ingeroepen GCC weer.

-wikkel
Roep alle subcommando's op onder een wrapper-programma. De naam van het wrapper-programma en
de parameters worden doorgegeven als een door komma's gescheiden lijst.

gcc -c tc -wrapper gdb,--args

Hiermee worden alle subprogramma's van gcc voor gdb --argumenten, dus de aanroeping van cc1
zal zijn gdb --argumenten cc1 ....

-fplugin=naam.zo
Laad de plug-incode in bestand naam.so, verondersteld een gedeeld object te zijn om door te dlopen'
de compiler. De basisnaam van het gedeelde objectbestand wordt gebruikt om de plug-in te identificeren
voor het ontleden van argumenten (Zie -fplugin-arg-naam-sleutel=waarde onderstaand). Elk
plugin moet de callback-functies definiëren die zijn gespecificeerd in de Plugins-API.

-fplugin-arg-naam-sleutel=waarde
Definieer een argument genaamd sleutel met een waarde van waarde voor de plug-in genaamd naam.

-fdump-ada-specificatie[-slank]
Genereer voor C- en C++ source- en include-bestanden de bijbehorende Ada-specificaties.

-fdump-go-spec=filet
Voor invoerbestanden in elke taal, genereer overeenkomstige Go-declaraties in filet. Deze
genereert Go "const", "type", "var" en "func" declaraties die een handige manier kunnen zijn
om te beginnen met het schrijven van een Go-interface naar code die in een andere taal is geschreven.

@filet
Lees opdrachtregelopties van filet. De gelezen opties worden ingevoegd in plaats van de
origineel @filet optie. Indien filet niet bestaat, of niet kan worden gelezen, dan is de optie
wordt letterlijk behandeld en niet verwijderd.

opties in filet worden gescheiden door witruimte. Een witruimteteken kan worden opgenomen
in een optie door de hele optie tussen enkele of dubbele aanhalingstekens te plaatsen. Ieder
teken (inclusief een backslash) kan worden toegevoegd door het teken voor te zetten dat moet worden
inclusief backslash. De filet kan zelf extra @ bevattenfilet opties; ieder
dergelijke opties worden recursief verwerkt.

Het compileren C + + Programma's
C++-bronbestanden gebruiken gewoonlijk een van de achtervoegsels .C, . Cc, .cpp, .CPP, .c++, .cpof
.cxx; C++-headerbestanden gebruiken vaak .H H, .pk, .H, of (voor gedeelde sjablooncode) .tccund
voorverwerkte C++-bestanden gebruiken het achtervoegsel .ii. GCC herkent bestanden met deze namen en
compileert ze als C++-programma's, zelfs als je de compiler op dezelfde manier aanroept als voor compileren
C-programma's (meestal met de naam gcc).

Het gebruik van gcc voegt de C++-bibliotheek niet toe. g ++ is een programma dat GCC aanroept en
behandelt .c, .h en .i -bestanden als C++-bronbestanden in plaats van C-bronbestanden, tenzij -x is
gebruikt en specificeert automatisch de koppeling met de C++-bibliotheek. Dit programma is ook
handig bij het precompileren van een C-headerbestand met een .h extensie voor gebruik in C++-compilaties.
Op veel systemen g ++ is ook geïnstalleerd met de naam C ++.

Wanneer u C++-programma's compileert, kunt u veel van dezelfde opdrachtregelopties opgeven die:
u gebruikt voor het compileren van programma's in elke taal; of opdrachtregelopties die zinvol zijn voor C
en verwante talen; of opties die alleen zinvol zijn voor C++-programma's.

Opties Controlling C tongval
De volgende opties bepalen het dialect van C (of talen afgeleid van C, zoals C++,
Objective-C en Objective-C++) die de compiler accepteert:

-ansi
In C-modus is dit gelijk aan -standaard=c90. In C++-modus is het equivalent aan
-standaard=c++98.

Dit schakelt bepaalde functies van GCC uit die niet compatibel zijn met ISO C90 (wanneer
compileren van C-code), of van standaard C++ (bij het compileren van C++-code), zoals de "asm" en
"typeof" trefwoorden en vooraf gedefinieerde macro's zoals "unix" en "vax" die de
type systeem dat u gebruikt. Het maakt ook de ongewenste en zelden gebruikte ISO
trigraaf functie. Voor de C-compiler schakelt het de herkenning van de C++-stijl uit //
opmerkingen en het trefwoord "inline".

De alternatieve trefwoorden "__asm__", "__extension__", "__inline__" en "__typeof__"
blijven werken ondanks -ansi. Je zou ze niet willen gebruiken in een ISO C-programma,
natuurlijk, maar het is handig om ze in header-bestanden te plaatsen die mogelijk zijn opgenomen in
compilaties gedaan met -ansi. Alternatieve vooraf gedefinieerde macro's zoals "__unix__" en
"__vax__" zijn ook beschikbaar, met of zonder -ansi.

De -ansi optie zorgt er niet voor dat niet-ISO-programma's gratis worden afgewezen. Voor
dat -pedant is vereist in aanvulling op: -ansi.

De macro "__STRICT_ANSI__" is vooraf gedefinieerd wanneer de -ansi optie wordt gebruikt. een koptekst
bestanden kunnen deze macro opmerken en afzien van het declareren van bepaalde functies of definiëren
bepaalde macro's waar de ISO-norm niet om vraagt; dit is om interferentie te voorkomen
met alle programma's die deze namen voor andere dingen zouden kunnen gebruiken.

Functies die normaal gesproken zijn ingebouwd, maar waarvan de semantiek niet is gedefinieerd door ISO C
(zoals "alloca" en "ffs") zijn geen ingebouwde functies wanneer -ansi is gebruikt.

-standaard=
Bepaal de taalstandaard. Deze optie wordt momenteel alleen ondersteund wanneer:
het compileren van C of C++.

De compiler kan verschillende basisstandaarden accepteren, zoals: c90 or c++98, en GNU-dialecten
van die normen, zoals: gnu90 or gnu++98. Door een basisstandaard op te geven, kan de
compiler accepteert alle programma's die die standaard volgen en programma's die GNU gebruiken
extensies die er niet mee in tegenspraak zijn. Bijvoorbeeld, -standaard=c90 schakelt bepaalde uit
kenmerken van GCC die niet compatibel zijn met ISO C90, zoals de "asm" en "typeof"
trefwoorden, maar geen andere GNU-extensies die geen betekenis hebben in ISO C90, zoals
het weglaten van de middelste term van een "?:" uitdrukking. Aan de andere kant, door een GNU op te geven
dialect van een standaard, alle functies die door de compiler worden ondersteund, zijn ingeschakeld, zelfs als die
functies veranderen de betekenis van de basisstandaard en sommige strikt conforme programma's
kan worden afgewezen. De specifieke standaard wordt gebruikt door -pedant om te identificeren welke
functies zijn GNU-extensies gezien die versie van de standaard. Bijvoorbeeld -standaard=gnu90
-pedant zou waarschuwen voor C++-stijl // opmerkingen, terwijl -standaard=gnu99 -pedant zou
niet.

Er moet een waarde voor deze optie worden opgegeven; mogelijke waarden zijn

c90
c89
iso9899:1990
Ondersteuning van alle ISO C90-programma's (bepaalde GNU-extensies die in strijd zijn met ISO C90
zijn uitgeschakeld). Hetzelfde als -ansi voor C-code.

iso9899:199409
ISO C90 zoals gewijzigd in amendement 1.

c99
c9x
iso9899:1999
iso9899:199x
ISOC99. Merk op dat deze standaard nog niet volledig wordt ondersteund; zien
<http://gcc.gnu.org/gcc-4.7/c99status.html> voor meer informatie. De namen c9x
en iso9899:199x zijn afgekeurd.

c11
c1x
iso9899:2011
ISO C11, de herziening van de ISO C-norm uit 2011. Ondersteuning is onvolledig en
experimenteel. De naam c1x is verouderd.

gnu90
gnu89
GNU-dialect van ISO C90 (inclusief enkele C99-functies). Dit is de standaard voor C
code.

gnu99
gnu9x
GNU-dialect van ISO C99. Wanneer ISO C99 volledig is geïmplementeerd in GCC, zal dit:
de standaard worden. De naam gnu9x is verouderd.

gnu11
gnu1x
GNU-dialect van ISO C11. De ondersteuning is onvolledig en experimenteel. De naam gnu1x
is verouderd.

c++98
De ISO C++-norm uit 1998 plus amendementen. Hetzelfde als -ansi voor C++-code.

gnu++98
GNU-dialect van -standaard=c++98. Dit is de standaard voor C++-code.

c++11
De 2011 ISO C++ norm plus amendementen. Ondersteuning voor C++11 is nog steeds
experimenteel en kan in toekomstige releases op incompatibele manieren veranderen.

gnu++11
GNU-dialect van -standaard=c++11. Ondersteuning voor C++11 is nog experimenteel en kan veranderen
op incompatibele manieren in toekomstige releases.

-fgnu89-inline
De optie -fgnu89-inline vertelt GCC om de traditionele GNU-semantiek te gebruiken voor "inline"
functioneert in de C99-modus.
Deze optie wordt geaccepteerd en genegeerd door GCC-versies 4.1.3 tot, maar niet inclusief
4.3. In GCC-versies 4.3 en later verandert het het gedrag van GCC in C99-modus. Gebruik makend van
deze optie komt ongeveer overeen met het toevoegen van het functieattribuut "gnu_inline" aan all
inline-functies.

De optie -fno-gnu89-inline vertelt GCC expliciet om de C99-semantiek te gebruiken voor:
"inline" in C99- of gnu99-modus (dwz het specificeert het standaardgedrag). Dit
optie werd voor het eerst ondersteund in GCC 4.3. Deze optie wordt niet ondersteund in -standaard=c90 or
-standaard=gnu90 modus.

De preprocessor-macro's "__GNUC_GNU_INLINE__" en "__GNUC_STDC_INLINE__" kunnen worden gebruikt
om te controleren welke semantiek van kracht is voor "inline"-functies.

-aux-info bestandsnaam
Uitvoer naar de opgegeven bestandsnaam prototype-declaraties voor alle gedeclareerde functies en/of
gedefinieerd in een vertaaleenheid, inclusief die in headerbestanden. Deze optie is
stilzwijgend genegeerd in een andere taal dan C.

Naast aangiften geeft het bestand in opmerkingen de herkomst van elke aangifte aan
(bronbestand en regel), of de declaratie impliciet, prototyped of . was
niet-geprototypeerd (I, N voor nieuwe of O voor oud, respectievelijk in het eerste teken na
het regelnummer en de dubbele punt), en of het afkomstig is van een aangifte of een definitie
(C or F, respectievelijk in het volgende teken). In het geval van functie:
definities, een K&R-stijl lijst van argumenten gevolgd door hun verklaringen is ook
verstrekt, inside comments, na de verklaring.

-fallow-parameterloze-variadic-functies
Accepteer variadische functies zonder benoemde parameters.

Hoewel het mogelijk is om zo'n functie te definiëren, is dit niet erg handig omdat het is
niet mogelijk om de argumenten te lezen. Dit wordt alleen ondersteund voor C omdat dit construct is
toegestaan ​​door C++.

-fno-asm
Herken "asm", "inline" of "typeof" niet als trefwoord, zodat code deze kan gebruiken
woorden als identificatie. U kunt de trefwoorden "__asm__", "__inline__" en
"__typeof__" in plaats daarvan. -ansi impliceert -fno-asm.

In C++ heeft deze schakelaar alleen invloed op het trefwoord "typeof", aangezien "asm" en "inline" dit zijn
standaard trefwoorden. Misschien wilt u de -fno-gnu-trefwoorden vlag in plaats daarvan, die heeft
hetzelfde effekt. In C99-modus (-standaard=c99 or -standaard=gnu99), heeft deze schakelaar alleen invloed op de
"asm" en "typeof" trefwoorden, aangezien "inline" een standaard trefwoord is in ISO C99.

-fno-ingebouwd
-fno-ingebouwd-functie
Herken geen ingebouwde functies die niet beginnen met __ingebouwd_ als voorvoegsel.

GCC genereert normaal gesproken speciale code om bepaalde ingebouwde functies meer af te handelen
efficiënt; aanroepen naar "alloca" kunnen bijvoorbeeld enkele instructies worden die:
pas de stapel direct aan, en oproepen naar "memcpy" kunnen inline kopieerlussen worden. De
resulterende code is vaak zowel kleiner als sneller, maar aangezien de functie no . aanroept
langer als zodanig verschijnen, kunt u geen onderbrekingspunt instellen voor die oproepen, noch kunt u deze wijzigen
het gedrag van de functies door te koppelen met een andere bibliotheek. Bovendien, wanneer?
een functie wordt herkend als een ingebouwde functie, GCC kan daar informatie over gebruiken
functie om te waarschuwen voor problemen met aanroepen naar die functie, of om meer te genereren
efficiënte code, zelfs als de resulterende code nog steeds aanroepen naar die functie bevat. Voor
waarschuwingen worden bijvoorbeeld gegeven met -Wformaat voor slechte oproepen naar "printf", wanneer "printf" is
ingebouwd, en het is bekend dat "strlen" het globale geheugen niet wijzigt.

Met de -fno-ingebouwd-functie optie alleen de ingebouwde functie functie is uitgeschakeld.
functie mag niet beginnen met __ingebouwd_. Als een functie wordt genoemd die niet is ingebouwd
in deze versie van GCC wordt deze optie genegeerd. Er is geen corresponderend
-fingebouwd-functie optie; als u de ingebouwde functies selectief wilt inschakelen wanneer:
gebruik -fno-ingebouwd or -vrijstaand, kunt u macro's definiëren zoals:

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

-gehost
Beweren dat de compilatie plaatsvindt in een gehoste omgeving. Dit houdt in -fingebouwd.
Een gehoste omgeving is een omgeving waarin de volledige standaardbibliotheek beschikbaar is en waarin
welke "main" een retourtype "int" heeft. Voorbeelden zijn bijna alles behalve a
kern. Dit is gelijk aan -fno-vrijstaand.

-vrijstaand
Beweren dat de compilatie plaatsvindt in een vrijstaande omgeving. Dit houdt in
-fno-ingebouwd. Een vrijstaande omgeving is er een waarin de standaardbibliotheek dat niet mag
bestaan, en het opstarten van het programma hoeft niet noodzakelijkerwijs op "hoofd" te zijn. Het meest voor de hand liggende voorbeeld
is een OS-kernel. Dit is gelijk aan -fno-gehost.

-fopenmp
Schakel de verwerking van OpenMP-richtlijnen "#pragma omp" in C/C++ en "!$omp" in Fortran in.
. -fopenmp is opgegeven, genereert de compiler parallelle code volgens de
OpenMP-toepassingsprogramma-interface v3.0http://www.openmp.org/>. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad.

-fgnu-tm
Wanneer de optie -fgnu-tm is opgegeven, genereert de compiler code voor de Linux
variant van Intel's huidige Transactional Memory ABI-specificatiedocument (Revision
1.1, 6 mei 2009). Dit is een experimentele functie waarvan de interface kan veranderen in
toekomstige versies van GCC, als de officiële specificatie verandert. Houd er rekening mee dat niet
alle architecturen worden ondersteund voor deze functie.

Voor meer informatie over de ondersteuning van GCC voor transactiegeheugen,

Houd er rekening mee dat de transactiegeheugenfunctie niet wordt ondersteund met uitzonderingen voor niet-oproepen
(-fnon-call-uitzonderingen).

-fms-extensies
Accepteer enkele niet-standaard constructies die worden gebruikt in Microsoft-headerbestanden.

In C++-code kunnen hierdoor namen van leden in structuren vergelijkbaar zijn met eerdere typen
verklaringen.

typedef int UOW;
structuur ABC {
UOW UOW;
};

Sommige gevallen van naamloze velden in structuren en vakbonden worden alleen hiermee geaccepteerd
optie.

-fplan9-extensies
Accepteer enkele niet-standaard constructies die worden gebruikt in de code van Plan 9.

Dit maakt het mogelijk -fms-extensies, staat het doorgeven van verwijzingen naar structuren toe met anoniem
velden naar functies die verwijzingen verwachten naar elementen van het type veld, en
vergunningen die verwijzen naar anonieme velden die zijn gedeclareerd met een typedef. Dit is alleen
ondersteund voor C, niet voor C++.

-trigrafieën
Ondersteuning ISO C trigraphs. De -ansi optie (en -soa opties voor strikte ISO C
conformiteit) impliceert: -trigrafieën.

-geen-geïntegreerde-cpp
Voert een compilatie uit in twee stappen: voorbewerken en compileren. Deze optie staat toe
een gebruiker heeft "cc1", "cc1plus" of "cc1obj" opgegeven via de -B keuze. De gebruiker heeft geleverd
compilatiestap kan dan een extra voorverwerkingsstap toevoegen na normaal
preprocessing maar vóór het compileren. Standaard wordt de geïntegreerde cpp gebruikt
(interne cpp)

De semantiek van deze optie verandert als "cc1", "cc1plus" en "cc1obj" worden samengevoegd.

- traditioneel
-traditionele-cpp
Voorheen zorgden deze opties ervoor dat GCC probeerde een pre-standaard C-compiler te emuleren.
Ze worden nu alleen ondersteund met de -E schakelaar. De preprocessor blijft ondersteunen
een pre-standaard modus. Zie de GNU CPP-handleiding voor details.

-fcond-mismatch
Sta voorwaardelijke expressies met niet-overeenkomende typen toe in het tweede en derde argument.
De waarde van een dergelijke uitdrukking is ongeldig. Deze optie wordt niet ondersteund voor C++.

-vlas-vector-conversies
Sta impliciete conversies toe tussen vectoren met verschillende aantallen elementen en/of
incompatibele elementtypen. Deze optie mag niet worden gebruikt voor nieuwe code.

-funsigned-char
Laat het type "char" unsigned zijn, zoals "unsigned char".

Elk soort machine heeft een standaard voor wat "char" zou moeten zijn. Het is ofwel zoals
"unsigned char" standaard of zoals "signed char" standaard.

Idealiter zou een draagbaar programma altijd "signed char" of "unsigned char" moeten gebruiken wanneer het
hangt af van de signatuur van een object. Maar er zijn veel programma's geschreven om te gebruiken
gewoon "char" en verwacht dat het is ondertekend, of verwacht dat het niet is ondertekend, afhankelijk van de
machines waarvoor ze zijn geschreven. Met deze optie, en zijn inverse, kun je zo'n
programma werkt met de tegenovergestelde standaard.

Het type "char" is altijd een ander type van elk van "signed char" of "unsigned
char", hoewel zijn gedrag altijd hetzelfde is als een van die twee.

-fsigned-char
Laat het type "char" ondertekend zijn, zoals "signed char".

Merk op dat dit gelijk is aan -fno-unsigned-char, wat de negatieve vorm is van
-funsigned-char. Evenzo is de optie -fno-ondertekend-char is gelijk aan
-funsigned-char.

-fsigned-bitvelden
-funsigned-bitvelden
-fno-ondertekende bitvelden
-fno-niet-ondertekende-bitvelden
Deze opties bepalen of een bitveld is ondertekend of niet ondertekend, wanneer de verklaring
gebruikt geen "ondertekend" of "niet ondertekend". Standaard is zo'n bitveld ondertekend,
omdat dit consistent is: de basistypes voor gehele getallen zoals "int" zijn ondertekende typen.

Opties Controlling C + + tongval
In dit gedeelte worden de opdrachtregelopties beschreven die alleen zinvol zijn voor C++-programma's;
maar u kunt ook de meeste GNU-compileropties gebruiken, ongeacht uw taal
programma is in. U kunt bijvoorbeeld een bestand "firstClass.C" als volgt compileren:

g++ -g -frepo -O -c eerste Klasse.C

In dit voorbeeld alleen -frepo is een optie die alleen bedoeld is voor C++-programma's; je kunt de gebruiken
andere opties met elke taal die door GCC wordt ondersteund.

Hier is een lijst met opties die zijn: Slechts voor het compileren van C++-programma's:

-fabi-versie=n
Gebruik versie n van de C++ ABI. Versie 2 is de eerste versie van de C++ ABI
verscheen in G++ 3.4. Versie 1 is de versie van de C++ ABI die voor het eerst verscheen in
G++ 3.2. Versie 0 zal altijd de versie zijn die het meest overeenkomt met C++
ABI-specificatie. Daarom zal de ABI verkregen met versie 0 veranderen als ABI
bugs zijn opgelost.

Standaard is versie 2.

Versie 3 corrigeert een fout bij het mangelen van een constant adres als een sjabloonargument.

Versie 4, die voor het eerst verscheen in G++ 4.5, implementeert een standaard mangeling voor vector
types.

Versie 5, die voor het eerst verscheen in G++ 4.6, corrigeert het mangelen van attributen
const/volatile op functieaanwijzertypes, decltype van een gewone decl en gebruik van a
functieparameter in de declaratie van een andere parameter.

Versie 6, die voor het eerst verscheen in G++ 4.7, corrigeert het promotiegedrag van C++11
scoped opsommingen en het mangelen van template argument packs, const/static_cast, prefix ++
en --, en een functie voor het bereik van de klasse die als sjabloonargument wordt gebruikt.

Zie ook -Wabi.

-fno-toegangscontrole
Schakel alle toegangscontrole uit. Deze schakelaar is vooral handig voor het omzeilen van bugs in
de toegangscontrolecode.

-fcheck-nieuw
Controleer of de aanwijzer die wordt geretourneerd door "operator nieuw" niet-null is voordat u probeert om:
de toegewezen opslagruimte wijzigen. Deze controle is normaal gesproken niet nodig omdat de C++
standaard specificeert dat "operator nieuw" alleen 0 retourneert als het is gedeclareerd gooien(),
in dat geval zal de compiler altijd de geretourneerde waarde controleren, zelfs zonder dit
keuze. In alle andere gevallen, wanneer "operator nieuw" een niet-lege uitzondering heeft
specificatie, wordt geheugenuitputting gesignaleerd door "std::bad_alloc" te gooien. Zie ook
nieuwe (noord).

-fbehoud-ruimte
Plaats niet-geïnitialiseerde of runtime-geïnitialiseerde globale variabelen in het gemeenschappelijke segment, zoals
C wel. Dit bespaart ruimte in het uitvoerbare bestand ten koste van het niet diagnosticeren van duplicaat
definities. Als u met deze vlag compileert en uw programma op mysterieuze wijze crasht
nadat "main()" is voltooid, hebt u mogelijk een object dat twee keer wordt vernietigd
omdat twee definities zijn samengevoegd.

Deze optie is niet langer bruikbaar op de meeste doelen, nu er ondersteuning voor is toegevoegd
variabelen in BSS zetten zonder ze gemeenschappelijk te maken.

-fconstexpr-diepte=n
Stel de maximale geneste evaluatiediepte voor C++11 constexpr-functies in op n. Een limiet
is nodig om eindeloze recursie te detecteren tijdens constante expressie-evaluatie. De
minimum gespecificeerd door de norm is 512.

-fduceer-init-lijst
Afleiding van een sjabloontypeparameter inschakelen als std::initializer_list van een accolade-
bijgevoegde initialisatielijst, d.w.z

sjabloon auto forward(T t) -> decltype (realfn (t))
{
retourneer realfn (t);
}

ongeldig f()
{
vooruit({1,2}); // doorschakelen >
}

Deze aftrek werd geïmplementeerd als een mogelijke uitbreiding van de oorspronkelijk voorgestelde
semantiek voor de C++11-standaard, maar maakte geen deel uit van de uiteindelijke standaard, dus dat is het wel
standaard uitgeschakeld. Deze optie is verouderd en kan in de toekomst worden verwijderd
versie van G++.

-ffriend-injectie
Injecteer vriendenfuncties in de omsluitende naamruimte, zodat ze buiten zichtbaar zijn
het bereik van de klasse waarin ze zijn gedeclareerd. Vriendenfuncties werden gedocumenteerd
om op deze manier te werken in de oude Annotated C++ Reference Manual, en eerdere versies van G++
4.1 heeft altijd zo gewerkt. Echter, in ISO C++ een vriendfunctie die dat niet is
gedeclareerd in een omsluitende scope kan alleen worden gevonden met behulp van argumentafhankelijke opzoeking.
Deze optie zorgt ervoor dat vrienden worden geïnjecteerd zoals ze waren in eerdere releases.

Deze optie is voor compatibiliteit en kan in een toekomstige versie van G++ worden verwijderd.

-fno-elide-constructeurs
De C++-standaard staat een implementatie toe om het maken van een tijdelijke die alleen is
gebruikt om een ​​ander object van hetzelfde type te initialiseren. Door deze optie op te geven, wordt uitgeschakeld
die optimalisatie, en dwingt G++ om in alle gevallen de copy-constructor aan te roepen.

-fno-enforce-eh-specificaties
Genereer geen code om tijdens runtime te controleren op schending van uitzonderingsspecificaties.
Deze optie schendt de C++-standaard, maar kan handig zijn om de codegrootte in
productie-builds, net zoals definiëren NDEBUG. Dit geeft geen gebruikerscode toestemming
om uitzonderingen te genereren die in strijd zijn met de uitzonderingsspecificaties; de compiler zal
nog steeds optimaliseren op basis van de specificaties, dus het gooien van een onverwachte uitzondering zal
leiden tot ongedefinieerd gedrag.

-ffor-bereik
-fno-voor-scope
If -ffor-bereik is opgegeven, het bereik van variabelen gedeclareerd in a for-init-verklaring
is beperkt tot de For loop zelf, zoals gespecificeerd door de C++-standaard. Indien
-fno-voor-scope is opgegeven, het bereik van variabelen gedeclareerd in a for-init-verklaring
strekt zich uit tot het einde van het omsluitende bereik, zoals het geval was in oude versies van G++, en
andere (traditionele) implementaties van C++.

De standaard als geen van beide vlaggen wordt gegeven om de standaard te volgen, maar om toe te staan ​​en een te geven
waarschuwing voor code in oude stijl die anders ongeldig zou zijn of anders zou zijn
gedrag.

-fno-gnu-trefwoorden
Herken "typeof" niet als een trefwoord, zodat de code dit woord als een kan gebruiken
identificatie. U kunt in plaats daarvan het trefwoord "__typeof__" gebruiken. -ansi impliceert
-fno-gnu-trefwoorden.

-fno-impliciete-sjablonen
Zend nooit code uit voor niet-inline sjablonen die impliciet zijn geïnstantieerd (bijv
gebruik maken van); zend alleen code uit voor expliciete instantiaties.

-fno-impliciete-inline-sjablonen
Zend ook geen code uit voor impliciete instantiaties van inline-sjablonen. De standaard
is om inlines anders te behandelen, zodat compileren met en zonder optimalisatie zal
hebben dezelfde set expliciete instantiaties nodig.

-fno-implementeren-inlines
Stuur om ruimte te besparen geen out-of-line kopieën van inline functies die worden bestuurd door
#pragma uitvoering. Dit veroorzaakt linkerfouten als deze functies dat niet zijn
inline overal waar ze worden genoemd.

-fms-extensies
Schakel belerende waarschuwingen uit over constructies die in MFC worden gebruikt, zoals impliciete int en
een verwijzing naar de lidfunctie krijgen via niet-standaard syntaxis.

-fno-nonansi-ingebouwd
Schakel ingebouwde declaraties van functies uit die niet verplicht zijn door ANSI/ISO C. Deze:
omvatten "ffs", "alloca", "_exit", "index", "bzero", "conjf", en andere gerelateerde
functies.

-fnothrow-opt
Behandel een "throw()"-uitzonderingsspecificatie alsof het een "noexcept"-specificatie is
om de overhead van de tekstgrootte ten opzichte van een functie zonder uitzondering te verminderen of te elimineren
specificatie. Als de functie lokale variabelen heeft van typen met niet-triviaal
destructors, zal de uitzonderingsspecificatie de functie daadwerkelijk kleiner maken
omdat de EH-opruimingen voor die variabelen weg kunnen worden geoptimaliseerd. De semantiek
effect is dat een uitzondering met een dergelijke uitzondering uit een functie wordt gegooid
specificatie zal resulteren in een oproep om "beëindigen" in plaats van "onverwacht".

-fno-operatornamen
Behandel de operatornaam trefwoorden "and", "bitand", "bitor", "compl", "not", "or" niet
en "xor" als synoniemen als trefwoorden.

-fno-optionele-diags
Schakel diagnostiek uit waarvan de standaard zegt dat een compiler deze niet hoeft uit te geven.
Momenteel is de enige diagnose die door G++ wordt uitgegeven, die voor een naam met:
meerdere betekenissen binnen een klasse.

-fpermissief
Downgrade sommige diagnostische gegevens over niet-conforme code van fouten naar waarschuwingen. Dus,
gebruik -fpermissief zal toestaan ​​dat een aantal niet-conforme code wordt gecompileerd.

-fno-mooie-sjablonen
Wanneer een foutmelding verwijst naar een specialisatie van een functiesjabloon, zal de compiler
zal normaal gesproken de handtekening van de sjabloon afdrukken, gevolgd door de sjabloonargumenten
en eventuele typedefs of typenames in de handtekening (bijv. "void f(T) [met T = int]" in plaats
dan "void f(int)") zodat het duidelijk is om welk sjabloon het gaat. Wanneer een fout
bericht verwijst naar een specialisatie van een klassensjabloon, zal de compiler deze weglaten
sjabloonargumenten die overeenkomen met de standaardsjabloonargumenten voor die sjabloon. Indien
een van deze gedragingen maakt het moeilijker om de foutmelding te begrijpen dan:
gemakkelijker, gebruiken -fno-mooie-sjablonen zal ze uitschakelen.

-frepo
Schakel automatische sjablooninstantiatie in op het moment van de koppeling. Deze optie houdt ook in:
-fno-impliciete-sjablonen.

-fno-rtti
Schakel het genereren van informatie over elke klasse uit met virtuele functies voor gebruik door
de kenmerken van het type C++ runtime-identificatie (dynamische_cast en typeid). Als je dat niet doet
gebruik die delen van de taal, u kunt wat ruimte besparen door deze vlag te gebruiken. Opmerking
dat het afhandelen van uitzonderingen dezelfde informatie gebruikt, maar deze naar behoefte zal genereren.
De dynamische_cast operator kan nog steeds worden gebruikt voor casts die geen runtime vereisen
type-informatie, dwz cast naar "void *" of naar ondubbelzinnige basisklassen.

-statistieken
Verzend statistieken over front-end verwerking aan het einde van de compilatie. Dit
informatie is over het algemeen alleen nuttig voor het G++-ontwikkelteam.

-fstrict-opsommingen
Sta de compiler toe om te optimaliseren met behulp van de veronderstelling dat een waarde van het opgesomde type
kan slechts een van de waarden van de opsomming zijn (zoals gedefinieerd in de C++-standaard;
eigenlijk een waarde die kan worden weergegeven in het minimum aantal bits dat nodig is om
vertegenwoordigen alle tellers). Deze veronderstelling is mogelijk niet geldig als het programma
een cast om een ​​willekeurig geheel getal om te zetten in het opgesomde type.

-ftemplate-diepte=n
Stel de maximale instantiatiediepte voor sjabloonklassen in op n. Een limiet op de
sjabloon-instantiatiediepte is nodig om eindeloze recursies tijdens sjabloon te detecteren
klasse instantiatie. ANSI/ISO C++-conforme programma's mogen niet afhankelijk zijn van een maximum
diepte groter dan 17 (veranderd in 1024 in C++11). De standaardwaarde is 900, aangezien de
compiler kan in sommige situaties onvoldoende stackruimte hebben voordat hij 1024 bereikt.

-fno-threadsafe-statica
Zend niet de extra code uit om de routines te gebruiken die zijn gespecificeerd in de C++ ABI voor thread-
veilige initialisatie van lokale statica. U kunt deze optie gebruiken om de codegrootte te verkleinen
enigszins in code die niet thread-safe hoeft te zijn.

-zekering-cxa-atexit
Registreer destructors voor objecten met een statische opslagduur met de "__cxa_atexit"
functie in plaats van de "atexit" -functie. Deze optie is vereist voor volledig
standaarden-conforme behandeling van statische destructors, maar werkt alleen als uw C
bibliotheek ondersteunt "__cxa_atexit".

-fno-gebruik-cxa-get-exception-ptr
Gebruik niet de runtime-routine "__cxa_get_exception_ptr". Dit zal veroorzaken
"std::uncaught_exception" is onjuist, maar is noodzakelijk als de runtime-routine is
niet beschikbaar.

-zichtbaarheid-inlijnen-verborgen
Deze schakelaar verklaart dat de gebruiker niet probeert om pointers te vergelijken met inline
functies of methoden waarbij de adressen van de twee functies verschillend werden gebruikt
gedeelde objecten.

Het effect hiervan is dat GCC inline-methoden effectief kan markeren met:
"__attribute__ ((zichtbaarheid ("verborgen")))" zodat ze niet in de export verschijnen
tabel van een DNB en vereisen geen PLT-indirectie bij gebruik binnen de DNB.
Het inschakelen van deze optie kan een dramatisch effect hebben op de laad- en linktijden van een DSO omdat het
verkleint de grootte van de dynamische exporttabel enorm wanneer de bibliotheek zwaar maakt
gebruik van sjablonen.

Het gedrag van deze schakelaar is niet helemaal hetzelfde als het markeren van de methoden als verborgen
rechtstreeks, omdat het geen invloed heeft op statische variabelen die lokaal zijn voor de functie of oorzaak
de compiler om af te leiden dat de functie in slechts één gedeeld object is gedefinieerd.

U kunt een methode markeren als een methode die expliciet zichtbaar is om het effect van de
overschakelen naar die methode. Als u bijvoorbeeld pointers wilt vergelijken met a
bepaalde inline-methode, kunt u deze markeren als standaard zichtbaarheid. Het markeren van de
het omsluiten van een klasse met expliciete zichtbaarheid heeft geen effect.

Expliciet geïnstantieerde inline-methoden worden niet beïnvloed door deze optie omdat hun koppeling
zou anders een grens van een gedeelde bibliotheek kunnen overschrijden.

-zichtbaarheid-ms-compat
Deze vlag probeert zichtbaarheidsinstellingen te gebruiken om het C++-koppelingsmodel van GCC te maken
compatibel met die van Microsoft Visual Studio.

De vlag brengt deze wijzigingen aan in het koppelingsmodel van GCC:

1. Het stelt de standaard zichtbaarheid in op "verborgen", zoals -fzichtbaarheid=verborgen.

2. Typen, maar niet hun leden, zijn standaard niet verborgen.

3. De One Definition Rule is versoepeld voor typen zonder expliciete zichtbaarheid
specificaties die zijn gedefinieerd in meer dan één verschillend gemeenschappelijk object: die
aangiften zijn toegestaan ​​als ze toegestaan ​​zouden zijn als deze optie er was
niet gebruikt.

In nieuwe code is het beter om te gebruiken -fzichtbaarheid=verborgen en exporteer die klassen die zijn
bedoeld om van buitenaf zichtbaar te zijn. Helaas is het mogelijk dat code vertrouwt,
misschien per ongeluk, op het gedrag van Visual Studio.

Een van de gevolgen van deze wijzigingen is dat statische gegevensleden van hetzelfde type
met dezelfde naam maar gedefinieerd in verschillende gedeelde objecten zal anders zijn, dus
het veranderen van de ene zal de andere niet veranderen; en dat verwijzingen naar gedefinieerde functieleden
in verschillende gedeelde objecten kunnen niet gelijk zijn. Wanneer deze vlag wordt gegeven, is het een
schending van de ODR om typen met dezelfde naam anders te definiëren.

-fno-zwak
Gebruik geen ondersteuning voor zwakke symbolen, ook niet als deze door de linker wordt geleverd. Standaard is G++
zal zwakke symbolen gebruiken als deze beschikbaar zijn. Deze optie bestaat alleen voor testen en
mag niet worden gebruikt door eindgebruikers; het zal resulteren in inferieure code en heeft geen voordelen.
Deze optie kan in een toekomstige versie van G++ worden verwijderd.

-nostdinc++
Zoek niet naar header-bestanden in de standaarddirectory's die specifiek zijn voor C++, maar doe
zoek nog steeds in de andere standaardmappen. (Deze optie wordt gebruikt bij het bouwen van de
C++ bibliotheek.)

Bovendien hebben deze opties voor optimalisatie, waarschuwing en codegeneratie alleen een betekenis
voor C++-programma's:

-fno-standaard-inline
Niet aannemen inline voor functies die zijn gedefinieerd binnen een klassebereik.
Merk op dat deze functies een koppeling hebben zoals inline-functies; ze zullen het gewoon niet doen
standaard inline zijn.

-Wabi (alleen C, Objective-C, C++ en Objective-C++)
Waarschuw wanneer G++ code genereert die waarschijnlijk niet compatibel is met de leverancier-neutrale
C++ ABI. Hoewel er is geprobeerd te waarschuwen voor al dergelijke gevallen, zijn er:
waarschijnlijk enkele gevallen waarvoor niet is gewaarschuwd, ook al genereert G++
incompatibele code. Er kunnen ook gevallen zijn waarin waarschuwingen worden afgegeven, hoewel de
gegenereerde code compatibel zal zijn.

U moet uw code herschrijven om deze waarschuwingen te vermijden als u zich zorgen maakt over de
feit dat code gegenereerd door G++ mogelijk niet binair compatibel is met code gegenereerd door
andere samenstellers.

De bekende onverenigbaarheden in -fabi-versie=2 (de standaard) omvatten:

· Een sjabloon met een niet-type sjabloonparameter van het referentietype is verminkt
verkeerd:

externe int N;
sjabloon structuur S {};
leegte n (S ) {2}

Dit is vastgelegd in -fabi-versie=3.

· SIMD-vectortypen gedeclareerd met "__attribute ((vector_size))" worden verminkt in a
niet-standaard manier die overbelasting van functies met vectoren niet toestaat
van verschillende maten.

De mangeling is veranderd in -fabi-versie=4.

De bekende onverenigbaarheden in -fabi-versie=1 omvatten:

· Onjuiste behandeling van tail-padding voor bit-velden. G++ kan proberen gegevens in te pakken
in dezelfde byte als een basisklasse. Bijvoorbeeld:

struct A { virtuele leegte f (); int f1 : 1; };
struct B: openbaar A {int f2: 1; };

In dit geval zal G++ "B::f2" in dezelfde byte plaatsen als "A::f1"; andere samenstellers
zal niet. U kunt dit probleem voorkomen door "A" expliciet op te vullen zodat de grootte
is een veelvoud van de bytegrootte op uw platform; dat veroorzaakt G++ en andere
compilers om "B" identiek op te maken.

· Onjuiste behandeling van tail-padding voor virtuele bases. G++ gebruikt geen staart
opvulling bij het aanleggen van virtuele bases. Bijvoorbeeld:

struct A { virtuele leegte f (); char cl; };
structuur B {B(); char c2; };
struct C : openbare A, openbare virtuele B {};

In dit geval zal G++ "B" niet in de staartvulling voor "A" plaatsen; ander
compilers zullen. U kunt dit probleem voorkomen door "A" expliciet op te vullen zodat its
grootte is een veelvoud van de uitlijning (virtuele basisklassen negerend); dat zal
ervoor zorgen dat G++ en andere compilers "C" identiek opmaken.

· Onjuiste behandeling van bit-velden met aangegeven breedtes groter dan die van hun
onderliggende typen, wanneer de bitvelden in een unie verschijnen. Bijvoorbeeld:

unie U { int i : 4096; };

Ervan uitgaande dat een "int" geen 4096 bits heeft, zal G++ de unie te klein maken
door het aantal bits in een "int".

· Lege klassen kunnen op onjuiste offsets worden geplaatst. Bijvoorbeeld:

structuur A {};

structuur B {
een een;
virtuele leegte f ();
};

struct C : openbaar B, openbaar A {};

G++ plaatst de "A"-basisklasse van "C" op een offset die niet gelijk is aan nul; het moet geplaatst worden
bij offset nul. G++ gelooft ten onrechte dat het gegevenslid "A" van "B" is
al op offset nul.

· Namen van sjabloonfuncties waarvan de typen "typenaam" of sjabloonsjabloon bevatten
parameters kunnen verkeerd worden verminkt.

sjabloon
void f(typenaam Q::X) {}

sjabloon klasse Q>
void f(typenaam Q ::X) {}

Instantiaties van deze sjablonen kunnen onjuist zijn verminkt.

Het waarschuwt ook psABI-gerelateerde veranderingen. De bekende psABI-veranderingen op dit moment zijn onder meer:

· Voor SYSV/x86-64, bij het passeren van union met long double, wordt dit gewijzigd in pass in
geheugen zoals gespecificeerd in psABI. Bijvoorbeeld:

vakbond U {
lange dubbele ld;
int i;
};

"union U" zal altijd in het geheugen worden doorgegeven.

-Wctor-dtor-privacy (alleen C++ en Objective-C++)
Waarschuw wanneer een klasse onbruikbaar lijkt omdat alle constructors of destructors daarin
class is privé en heeft geen vrienden- of openbare statische lidfuncties.

-Wwis-niet-virtuele-dtor (alleen C++ en Objective-C++)
Waarschuw wanneer verwijderen wordt gebruikt om een ​​instantie van een klasse met virtuele functies te vernietigen
en niet-virtuele destructor. Het is onveilig om een ​​instantie van een afgeleide klasse te verwijderen
via een aanwijzer naar een basisklasse als de basisklasse geen virtual . heeft
vernietiger. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-vernauwing (alleen C++ en Objective-C++)
Waarschuwen wanneer een beperkende conversie die verboden is door C++11 plaatsvindt binnen { }, bijv

int ik = {2.2 }; // error: vernauwing van double naar int

Deze vlag is inbegrepen in: -Muur en -Wc++11-compatibel.

Met -std=c++11, -Niet-vernauwing onderdrukt de door de norm vereiste diagnose.
Merk op dat dit geen invloed heeft op de betekenis van goed gevormde code; conversies verkleinen
worden nog steeds als slecht gevormd beschouwd in de SFINAE-context.

-Wnobehalve (alleen C++ en Objective-C++)
Waarschuwen wanneer een nobehalve-expressie evalueert naar onwaar vanwege een aanroep van een functie
die geen niet-gooiende uitzonderingsspecificatie heeft (bijv gooien() or nee behalve)
maar de compiler staat erom bekend nooit een uitzondering te genereren.

-Wniet-virtuele-dtor (alleen C++ en Objective-C++)
Waarschuwen wanneer een klasse virtuele functies en toegankelijke niet-virtuele destructor heeft, in
in welk geval het mogelijk maar onveilig zou zijn om een ​​instantie van een afgeleide klasse te verwijderen
via een pointer naar de basisklasse. Deze waarschuwing is ook ingeschakeld als -Weffc++ is
gespecificeerd.

-Worden (alleen C++ en Objective-C++)
Waarschuw wanneer de volgorde van de ledeninitialisaties in de code niet overeenkomt met de volgorde
waarin ze moeten worden uitgevoerd. Bijvoorbeeld:

structuur A {
int i;
intj;
A(): j (0), ik (1) { }
};

De compiler herschikt de ledeninitialisaties voor i en j om de
declaratievolgorde van de leden, met een daartoe strekkende waarschuwing. Deze waarschuwing is:
ingeschakeld door -Muur.

De volgende -W... opties worden niet beïnvloed door: -Muur.

-Weffc++ (alleen C++ en Objective-C++)
Waarschuw voor schendingen van de volgende stijlrichtlijnen van Scott Meyers' effectief
C ++, Tweede editie boek:

· Item 11: Definieer een kopieerconstructor en een toewijzingsoperator voor klassen met
dynamisch toegewezen geheugen.

· Item 12: Liever initialisatie dan toewijzing in constructors.

· Item 14: Maak destructors virtueel in basisklassen.

· Item 15: Laat "operator=" een verwijzing naar *this retourneren.

· Item 23: Probeer geen referentie te retourneren wanneer u een object moet retourneren.

Waarschuw ook voor schendingen van de volgende stijlrichtlijnen van Scott Meyers' Meer
effectief C + + boek:

· Item 6: Onderscheid maken tussen prefix en postfix vormen van increment en decrement
exploitanten.

· Item 7: Overbelast "&&", "||", of "," nooit.

Houd er bij het selecteren van deze optie rekening mee dat de standaard bibliotheekkoppen niet aan alle voldoen
van deze richtlijnen; gebruik maken van grep -v om die waarschuwingen eruit te filteren.

-Wstrict-null-schildwacht (alleen C++ en Objective-C++)
Waarschuw ook voor het gebruik van een ongecaste "NULL" als schildwacht. Bij het compileren alleen met
GCC dit is een geldige schildwacht, aangezien "NULL" is gedefinieerd als "__null". Hoewel het een nul is
pointerconstante geen null-pointer, het is gegarandeerd even groot als een
wijzer. Maar dit gebruik is niet overdraagbaar tussen verschillende compilers.

-Wno-niet-sjabloon-vriend (alleen C++ en Objective-C++)
Schakel waarschuwingen uit wanneer niet-getempleerde vriendfuncties binnen een sjabloon worden gedeclareerd.
Sinds de komst van expliciete ondersteuning voor sjabloonspecificaties in G++, als de naam van de
vriend is een niet-gekwalificeerde id (dwz vriend foo(int)), de C++-taalspecificatie
vereist dat de vriend een gewone, niet-sjabloonfunctie verklaart of definieert. (Sectie
14.5.3). Voordat G++ expliciete specificatie implementeerde, konden niet-gekwalificeerde id's zijn:
geïnterpreteerd als een specifieke specialisatie van een sjabloonfunctie. Omdat dit
afwijkend gedrag is niet langer het standaardgedrag voor G++,
-Wnon-sjabloon-vriend stelt de compiler in staat om bestaande code te controleren op mogelijke problemen
spots en is standaard ingeschakeld. Dit nieuwe compilergedrag kan worden uitgeschakeld met
-Wno-niet-sjabloon-vriend, die de conforme compilercode behoudt, maar de . uitschakelt
nuttige waarschuwing.

-Wold-stijl-cast (alleen C++ en Objective-C++)
Waarschuw als een oude stijl (C-stijl) cast naar een niet-ongeldig type wordt gebruikt binnen een C++-programma.
De cast nieuwe stijl (dynamische_cast, statische_cast, herinterpret_cast en const_cast) zijn
minder kwetsbaar voor onbedoelde effecten en veel gemakkelijker te zoeken.

-Woverloaded-virtueel (alleen C++ en Objective-C++)
Waarschuwen wanneer een functiedeclaratie virtuele functies verbergt voor een basisklasse. Voor
bijvoorbeeld in:

structuur A {
virtuele leegte f();
};

struct B: openbaar A {
ongeldig f(int);
};

de "A" klasse versie van "f" is verborgen in "B", en code zoals:

B*b;
b->f();

zal niet compileren.

-Wno-pmf-conversies (alleen C++ en Objective-C++)
Schakel de diagnose uit voor het converteren van een gebonden aanwijzer naar een lidfunctie naar een platte
wijzer.

-Wsign-promo (alleen C++ en Objective-C++)
Waarschuw wanneer de oplossing voor overbelasting een promotie kiest van het niet-ondertekende of opgesomde type tot
een ondertekend type, over een conversie naar een niet-ondertekend type van dezelfde grootte. Vorig
versies van G++ zouden proberen om niet-ondertekend te blijven, maar de standaard verplicht de
huidig ​​gedrag.

structuur A {
operatorint();
A&-operator = (int);
};

belangrijkste ()
{
een een, b;
een = b;
}

In dit voorbeeld zal G++ een standaard synthetiseren A& operator = (Const A&);, terwijl cfront
gebruikt de door de gebruiker gedefinieerde operator =.

Opties Controlling Doelstelling C en Objectief-C++ dialecten
(OPMERKING: deze handleiding beschrijft niet de talen Objective-C en Objective-C++)
zich.

Deze sectie beschrijft de opdrachtregelopties die alleen zinvol zijn voor Objective-C
en Objective-C++-programma's, maar u kunt ook de meeste taalonafhankelijke GNU gebruiken
compiler opties. U kunt bijvoorbeeld een bestand "some_class.m" als volgt compileren:

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

In dit voorbeeld -fgnu-looptijd is een optie die alleen bedoeld is voor Objective-C en Objective-C++
programma's; u kunt de andere opties gebruiken met elke taal die door GCC wordt ondersteund.

Merk op dat aangezien Objective-C een uitbreiding is van de C-taal, Objective-C-compilaties
kan ook opties gebruiken die specifiek zijn voor de C-front-end (bijv. -Wtraditioneel). Evenzo
Objective-C++-compilaties kunnen C++-specifieke opties gebruiken (bijv. -Wabi).

Hier is een lijst met opties die zijn: Slechts voor het compileren van Objective-C en Objective-C++
programma's:

-fconstante-string-klasse=naam van de klasse
Te gebruiken naam van de klasse als de naam van de klasse die moet worden geïnstantieerd voor elke letterlijke tekenreeks
opgegeven met de syntaxis "@"..."". De standaardklassenaam is "NXConstantString" als
de GNU-runtime wordt gebruikt, en "NSConstantString" als de NeXT-runtime wordt
gebruikt (zie hieronder). De -fconstante-cfstrings optie, indien ook aanwezig, zal de
-fconstante-tekenreeksklasse instelling en ervoor zorgen dat "@"..."" letterlijke waarden worden opgemaakt als constant
CoreFoundation-snaren.

-fgnu-looptijd
Genereer objectcode die compatibel is met de standaard GNU Objective-C-runtime. Dit is
de standaard voor de meeste soorten systemen.

-fnext-runtime
Genereer output die compatibel is met de NeXT-runtime. Dit is de standaardinstelling voor op NeXT gebaseerde
systemen, waaronder Darwin en Mac OS X. De macro "__NEXT_RUNTIME__" is vooraf gedefinieerd als:
(en alleen als) deze optie wordt gebruikt.

-fno-nul-ontvangers
Neem aan dat alle Objective-C-berichten worden verzonden ("[receiver message:arg]") in deze
vertaaleenheid zorg ervoor dat de ontvanger niet "nihil" is. Dit zorgt voor meer
efficiënte ingangspunten in de te gebruiken runtime. Deze optie is alleen beschikbaar in
combinatie met de NeXT runtime en ABI versie 0 of 1.

-fobjc-abi-versie=n
Gebruik versie n van de Objective-C ABI voor de geselecteerde runtime. Deze optie is
momenteel alleen ondersteund voor de NeXT-runtime. In dat geval is versie 0 de
traditionele (32-bits) ABI zonder ondersteuning voor eigenschappen en andere Objective-C 2.0
toevoegingen. Versie 1 is de traditionele (32-bit) ABI met ondersteuning voor eigenschappen en
andere Objective-C 2.0 toevoegingen. Versie 2 is de moderne (64-bit) ABI. Als niets is
opgegeven, is de standaard versie 0 op 32-bits doelcomputers en versie 2 op 64-bit
doelmachines.

-fobjc-call-cxx-cdtors
Controleer voor elke Objective-C-klasse of een van de instantievariabelen een C++-object is
met een niet-triviale standaardconstructor. Als dat zo is, synthetiseer dan een speciale "- (id)
.cxx_construct"-instantiemethode die niet-triviale standaardconstructors uitvoert op elk
dergelijke instantievariabelen, in volgorde, en retourneer vervolgens "zelf". Evenzo, controleer indien aanwezig
instantievariabele is een C++-object met een niet-triviale destructor, en zo ja, synthetiseren
een speciale "- (void) .cxx_destruct" methode die al dergelijke standaard destructors zal uitvoeren,
in omgekeerde volgorde.

De aldus gegenereerde methoden "- (id) .cxx_construct" en "- (void) .cxx_destruct" zullen
werken alleen op instantievariabelen die zijn gedeclareerd in de huidige klasse Objective-C, en niet
die geërfd van superklassen. Het is de verantwoordelijkheid van de Objective-C
runtime om al dergelijke methoden in de overervingshiërarchie van een object aan te roepen. Het ID)
.cxx_construct"-methoden worden onmiddellijk na een nieuw object door de runtime aangeroepen
instantie wordt toegewezen; de methoden "- (void) .cxx_destruct" worden aangeroepen
onmiddellijk voordat de runtime een objectinstantie ongedaan maakt.

Op het moment van schrijven heeft alleen de NeXT-runtime op Mac OS X 10.4 en hoger ondersteuning voor:
het aanroepen van de "- (id) .cxx_construct" en "- (void) .cxx_destruct" methoden.

-fobjc-directe-verzending
Snelle sprongen naar de berichtverzender toestaan. Op Darwin gebeurt dit via de
com pagina.

-fobjc-uitzonderingen
Schakel syntactische ondersteuning in voor gestructureerde afhandeling van uitzonderingen in Objective-C, vergelijkbaar met:
wat wordt aangeboden door C++ en Java. Deze optie is vereist om de Objective-C . te gebruiken
trefwoorden @try, @throw, @catch, @finally en @synchronized. Deze optie is beschikbaar
met zowel de GNU-runtime als de NeXT-runtime (maar niet beschikbaar in combinatie met
de NeXT-runtime op Mac OS X 10.2 en eerder).

-fobjc-gc
Schakel garbage collection (GC) in in Objective-C- en Objective-C++-programma's. Deze optie
is alleen beschikbaar met de NeXT-runtime; de GNU-runtime heeft een andere rommel
collectie-implementatie waarvoor geen speciale compilervlaggen vereist zijn.

-fobjc-nilcheck
Controleer voor de NeXT-runtime met versie 2 van de ABI op een nulontvanger in de methode
aanroepen voordat u de daadwerkelijke methodeaanroep doet. Dit is de standaard en kan worden
uitgeschakeld met behulp van -fno-objc-nilcheck. Klassemethoden en superaanroepen worden nooit gecontroleerd
op deze manier voor nul, ongeacht waar deze vlag op is ingesteld. Momenteel doet deze vlag het
niets wanneer de GNU runtime, of een oudere versie van de NeXT runtime ABI, wordt gebruikt.

-fobjc-std=objc1
Conform de taalsyntaxis van Objective-C 1.0, de taal die wordt herkend door GCC 4.0.
Dit heeft alleen invloed op de Objective-C-toevoegingen aan de C/C++-taal; het heeft geen invloed op
conformiteit met C/C++-standaarden, die wordt gecontroleerd door het afzonderlijke C/C++-dialect
optie vlaggen. Wanneer deze optie wordt gebruikt met Objective-C of Objective-C++
compiler, wordt elke Objective-C-syntaxis die niet wordt herkend door GCC 4.0 afgewezen. Dit
is handig als u ervoor moet zorgen dat uw Objective-C-code kan worden gecompileerd met
oudere versies van GCC.

-freeplace-objc-klassen
Zend een speciale markering uit die instructies geeft ld(1) om het resulterende object niet statisch te linken
bestand, en sta toe dylde(1) om het in plaats daarvan tijdens runtime te laden. Dit wordt gebruikt in
combinatie met de foutopsporingsmodus Fix-and-Continue, waarbij het objectbestand in
vraag kan opnieuw worden gecompileerd en dynamisch opnieuw worden geladen in de loop van het programma
uitvoering, zonder dat u het programma zelf opnieuw hoeft te starten. Momenteel is Fix-and-
Doorgaan-functionaliteit is alleen beschikbaar in combinatie met de NeXT-runtime op Mac
OS X 10.3 en hoger.

-fzero-link
Bij het compileren voor de NeXT-runtime vervangt de compiler gewoonlijk oproepen naar:
"objc_getClass("...")" (wanneer de naam van de klasse bekend is tijdens het compileren) met
statische klassereferenties die worden geïnitialiseerd tijdens het laden, wat de runtime verbetert
uitvoering. Specificeren van de -fzero-link vlag onderdrukt dit gedrag en veroorzaakt
aanroepen naar "objc_getClass("...")" om te behouden. Dit is handig in Zero-Link
debugging-modus, omdat hiermee individuele klasse-implementaties kunnen worden gewijzigd
tijdens de uitvoering van het programma. De GNU-runtime behoudt momenteel altijd oproepen naar:
"objc_get_class("...")" ongeacht de opdrachtregelopties.

-gen-decls
Dump interface-declaraties voor alle klassen die in het bronbestand worden gezien naar een bestand met de naam
bronnaam.decl.

-Wassign-onderscheppen (Alleen Objective-C en Objective-C++)
Waarschuw wanneer een Objective-C-opdracht wordt onderschept door de vuilnisman.

-Wno-protocol (Alleen Objective-C en Objective-C++)
Als een klasse wordt gedeclareerd om een ​​protocol te implementeren, wordt voor elke methode een waarschuwing gegeven
in het protocol dat niet door de klas wordt geïmplementeerd. Het standaardgedrag is om
een waarschuwing geven voor elke methode die niet expliciet in de klasse is geïmplementeerd, zelfs als a
methode-implementatie is overgenomen van de superklasse. Als u de -Wno-protocol
optie, dan worden methoden die zijn geërfd van de superklasse als geïmplementeerd beschouwd,
en er wordt geen waarschuwing voor hen afgegeven.

-Wkiezer (Alleen Objective-C en Objective-C++)
Waarschuwen als meerdere methoden van verschillende typen voor dezelfde selector worden gevonden tijdens
compilatie. De controle wordt uitgevoerd op de lijst met methoden in de laatste fase van:
compilatie. Bovendien wordt een controle uitgevoerd voor elke selector die in een
"@selector(...)" expressie, en een corresponderende methode voor die selector is
gevonden tijdens het samenstellen. Omdat deze controles de methodetabel pas aan het einde scannen
van compilatie, worden deze waarschuwingen niet geproduceerd als de laatste fase van compilatie is
niet bereikt, bijvoorbeeld omdat er een fout is gevonden tijdens het compileren, of omdat de
-fsyntaxis-alleen optie wordt gebruikt.

-Wstrict-selector-overeenkomst (Alleen Objective-C en Objective-C++)
Waarschuw als er meerdere methoden met verschillende argument- en/of retourtypen worden gevonden voor a
gegeven selector bij een poging om een ​​bericht te verzenden met behulp van deze selector naar een ontvanger van
typ "id" of "Klasse". Wanneer deze vlag uit is (wat het standaardgedrag is), zal de
De compiler zal dergelijke waarschuwingen weglaten als gevonden verschillen beperkt blijven tot typen that
delen dezelfde grootte en uitlijning.

-Wondeclared-selector (Alleen Objective-C en Objective-C++)
Waarschuwen als een "@selector(...)"-expressie die verwijst naar een niet-aangegeven selector wordt gevonden. EEN
selector wordt als niet gedeclareerd beschouwd als er nog geen methode met die naam is gedeclareerd
de uitdrukking "@selector(...)", expliciet in een @interface of @protocol
verklaring, of impliciet in een @implementation-sectie. Deze optie presteert altijd
zijn controles zodra een "@selector(...)"-expressie wordt gevonden, terwijl -Wkiezer Slechts
voert zijn controles uit in de laatste fase van de compilatie. Dit dwingt ook de codering af
stijlconventie dat methoden en selectors moeten worden gedeclareerd voordat ze worden gebruikt.

-print-object-runtime-info
Genereer een C-header die de grootste structuur beschrijft die door waarde wordt doorgegeven, indien aanwezig.

Opties naar Controle Diagnostisch Berichten opmaak
Traditioneel zijn diagnostische berichten geformatteerd, ongeacht het uitvoerapparaat
aspect (bv. de breedte, ...). De hieronder beschreven opties kunnen worden gebruikt om de
algoritme voor het opmaken van diagnostische berichten, bijv. hoeveel tekens per regel, hoe vaak
informatie over de bronlocatie moet worden gerapporteerd. Op dit moment kan alleen de C++ front-end
eer deze opties. Wel wordt verwacht, in de nabije toekomst, dat de resterende front
uiteinden in staat zouden zijn om ze correct te verteren.

-fbericht-lengte=n
Probeer foutmeldingen zo op te maken dat ze passen op regels van ongeveer n karakters. De
standaard is 72 tekens voor g ++ en 0 voor de rest van de front-ends ondersteund door
GCC. Indien n nul is, wordt er geen regelterugloop uitgevoerd; elke foutmelding verschijnt
op een enkele regel.

-fdiagnostics-show-location=eenmaal
Alleen zinvol in de modus voor regelterugloop. Instrueert de diagnostische berichten-reporter om:
uitzenden eens bron locatie-informatie; dat wil zeggen, voor het geval het bericht te lang is om te passen
op een enkele fysieke lijn en moet worden ingepakt, wordt de bronlocatie niet uitgezonden
(als voorvoegsel) opnieuw, steeds opnieuw, in volgende vervolgregels. Dit is de
standaard gedrag.

-fdiagnostics-show-location=elke-regel
Alleen zinvol in de modus voor regelterugloop. Instrueert de diagnostische berichten-reporter om:
dezelfde bronlocatie-informatie uitzenden (als prefix) voor fysieke lijnen die resulteren
van het proces van het breken van een bericht dat te lang is om op een enkele regel te passen.

-fno-diagnose-show-optie
Standaard bevat elke uitgezonden diagnose tekst die de opdrachtregeloptie aangeeft
die de diagnostiek direct aanstuurt (indien een dergelijke optie bij de diagnostiek bekend is)
machines). Specificeren van de -fno-diagnose-show-optie vlag onderdrukt dat
gedrag.

Opties naar Aanvraag or Onderdrukken waarschuwingen
Waarschuwingen zijn diagnostische berichten die constructies rapporteren die niet inherent zijn aan
foutief zijn, maar die riskant zijn of erop wijzen dat er mogelijk een fout is geweest.

De volgende taalonafhankelijke opties schakelen geen specifieke waarschuwingen in, maar regelen de:
soorten diagnostiek geproduceerd door GCC.

-fsyntaxis-alleen
Controleer de code op syntaxisfouten, maar doe verder niets.

-fmax-fouten=n
Beperkt het maximum aantal foutmeldingen tot n, op welk punt GCC eerder terugvalt
dan proberen door te gaan met het verwerken van de broncode. Indien n is 0 (de standaard),
er is geen limiet aan het aantal geproduceerde foutmeldingen. Indien -Wfatal-fouten Ook
gespecificeerd, dan -Wfatal-fouten heeft voorrang op deze optie.

-w Blokkeer alle waarschuwingsberichten.

-fout
Maak van alle waarschuwingen fouten.

-Fout=
Maak van de opgegeven waarschuwing een fout. De specificatie voor een waarschuwing wordt toegevoegd,
bij voorbeeld -Werror=schakelaar draait de waarschuwingen gecontroleerd door -Wschakelaar in fouten.
Deze schakelaar heeft een negatieve vorm, om te worden gebruikt om te ontkennen -fout voor specifieke waarschuwingen,
bij voorbeeld -Wno-fout = schakelaar merken -Wschakelaar waarschuwingen zijn geen fouten, zelfs niet wanneer -fout
van kracht is.

Het waarschuwingsbericht voor elke beheersbare waarschuwing bevat de optie waarmee:
de waarschuwing. Die optie kan dan worden gebruikt met -Fout= en -Wno-fout= zoals beschreven
bovenstaand. (Het afdrukken van de optie in het waarschuwingsbericht kan worden uitgeschakeld met de
-fno-diagnose-show-optie vlag.)

Merk op dat het specificeren van -Fout=foo impliceert automatisch -Wfoo. Echter, -Wno-fout=foo
stelt niets voor.

-Wfatal-fouten
Deze optie zorgt ervoor dat de compiler de compilatie afbreekt bij de eerste fout die zich voordeed
in plaats van te proberen door te gaan en verdere foutmeldingen af ​​te drukken.

U kunt veel specifieke waarschuwingen aanvragen met opties die beginnen -WBijvoorbeeld -Wimpliciet
om waarschuwingen te vragen over impliciete verklaringen. Elk van deze specifieke waarschuwingsopties ook
heeft een negatieve vorm begin -Wnee- om waarschuwingen uit te schakelen; bijvoorbeeld, -Wno-impliciet.
Deze handleiding vermeldt slechts één van de twee vormen, welke niet de standaard is. Voor verder,
taalspecifieke opties verwijzen ook naar C + + tongval Opties en Doelstelling C en
Objectief-C++ tongval Opties.

Wanneer een niet-herkende waarschuwingsoptie wordt gevraagd (bijv. -Onbekende-waarschuwing), zal GCC uitzenden
een diagnose die aangeeft dat de optie niet wordt herkend. Echter, als de -Wnee- vorm is
gebruikt, is het gedrag enigszins anders: er wordt geen diagnose geproduceerd
-Wno-onbekend-waarschuwing tenzij er andere diagnostiek wordt geproduceerd. Hierdoor is het gebruik van
nieuwe -Wnee- opties met oude compilers, maar als er iets misgaat, zal de compiler waarschuwen
dat er een niet-herkende optie is gebruikt.

-pedant
Geef alle waarschuwingen die worden vereist door strikte ISO C en ISO C++; weiger alle programma's die
gebruik verboden extensies en sommige andere programma's die ISO C en ISO niet volgen
C++. Voor ISO C volgt de versie van de ISO C-norm gespecificeerd door any -soa
optie gebruikt.

Geldige ISO C- en ISO C++-programma's moeten correct worden gecompileerd, met of zonder deze optie
(hoewel een zeldzaam aantal dit nodig heeft -ansi of -soa optie die de vereiste versie specificeert
van ISO C). Zonder deze optie kunnen echter bepaalde GNU-extensies en traditionele C- en
C++-functies worden ook ondersteund. Met deze optie worden ze afgewezen.

-pedant veroorzaakt geen waarschuwingsberichten voor het gebruik van de alternatieve trefwoorden waarvan
namen beginnen en eindigen met __. Pedantische waarschuwingen zijn ook uitgeschakeld in de uitdrukking
die volgt op "__extensie__". Alleen systeemkopbestanden mogen deze echter gebruiken
vluchtroutes; toepassingsprogramma's moeten ze vermijden.

Sommige gebruikers proberen te gebruiken -pedant om programma's te controleren op strikte ISO C-conformiteit. Zij
ontdekken al snel dat het niet helemaal doet wat ze willen: het vindt een aantal niet-ISO-praktijken,
maar niet alle --- alleen die waarvoor ISO C vereist een diagnose, en enkele anderen voor
welke diagnostiek zijn toegevoegd.

Een functie om elke niet-naleving van ISO C te melden, kan in sommige gevallen nuttig zijn,
maar zou aanzienlijk meer werk vergen en zou heel anders zijn dan
-pedant. We hebben geen plannen om een ​​dergelijke functie in de nabije toekomst te ondersteunen.

Waar de norm gespecificeerd met -soa staat voor een GNU uitgebreid dialect van C, zoals
gnu90 or gnu99, er is een overeenkomstige baseren standaard, de versie van ISO C waarop:
het uitgebreide GNU-dialect is gebaseerd. Waarschuwingen van -pedant worden gegeven waar ze zijn
vereist door de basisnorm. (Het zou geen zin hebben om dergelijke waarschuwingen te geven
alleen voor functies die niet in het gespecificeerde GNU C-dialect zijn, aangezien per definitie de GNU
dialecten van C bevatten alle functies die de compiler ondersteunt met de gegeven optie, en
er zou niets zijn om voor te waarschuwen.)

-pedant-fouten
Like -pedant, behalve dat er fouten worden geproduceerd in plaats van waarschuwingen.

-Muur
Dit maakt alle waarschuwingen over constructies mogelijk die sommige gebruikers overwegen
twijfelachtig zijn, en die gemakkelijk te vermijden zijn (of aan te passen om de waarschuwing te voorkomen), zelfs in
combinatie met macro's. Dit maakt ook enkele taalspecifieke waarschuwingen mogelijk die worden beschreven
in C + + tongval Opties en Doelstelling C en Objectief-C++ tongval Opties.

-Muur schakelt de volgende waarschuwingsvlaggen in:

-Wadres -Warray-grenzen (alleen met -O2) -Wc++11-compatibel -Wchar-abonnementen
-Wenum-vergelijken (in C/Objc; dit is standaard ingeschakeld in C++) -Wimpliciet-int (C en
Alleen Objectief-C) -Wimplicit-functie-declaratie (alleen C en Objective-C) -Wcommentaar
-Wformaat -Wbelangrijk (alleen voor C/ObjC en tenzij -vrijstaand) -Wmisschien-niet-geïnitialiseerd
-Wmissing-bretels -Wnonnull - Tussen haakjes -Wpointer-teken -Worden -Wretour-type
-Wvolgorde-punt -Wsign-vergelijk (alleen in C++) -Wstrict-aliasing -Wstrict-overloop=1
-Wschakelaar -Schrijven -Geïnitialiseerd -Wunknown-pragma's -Wunused-functie
-Wongebruikt-label -Wunused-waarde -Wunused-variabele -Wvluchtig-register-var

Merk op dat sommige waarschuwingsvlaggen niet worden geïmpliceerd door: -Muur. Sommigen van hen waarschuwen voor:
constructies die gebruikers over het algemeen niet twijfelachtig vinden, maar die
af en toe wilt u misschien controleren op; anderen waarschuwen voor constructies die
in sommige gevallen noodzakelijk of moeilijk te vermijden, en er is geen eenvoudige manier om de
code om de waarschuwing te onderdrukken. Sommigen van hen worden ingeschakeld door: -Wextra maar veel van hen
moeten afzonderlijk worden ingeschakeld.

-Wextra
Dit maakt enkele extra waarschuwingsvlaggen mogelijk die niet zijn ingeschakeld door -Muur. (Deze optie gebruikt
genoemd te worden -W. De oudere naam wordt nog steeds ondersteund, maar de nieuwere naam is meer
beschrijvend.)

-Wingewikkeld -Weeg lichaam -Wignored-kwalificaties -Wmissing-veld-initializers
-Ontbrekend-parametertype (alleen C) -Wold-stijl-verklaring (alleen C) -Woverride-init
-Wsign-vergelijk -Wtype-limieten -Geïnitialiseerd -Wunused-parameter (alleen met -Wongebruikt or
-Muur) -Wunused-maar-set-parameter (alleen met -Wongebruikt or -Muur)

De optie -Wextra drukt ook waarschuwingsberichten af ​​voor de volgende gevallen:

· Een pointer wordt vergeleken met geheel getal nul met <, <=, >of >=.

· (Alleen C++) Een enumerator en een niet-enumerator verschijnen beide in een voorwaardelijke
expressie.

· (alleen C++) Dubbelzinnige virtuele bases.

· (Alleen C++) Subscripting van een array die is gedeclareerd registreren.

· (alleen C++) Het adres nemen van een variabele die is gedeclareerd registreren.

· (alleen C++) Een basisklasse wordt niet geïnitialiseerd in de kopieerconstructor van een afgeleide klasse.

-Wchar-abonnementen
Waarschuwen als een array-subscript het type "char" heeft. Dit is een veelvoorkomende oorzaak van fouten, zoals:
programmeurs vergeten vaak dat dit type op sommige machines is ondertekend. Deze waarschuwing is:
ingeschakeld door -Muur.

-Wcommentaar
Waarschuwen wanneer een commentaar-startreeks /* verschijnt in a /* commentaar, of wanneer een
Backslash-Newline verschijnt in a // opmerking. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wno-dekking-mismatch
Waarschuw als feedbackprofielen niet overeenkomen bij gebruik van de -fprofile-gebruik optie. Als een
bronbestand is gewijzigd tussen -fprofile-gen en -fprofile-gebruik, de bestanden met de
profielfeedback komt mogelijk niet overeen met het bronbestand en GCC kan het profiel niet gebruiken
feedback informatie. Deze waarschuwing is standaard ingeschakeld en wordt behandeld als een fout.
-Wno-dekking-mismatch kan worden gebruikt om de waarschuwing uit te schakelen of
-Wno-error=dekking-mismatch kan worden gebruikt om de fout uit te schakelen. De fout uitschakelen
want deze waarschuwing kan resulteren in slecht geoptimaliseerde code en is alleen nuttig in het geval van:
zeer kleine wijzigingen zoals bugfixes in een bestaande codebasis. Volledig uitschakelen
de waarschuwing wordt niet aanbevolen.

-Wno-cpp
(alleen C, Objective-C, C++, Objective-C++ en Fortran)

Onderdruk waarschuwingsberichten die worden uitgezonden door "#warning"-richtlijnen.

-Wdubbele-promotie (alleen C, C++, Objective-C en Objective-C++)
Geef een waarschuwing wanneer een waarde van het type "float" impliciet wordt gepromoveerd tot "double". CPU's
met een 32-bits "single-precision" drijvende-kommaeenheid "zweven" in hardware,
maar emuleer "dubbel" in software. Op zo'n machine, berekeningen uitvoeren met
"dubbele" waarden zijn veel duurder vanwege de overhead die nodig is voor software
emulatie.

Het is gemakkelijk om per ongeluk berekeningen uit te voeren met "dubbel", omdat drijvende-komma
letterlijke zijn impliciet van het type "dubbel". Bijvoorbeeld bij:

vlottergebied (drijvende straal)
{
retour 3.14159 * straal * straal;
}

de compiler zal de volledige berekening uitvoeren met "dubbel" omdat de drijvende-
punt letterlijk is een "dubbel".

-Wformaat
Controleer aanroepen naar "printf" en "scanf", enz., om er zeker van te zijn dat de opgegeven argumenten
typen hebben die geschikt zijn voor de opgegeven formaattekenreeks, en dat de conversies
gespecificeerd in de opmaakreeks zinvol. Dit omvat standaardfuncties, en
andere gespecificeerd door formaatkenmerken, in de "printf", "scanf", "strftime" en
"strfmon" (een X/Open-extensie, niet in de C-standaard) families (of andere doel-
bepaalde gezinnen). Welke functies worden gecontroleerd zonder formaatattributen?
gespecificeerd hangt af van de geselecteerde standaardversie en dergelijke controles van functies
zonder het opgegeven kenmerk worden uitgeschakeld door -vrijstaand or -fno-ingebouwd.

De formaten worden vergeleken met de formaatkenmerken die worden ondersteund door GNU libc versie 2.2.
Deze omvatten alle ISO C90- en C99-functies, evenals functies van de Single Unix
Specificatie en enkele BSD- en GNU-extensies. Andere bibliotheekimplementaties mogelijk niet
al deze functies ondersteunen; GCC ondersteunt geen waarschuwing over functies die verder gaan dan
de beperkingen van een bepaalde bibliotheek. Echter, als -pedant wordt gebruikt met -Wformaat,
er worden waarschuwingen gegeven over formaatfuncties die niet in de geselecteerde standaardversie (maar
niet voor "strfmon"-formaten, aangezien die in geen enkele versie van de C-standaard voorkomen).

Sinds -Wformaat controleert ook op null-formaatargumenten voor verschillende functies, -Wformaat
houdt ook in -Wnonnull.

-Wformaat is inbegrepen in -Muur. Voor meer controle over sommige aspecten van formaatcontrole,
de opties -Wformat-y2k, -Wgeen-formaat-extra-args, -Wno-formaat-nul-lengte,
-Wformat-niet-letterlijk, -Wformat-beveiliging en -Wformaat=2 beschikbaar zijn, maar niet
in -Muur.

OPMERKING: In Ubuntu 8.10 en latere versies is deze optie standaard ingeschakeld voor C, C++,
ObjC, ObjC++. Gebruik om uit te schakelen -Wformaat=0.

-Wformat-y2k
If -Wformaat is opgegeven, waarschuw ook voor "strftime"-indelingen die mogelijk slechts a
jaartal van twee cijfers.

-Wno-formaat-bevat-nul
If -Wformaat is opgegeven, waarschuwt u niet voor tekenreeksen die NUL-bytes bevatten.

-Wgeen-formaat-extra-args
If -Wformaat is opgegeven, waarschuw dan niet voor overtollige argumenten voor een "printf" of "scanf"
formaat functie. De C-standaard specificeert dat dergelijke argumenten worden genegeerd.

Waar de ongebruikte argumenten liggen tussen gebruikte argumenten die zijn opgegeven met $
operandnummerspecificaties, normaal worden er nog steeds waarschuwingen gegeven, aangezien de
implementatie kon niet weten welk type door te geven aan "va_arg" om het ongebruikte over te slaan
argumenten. In het geval van "scanf"-indelingen onderdrukt deze optie echter de
waarschuwing als de ongebruikte argumenten allemaal pointers zijn, sinds de Single Unix-specificatie
zegt dat dergelijke ongebruikte argumenten zijn toegestaan.

-Wno-formaat-nul-lengte
If -Wformaat is opgegeven, waarschuw niet voor formaten met een lengte van nul. De C-standaard
geeft aan dat formaten met een lengte nul zijn toegestaan.

-Wformat-niet-letterlijk
If -Wformaat is opgegeven, waarschuwt u ook als de opmaaktekenreeks geen letterlijke tekenreeks is en
kan dus niet worden gecontroleerd, tenzij de format-functie zijn format-argumenten neemt als a
"va_lijst".

-Wformat-beveiliging
If -Wformaat is opgegeven, waarschuw ook voor het gebruik van formaatfuncties die vertegenwoordigen
mogelijke beveiligingsproblemen. Op dit moment waarschuwt dit voor oproepen naar "printf" en
"scanf" functies waarbij de format string geen letterlijke string is en er geen
formaatargumenten, zoals in "printf (foo);". Dit kan een beveiligingslek zijn als het formaat
tekenreeks kwam van niet-vertrouwde invoer en bevat %n. (Dit is momenteel een subset van wat
-Wformat-niet-letterlijk waarschuwt voor, maar in de toekomst kunnen waarschuwingen worden toegevoegd
-Wformat-beveiliging die niet zijn inbegrepen in -Wformat-niet-letterlijk.)

OPMERKING: In Ubuntu 8.10 en latere versies is deze optie standaard ingeschakeld voor C, C++,
ObjC, ObjC++. Gebruik om uit te schakelen -Wno-formaat-beveiliging, of schakel alle indelingswaarschuwingen uit
Met -Wformaat=0. Om formaatbeveiligingswaarschuwingen fataal te maken, specificeert u:
-Werror=format-beveiliging.

-Wformaat=2
Enable -Wformaat plus formaatcontroles niet inbegrepen -Wformaat. Momenteel gelijk aan
-Wformaat -Wformat-niet-letterlijk -Wformat-beveiliging -Wformat-y2k.

-Wnonnull
Waarschuw voor het doorgeven van een null-aanwijzer voor argumenten die zijn gemarkeerd als een niet-null-waarde
door het functiekenmerk "nonnull".

-Wnonnull is inbegrepen in -Muur en -Wformaat. Het kan worden uitgeschakeld met de -Wno-niet-null
optie.

-Winit-zelf (alleen C, C++, Objective-C en Objective-C++)
Waarschuw voor niet-geïnitialiseerde variabelen die met zichzelf zijn geïnitialiseerd. Let op:
optie kan alleen worden gebruikt met de -Geïnitialiseerd optie.

GCC waarschuwt bijvoorbeeld alleen in het volgende fragment dat 'i' niet is geïnitialiseerd
wanneer -Winit-zelf is opgegeven:

intf()
{
int ik = ik;
retour ik;
}

-Wimpliciet-int (alleen C en Objective-C)
Waarschuwen wanneer een aangifte geen type specificeert. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wimplicit-functie-declaratie (alleen C en Objective-C)
Geef een waarschuwing wanneer een functie wordt gebruikt voordat deze wordt gedeclareerd. In C99-modus
(-standaard=c99 or -standaard=gnu99), is deze waarschuwing standaard ingeschakeld en is er een
fout door -pedant-fouten. Deze waarschuwing wordt ook ingeschakeld door: -Muur.

-Wimpliciet (alleen C en Objective-C)
Hetzelfde als -Wimpliciet-int en -Wimplicit-functie-declaratie. Deze waarschuwing is ingeschakeld
by -Muur.

-Wignored-kwalificaties (alleen C en C++)
Waarschuwen als het retourtype van een functie een typekwalificatie heeft zoals "const". Voor ISO C
zo'n typekwalificatie heeft geen effect, omdat de waarde die door een functie wordt geretourneerd geen is
waarde. Voor C++ wordt de waarschuwing alleen uitgezonden voor scalaire typen of "void". ISO C
verbiedt gekwalificeerde "ongeldige" retourtypen voor functiedefinities, dus dergelijke retourtypen
ontvang altijd een waarschuwing, ook zonder deze optie.

Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wbelangrijk
Waarschuw als het type hoofd- is verdacht. hoofd- zou een functie moeten zijn met extern
linkage, retourneert int, waarbij ofwel nul argumenten, twee of drie argumenten van
passende soorten. Deze waarschuwing is standaard ingeschakeld in C++ en wordt ingeschakeld door ofwel:
-Muur or -pedant.

-Wmissing-bretels
Waarschuwen als een aggregaat of unie-initialisatie niet volledig tussen haakjes staat. In de volgende
bijvoorbeeld de initialisatie voor a staat niet volledig tussen haakjes, maar dat voor b is volledig
tussen haakjes.

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

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Ontbrekende-include-dirs (alleen C, C++, Objective-C en Objective-C++)
Waarschuwen als een door de gebruiker aangeleverde include-map niet bestaat.

- Tussen haakjes
Waarschuw als haakjes worden weggelaten in bepaalde contexten, zoals wanneer er een
toewijzing in een context waarin een waarheidswaarde wordt verwacht, of wanneer operators genest zijn
wiens voorrang mensen vaak in de war raken.

Waarschuw ook als een vergelijking zoals x<=y<=z verschijnt; dit is gelijk aan (x<=y ? 1 : 0)
<= z, wat een andere interpretatie is dan die van de gewone wiskundige notatie.

Waarschuw ook voor constructies waarbij verwarring kan bestaan ​​over welke "if"-instructie en
"else" tak behoort. Hier is een voorbeeld van zo'n geval:

{
als een)
als (b)
hoezo ();
anders
bar ();
}

In C/C++ behoort elke "else" -tak tot de binnenste mogelijke "if" -instructie, die
in dit voorbeeld is "if (b)". Dit is vaak niet wat de programmeur verwachtte, want
geïllustreerd in het bovenstaande voorbeeld door inspringing die de programmeur heeft gekozen. wanneer er is
het potentieel voor deze verwarring, GCC zal een waarschuwing geven wanneer deze vlag is
opgegeven. Om de waarschuwing te verwijderen, voegt u expliciete accolades toe rond de binnenste "als"
verklaring, dus het is onmogelijk dat de "anders" zou kunnen behoren tot de omsluitende "als". De
resulterende code zou er als volgt uitzien:

{
als een)
{
als (b)
hoezo ();
anders
bar ();
}
}

Waarschuw ook voor gevaarlijk gebruik van de ?: met weggelaten middelste operand GNU-extensie. Wanneer
de voorwaarde in de ?: operator is een booleaanse uitdrukking, de weggelaten waarde zal dat zijn
altijd 1. Vaak verwacht de gebruiker dat het een waarde is die wordt berekend binnen de voorwaardelijke
uitdrukking in plaats daarvan.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wvolgorde-punt
Waarschuw voor code die mogelijk ongedefinieerde semantiek heeft vanwege schendingen van de volgorde
puntregels in de C- en C++-normen.

De C- en C++-standaarden definiëren de volgorde waarin expressies in een C/C++-programma staan
beoordeeld in termen van volgorde punten, die een gedeeltelijke ordening vertegenwoordigen tussen de
uitvoering van delen van het programma: die welke worden uitgevoerd vóór het volgordepunt, en die
daarna uitgevoerd. Deze treden op na de evaluatie van een volledige uitdrukking (een die
maakt geen deel uit van een grotere uitdrukking), na de evaluatie van de eerste operand van a
"&&", "||", "? :" of "," (komma) operator, voordat een functie wordt aangeroepen (maar na de
evaluatie van zijn argumenten en de uitdrukking die de aangeroepen functie aangeeft), en in
bepaalde andere plaatsen. Anders dan zoals uitgedrukt door de volgordepuntregels, is de volgorde
van evaluatie van subexpressies van een expressie is niet gespecificeerd. Al deze regels
beschrijf alleen een gedeeltelijke bestelling in plaats van een totale bestelling, omdat bijvoorbeeld als twee
functies worden aangeroepen binnen één uitdrukking zonder sequentiepunt ertussen, de
volgorde waarin de functies worden aangeroepen is niet gespecificeerd. Echter, de normen
commissie hebben geoordeeld dat functieaanroepen elkaar niet overlappen.

Het is niet gespecificeerd wanneer tussen reekspunten wijzigingen aan de waarden van
objecten treden in werking. Programma's waarvan het gedrag hiervan afhangt, vertonen ongedefinieerd gedrag;
de C- en C++-normen specificeren dat "Tussen het vorige en volgende sequentiepunt an
object zal zijn opgeslagen waarde hoogstens één keer gewijzigd hebben door de evaluatie van een
uitdrukking. Bovendien moet de eerdere waarde alleen worden gelezen om de waarde te bepalen tot
worden opgeslagen.". Als een programma deze regels overtreedt, worden de resultaten op een bepaald
uitvoering zijn volledig onvoorspelbaar.

Voorbeelden van code met ongedefinieerd gedrag zijn "a = a++;", "a[n] = b[n++]" en "a[i++] =
i;". Sommige meer gecompliceerde gevallen worden niet gediagnosticeerd door deze optie, en het kan een
af en toe een vals-positief resultaat, maar over het algemeen is het redelijk effectief gebleken bij:
het detecteren van dit soort problemen in programma's.

De norm is verwarrend geformuleerd, daarom is er enige discussie over de precieze
betekenis van de volgordepuntregels in subtiele gevallen. Links naar discussies over de
probleem, inclusief voorgestelde formele definities, zijn te vinden op de GCC-leespagina,
Bijhttp://gcc.gnu.org/readings.html>.

Deze waarschuwing is mogelijk gemaakt door: -Muur voor C en C++.

-Wretour-type
Waarschuwen wanneer een functie wordt gedefinieerd met een return-type dat standaard "int" is. Ook
waarschuwen voor elke "return"-instructie zonder return-waarde in een functie waarvan return-type
is niet "leeg" (van het einde van de functie-body vallen wordt beschouwd als terugkerend)
zonder waarde), en over een "return"-statement met een expressie in een functie
waarvan het retourtype "ongeldig" is.

Voor C++ produceert een functie zonder retourtype altijd een diagnostisch bericht, zelfs
wanneer -Wno-retourtype is gespecificeerd. De enige uitzonderingen zijn: hoofd- en functies
gedefinieerd in systeemkoppen.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wschakelaar
Waarschuwen wanneer een "switch"-instructie een index van het opgesomde type heeft en geen "case" heeft
voor een of meer van de genoemde codes van die opsomming. (De aanwezigheid van een "standaard"
label voorkomt deze waarschuwing.) "case"-labels buiten het opsommingsbereik ook
waarschuwingen uitlokken wanneer deze optie wordt gebruikt (zelfs als er een "standaard" label is). Dit
waarschuwing is ingeschakeld door -Muur.

-Wswitch-standaard
Waarschuw wanneer een "switch"-instructie geen "standaard" case heeft.

-Wswitch-opsomming
Waarschuwen wanneer een "switch"-instructie een index van het opgesomde type heeft en geen "case" heeft
voor een of meer van de genoemde codes van die opsomming. "case"-labels buiten de
opsommingsbereik veroorzaken ook waarschuwingen wanneer deze optie wordt gebruikt. Het enige verschil
tussen -Wschakelaar en deze optie is dat deze optie een waarschuwing geeft over een weggelaten
opsommingscode, zelfs als er een "standaard" label is.

-Wsync-nand (alleen C en C++)
Waarschuwen wanneer de ingebouwde functies "__sync_fetch_and_nand" en "__sync_nand_and_fetch" zijn
gebruikt. Deze functies hebben de semantiek gewijzigd in GCC 4.4.

-Schrijven
Waarschuw als er trigraphs worden aangetroffen die de betekenis van het programma kunnen veranderen
(trigraphs in opmerkingen worden niet gewaarschuwd). Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wunused-maar-set-parameter
Waarschuw wanneer een functieparameter is toegewezen aan, maar verder niet wordt gebruikt (afgezien van
zijn verklaring).

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

Deze waarschuwing wordt ook ingeschakeld door: -Wongebruikt met -Wextra.

-Wunused-maar-set-variabele
Waarschuw wanneer een lokale variabele is toegewezen aan, maar verder niet wordt gebruikt (afgezien van zijn
verklaring). Deze waarschuwing is mogelijk gemaakt door: -Muur.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

Deze waarschuwing wordt ook ingeschakeld door: -Wongebruikt, die is ingeschakeld door -Muur.

-Wunused-functie
Waarschuwen wanneer een statische functie is gedeclareerd maar niet gedefinieerd of een niet-inline statische functie
functie is ongebruikt. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wongebruikt-label
Waarschuw wanneer een label wordt aangegeven maar niet wordt gebruikt. Deze waarschuwing is mogelijk gemaakt door: -Muur.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

-Wunused-local-typedefs (alleen C, Objective-C, C++ en Objective-C++)
Waarschuwen wanneer een lokaal gedefinieerd typedef in een functie niet wordt gebruikt.

-Wunused-parameter
Waarschuw wanneer een functieparameter niet wordt gebruikt, afgezien van de declaratie.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

-Wno-ongebruikt-resultaat
Waarschuw niet als een aanroeper van een functie gemarkeerd met attribuut "warn_unused_result" dit doet
de retourwaarde niet gebruiken. De standaard is -Wunused-resultaat.

-Wunused-variabele
Waarschuw wanneer een lokale variabele of niet-constante statische variabele niet wordt gebruikt, afgezien van:
zijn verklaring. Deze waarschuwing is mogelijk gemaakt door: -Muur.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

-Wunused-waarde
Waarschuwen wanneer een instructie een resultaat berekent dat expliciet niet wordt gebruikt. Onderdrukken
deze waarschuwing cast de ongebruikte expressie naar komen te vervallen. Dit omvat een expressie-instructie
of de linkerkant van een komma-uitdrukking die geen bijwerkingen bevat. Voor
bijvoorbeeld een uitdrukking als x[i,j] zal een waarschuwing veroorzaken, terwijl x[(leegte)i,j] wil
niet.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wongebruikt
Alle bovenstaande -Wongebruikt opties gecombineerd.

Om een ​​waarschuwing te krijgen over een ongebruikte functieparameter, moet u ofwel:
-Wextra -Wongebruikt (Let daar op -Muur impliceert -Wongebruikt), of apart specificeren
-Wunused-parameter.

-Geïnitialiseerd
Waarschuwen als een automatische variabele wordt gebruikt zonder eerst te zijn geïnitialiseerd of als een variabele
kan worden belaagd door een "setjmp" -aanroep. Waarschuw in C++ als een niet-statische verwijzing of niet-
statisch const lid verschijnt in een klasse zonder constructors.

Als u wilt waarschuwen voor code die gebruikmaakt van de niet-geïnitialiseerde waarde van de variabele in
zijn eigen initialisatie, gebruik de -Winit-zelf optie.

Deze waarschuwingen treden op voor individuele niet-geïnitialiseerde of gehackte elementen van structuur,
unie- of arrayvariabelen, evenals voor variabelen die niet zijn geïnitialiseerd of onleesbaar zijn
Als geheel. Ze komen niet voor bij variabelen of elementen die als "vluchtig" zijn verklaard. Omdat
deze waarschuwingen zijn afhankelijk van optimalisatie, de exacte variabelen of elementen waarvoor er
Welke waarschuwingen worden gegeven, hangt af van de precieze optimalisatie-opties en de versie van GCC die wordt gebruikt.

Merk op dat er mogelijk geen waarschuwing is over een variabele die alleen wordt gebruikt om a . te berekenen
waarde die zelf nooit wordt gebruikt, omdat dergelijke berekeningen door de gegevensstroom kunnen worden verwijderd
analyse voordat de waarschuwingen worden afgedrukt.

-Wmisschien-niet-geïnitialiseerd
Voor een automatische variabele, als er een pad bestaat van de functie-invoer naar een gebruik van
de variabele die is geïnitialiseerd, maar er bestaan ​​enkele andere paden die de variabele niet is
geïnitialiseerd, zal de compiler een waarschuwing geven als het niet-geïnitialiseerde niet kan bewijzen
paden gebeuren niet tijdens runtime. Deze waarschuwingen zijn optioneel gemaakt omdat GCC dat niet is
slim genoeg om alle redenen te zien waarom de code correct zou kunnen zijn ondanks dat het lijkt
heb een fout. Hier is een voorbeeld van hoe dit kan gebeuren:

{
int x;
schakelaar (y)
{
geval 1: x = 1;
te breken;
geval 2: x = 4;
te breken;
geval 3: x = 5;
}
foo (x);
}

Als de waarde van "y" altijd 1, 2 of 3 is, wordt "x" altijd geïnitialiseerd, maar GCC
weet dit niet. Om de waarschuwing te onderdrukken, moet de gebruiker een standaardcase opgeven
Met beweren(0) of soortgelijke code.

Deze optie waarschuwt ook wanneer een niet-vluchtige automatische variabele kan worden gewijzigd door a
bel naar "longjmp". Ook deze waarschuwingen zijn alleen mogelijk bij het optimaliseren
compilatie.

De compiler ziet alleen de aanroepen naar "setjmp". Het kan niet weten waar "longjmp" zal zijn
genaamd; in feite zou een signaalbehandelaar het op elk punt in de code kunnen aanroepen. Als een
resultaat, kunt u een waarschuwing krijgen, zelfs als er in feite geen probleem is, omdat "longjmp"
niet kan worden gebeld op de plaats die een probleem zou veroorzaken.

Sommige valse waarschuwingen kunnen worden vermeden als u alle functies die u gebruikt, declareert
keer nooit terug als "noreturn".

Deze waarschuwing is mogelijk gemaakt door: -Muur or -Wextra.

-Wunknown-pragma's
Waarschuw wanneer een "#pragma"-richtlijn wordt aangetroffen die niet wordt begrepen door GCC. Als dit
opdrachtregeloptie wordt gebruikt, worden er zelfs waarschuwingen gegeven voor onbekende pragma's in
systeem header-bestanden. Dit is niet het geval als de waarschuwingen alleen door de
-Muur opdrachtregeloptie.

-Wno-pragma's
Waarschuw niet voor misbruik van pragma's, zoals onjuiste parameters, ongeldige syntaxis of
conflicten tussen pragma's. Zie ook -Wunknown-pragma's.

-Wstrict-aliasing
Deze optie is alleen actief wanneer: -fstrict-aliasing is actief. Het waarschuwt voor code die:
kan de strikte aliasing-regels overtreden die de compiler gebruikt voor optimalisatie.
De waarschuwing vangt niet alle gevallen, maar probeert wel de meest voorkomende te vangen
valkuilen. Het is inbegrepen in -Muur. Het is gelijk aan -Wstrict-aliasing=3

-Wstrict-aliasing=n
Deze optie is alleen actief wanneer: -fstrict-aliasing is actief. Het waarschuwt voor code die:
kan de strikte aliasing-regels overtreden die de compiler gebruikt voor optimalisatie.
Hogere niveaus komen overeen met een hogere nauwkeurigheid (minder valse positieven). Hogere levels
komt ook overeen met meer inspanning, vergelijkbaar met de manier waarop -O werkt. -Wstrict-aliasing is
gelijkwaardig -Wstrict-aliasing=n, met n=3.

Niveau 1: Meest agressief, snel, minst nauwkeurig. Mogelijk handig bij hogere niveaus
niet waarschuwen, maar -fstrict-aliasing breekt nog steeds de code, omdat er maar heel weinig valse zijn
negatieven. Het heeft echter veel valse positieven. Waarschuwt voor alle aanwijzerconversies
tussen mogelijk onverenigbare typen, zelfs als ze nooit worden verwijderd. Loopt vooraan
alleen eindigen.

Niveau 2: Agressief, snel, niet te precies. Kan nog steeds veel valse positieven hebben (niet
maar liefst niveau 1) en weinig fout-negatieven (maar mogelijk meer dan niveau 1).
In tegenstelling tot niveau 1 waarschuwt het alleen wanneer een adres wordt ingenomen. Waarschuwt voor onvolledige typen.
Loopt alleen aan de voorkant.

Niveau 3 (standaard voor -Wstrict-aliasing): Zou heel weinig valse positieven moeten hebben en weinig
valse negatieven. Iets langzamer dan niveau 1 of 2 wanneer optimalisatie is ingeschakeld.
Zorgt voor het algemene woordspeling + dereferentiepatroon in de voorkant:
"*(int*)&some_float". Als optimalisatie is ingeschakeld, wordt het ook in de backend uitgevoerd, waar
het behandelt meerdere instructiegevallen met behulp van stroomgevoelige point-to-informatie.
Waarschuwt alleen wanneer de geconverteerde aanwijzer wordt verwijderd. Waarschuwt niet voor onvolledige
types.

-Wstrict-overloop
-Wstrict-overloop=n
Deze optie is alleen actief wanneer: -fstrict-overloop is actief. Het waarschuwt voor gevallen
waarbij de compiler optimaliseert op basis van de veronderstelling dat ondertekende overloop niet:
voorkomen. Merk op dat het niet waarschuwt voor alle gevallen waarin de code kan overlopen: het
waarschuwt alleen voor gevallen waarin de compiler enige optimalisatie implementeert. dus dit
waarschuwing hangt af van het optimalisatieniveau.

Een optimalisatie die ervan uitgaat dat ondertekende overloop niet optreedt, is volkomen veilig als:
de waarden van de betrokken variabelen zijn zodanig dat overloop in feite nooit
voorkomen. Daarom kan deze waarschuwing gemakkelijk een vals positief geven: een waarschuwing over code
dat is eigenlijk geen probleem. Om u te helpen focussen op belangrijke zaken, zijn er verschillende waarschuwingen:
niveaus zijn gedefinieerd. Er worden geen waarschuwingen gegeven voor het gebruik van ongedefinieerde ondertekende overloop
bij het schatten hoeveel iteraties een lus nodig heeft, met name wanneer
bepalen of er überhaupt een lus wordt uitgevoerd.

-Wstrict-overloop=1
Waarschuw voor gevallen die zowel twijfelachtig als gemakkelijk te vermijden zijn. Bijvoorbeeld: "x +
1 > x"; met -fstrict-overloop, zal de compiler dit vereenvoudigen tot 1. Dit niveau
of -Wstrict-overloop is ingeschakeld door -Muur; hogere niveaus zijn niet, en moeten worden
uitdrukkelijk gevraagd.

-Wstrict-overloop=2
Waarschuw ook voor andere gevallen waarin een vergelijking wordt vereenvoudigd tot een constante. Voor
voorbeeld: "abs (x) >= 0". Dit kan alleen worden vereenvoudigd als: -fstrict-overloop in
effect, omdat "abs (INT_MIN)" overloopt naar "INT_MIN", wat kleiner is dan nul.
-Wstrict-overloop (zonder niveau) is hetzelfde als -Wstrict-overloop=2.

-Wstrict-overloop=3
Waarschuw ook voor andere gevallen waarin een vergelijking wordt vereenvoudigd. Bijvoorbeeld: "x + 1
> 1" wordt vereenvoudigd tot "x > 0".

-Wstrict-overloop=4
Waarschuw ook voor andere vereenvoudigingen die niet onder de bovenstaande gevallen vallen. Voor
voorbeeld: "(x * 10) / 5" wordt vereenvoudigd tot "x * 2".

-Wstrict-overloop=5
Waarschuw ook voor gevallen waarin de compiler de grootte van een constante reduceert
betrokken bij een vergelijking. Bijvoorbeeld: "x + 2 > y" wordt vereenvoudigd tot "x + 1
>= y". Dit wordt alleen op het hoogste waarschuwingsniveau gemeld omdat dit
vereenvoudiging is van toepassing op veel vergelijkingen, dus dit waarschuwingsniveau geeft een zeer
groot aantal valse positieven.

-Wsuggest-attribuut=[zuiver|const|geen terugkeer]
Waarschuw voor gevallen waarin het toevoegen van een kenmerk nuttig kan zijn. De attributen momenteel
ondersteund worden hieronder vermeld.

-Wsuggest-attribuut=puur
-Wsuggest-attribuut=const
-Wsuggest-attribuut=noreturn
Waarschuw voor functies die mogelijk in aanmerking komen voor attributen "pure", "const" of
"geen terugkeer". De compiler waarschuwt alleen voor functies die zichtbaar zijn in andere compilaties
eenheden of (in het geval van "pure" en "const") als het niet kan bewijzen dat de functie
normaal terugkeert. Een functie retourneert normaal als deze geen oneindige bevat
lus noch keert abnormaal terug door te gooien, "abort()" aan te roepen of te vangen. Dit
analyse vereist optie -fipa-pure-const, die standaard is ingeschakeld op -O en
hoger. Hogere optimalisatieniveaus verbeteren de nauwkeurigheid van de analyse.

-Warray-grenzen
Deze optie is alleen actief wanneer: -ftree-vrp is actief (standaard voor -O2 en hoger). Het
waarschuwt voor subscripts op arrays die altijd buiten de grenzen vallen. Deze waarschuwing is:
ingeschakeld door -Muur.

-Wno-div-door-nul
Waarschuw niet voor het delen van gehele getallen tijdens het compileren door nul. Drijvende-kommadeling door
nul wordt niet gewaarschuwd, omdat het een legitieme manier kan zijn om oneindigheden te verkrijgen en
NaN's.

-Wsysteem-headers
Print waarschuwingsberichten voor constructies gevonden in systeemkopbestanden. Waarschuwingen van
systeemheaders worden normaal gesproken onderdrukt, in de veronderstelling dat ze dat meestal niet doen
duiden op echte problemen en zou de uitvoer van de compiler alleen maar moeilijker leesbaar maken. Gebruik makend van
deze opdrachtregeloptie vertelt GCC om waarschuwingen uit systeemheaders te verzenden alsof ze
opgetreden in gebruikerscode. Houd er echter rekening mee dat het gebruik van -Muur in combinatie met deze optie
wil niet waarschuw voor onbekende pragma's in systeemheaders --- daarvoor, -Wunknown-pragma's
moet ook worden gebruikt.

-Wtrampolines
Waarschuw voor trampolines die worden gegenereerd voor verwijzingen naar geneste functies.

Een trampoline is een klein stukje data of code dat tijdens het hardlopen wordt aangemaakt
tijd op de stapel wanneer het adres van een geneste functie wordt genomen, en
wordt gebruikt om de geneste functie indirect aan te roepen. Voor sommige doelen is het
bestaat alleen uit gegevens en vereist dus geen speciale behandeling. Maar,
voor de meeste doelen bestaat het uit code en vereist dus de stapel
uitvoerbaar worden gemaakt om het programma goed te laten werken.

-Wfloat-gelijk
Waarschuw als waarden met drijvende komma worden gebruikt in gelijkheidsvergelijkingen.

Het idee hierachter is dat het soms handig is (voor de programmeur) om
beschouwen drijvende-kommawaarden als benaderingen van oneindig nauwkeurige reële getallen.
Als je dit doet, moet je berekenen (door de code te analyseren, of in sommige
andere manier) de maximale of waarschijnlijke maximale fout die de berekening introduceert, en
sta het toe bij het uitvoeren van vergelijkingen (en bij het produceren van output, maar dat is een
ander probleem). In het bijzonder, in plaats van te testen op gelijkheid, zou u controleren
om te zien of de twee waarden bereiken hebben die elkaar overlappen; en dit wordt gedaan met de
relationele operatoren, dus vergelijkingen van gelijkheid zijn waarschijnlijk verkeerd.

-Wtraditioneel (alleen C en Objective-C)
Waarschuw voor bepaalde constructies die zich anders gedragen in traditioneel en ISO C. Ook
waarschuwen voor ISO C-constructies die geen traditioneel C-equivalent hebben en/of problematisch
constructies die vermeden moeten worden.

· Macroparameters die verschijnen in letterlijke tekenreeksen in de hoofdtekst van de macro. In
traditionele C-macrovervanging vindt plaats binnen letterlijke tekenreeksen, maar niet
in ISO C.

· In traditionele C bestonden sommige preprocessor-richtlijnen niet. traditioneel
preprocessors beschouwen een regel alleen als een richtlijn als de # verscheen in
kolom 1 op de lijn. Daarom -Wtraditioneel waarschuwt voor richtlijnen die
traditionele C begrijpt het maar negeert het omdat de # verschijnt niet als de
eerste teken op de regel. Het suggereert ook dat je richtlijnen zoals #pragma
niet begrepen door traditionele C door ze in te laten springen. Sommige traditioneel
implementaties niet zouden herkennen #elif, dus het stelt voor om het helemaal te vermijden.

· Een functie-achtige macro die zonder argumenten verschijnt.

· De unaire plus-operator.

· De U geheel getal constant achtervoegsel, of de F or L drijvende-komma constante achtervoegsels.
(Traditionele C ondersteunt wel de L achtervoegsel op integer-constanten.) Let op, deze
achtervoegsels verschijnen in macro's die zijn gedefinieerd in de systeemkoppen van de meeste moderne systemen,
bijv. de _MIN/_MAX macro's in " ". Gebruik van deze macro's in gebruikerscode kan
leiden normaal gesproken tot valse waarschuwingen, maar de geïntegreerde preprocessor van GCC heeft:
voldoende context om waarschuwing in deze gevallen te vermijden.

· Een functie die in één blok extern is gedeclareerd en vervolgens wordt gebruikt na het einde van de
blok.

· Een "switch"-statement heeft een operand van het type "long".

· Een niet-"statische" functiedeclaratie volgt op een "statische". Deze constructie is niet
geaccepteerd door sommige traditionele C-compilers.

· Het ISO-type van een geheel getalconstante heeft een andere breedte of ondertekendheid dan zijn
traditionele soort. Deze waarschuwing wordt alleen gegeven als de basis van de constante tien is.
Dwz hexadecimale of octale waarden, die typisch bitpatronen vertegenwoordigen, zijn niet
waarschuwde voor.

· Gebruik van ISO-tekenreeksaaneenschakeling is gedetecteerd.

· Initialisatie van automatische aggregaten.

· Identificatie conflicteert met labels. Traditionele C heeft geen aparte naamruimte voor
etiketten.

· Initialisatie van vakbonden. Als de initialisatie nul is, wordt de waarschuwing weggelaten.
Dit wordt gedaan in de veronderstelling dat de nul-initialisatie in de gebruikerscode verschijnt
afhankelijk van bijv. "__STDC__" om te voorkomen dat initialisatiewaarschuwingen ontbreken en is afhankelijk van:
standaard initialisatie op nul in het traditionele C-geval.

· Conversies door prototypes tussen vaste/drijvende-kommawaarden en vice versa. De
afwezigheid van deze prototypes bij het compileren met traditionele C zou ernstige gevolgen hebben
problemen. Dit is een subset van de mogelijke conversiewaarschuwingen voor de volledige set
. -Wtraditionele-conversie.

· Gebruik van functiedefinities in ISO C-stijl. Deze waarschuwing is met opzet: niet uitgegeven
voor prototypeverklaringen of variadische functies omdat deze ISO C-functies dat wel zullen doen
verschijnen in uw code wanneer u de traditionele C-compatibiliteitsmacro's van libiberty gebruikt,
"PARAMS" en "VPARAMS". Deze waarschuwing wordt ook overgeslagen voor geneste functies
omdat die functie al een GCC-extensie is en dus niet relevant voor
traditionele C-compatibiliteit.

-Wtraditionele-conversie (alleen C en Objective-C)
Waarschuwen als een prototype een typeconversie veroorzaakt die afwijkt van wat er zou gebeuren
tot hetzelfde argument in de afwezigheid van een prototype. Dit omvat conversies van
vast punt naar zwevend en vice versa, en conversies die de breedte wijzigen of
ondertekening van een argument met een vast punt, behalve wanneer dit hetzelfde is als de standaardpromotie.

-Wdeclaratie-na-statement (alleen C en Objective-C)
Waarschuwen wanneer een verklaring wordt gevonden na een verklaring in een blok. Deze constructie, bekend
van C++, werd geïntroduceerd met ISO C99 en is standaard toegestaan ​​in GCC. Het is niet
ondersteund door ISO C90 en werd niet ondersteund door GCC-versies vóór GCC 3.0.

-Wundef
Waarschuwen als een niet-gedefinieerde identifier wordt geëvalueerd in een #als Richtlijn.

-Wno-endif-labels
Waarschuw niet wanneer een #anders of #stop als worden gevolgd door tekst.

-Wschaduw
Waarschuw wanneer een lokale variabele of typedeclaratie een andere variabele in de schaduw stelt,
parameter, type of klasselid (in C++), of wanneer een ingebouwde functie is
geschaduwd. Merk op dat in C++ de compiler niet zal waarschuwen als een lokale variabele een schaduw geeft
struct/class/enum, maar zal waarschuwen als het een expliciete typedef schaduwt.

-Wgroter-dan=len
Waarschuw wanneer een object groter is dan len bytes is gedefinieerd.

-Wframe-groter-dan=len
Waarschuwen als de grootte van een functieframe groter is dan len bytes. De berekening gedaan
om de grootte van het stapelframe te bepalen, is bij benadering en niet conservatief. De daadwerkelijke
vereisten kunnen iets groter zijn dan len ook als u geen waarschuwing krijgt. In
daarnaast elke ruimte die is toegewezen via "alloca", arrays met variabele lengte of gerelateerd
constructen wordt niet door de compiler meegenomen bij het bepalen van het al dan niet uitgeven van een
waarschuwing.

-Wno-vrij-nonheap-object
Waarschuw niet wanneer u probeert een object te bevrijden dat niet op de heap was toegewezen.

-Wstack-gebruik=len
Waarschuwen als het stapelgebruik van een functie groter kan zijn dan len bytes. de berekening
gedaan om te bepalen dat het stapelgebruik conservatief is. Elke ruimte toegewezen via "alloca",
arrays met variabele lengte of gerelateerde constructies wordt door de compiler opgenomen wanneer:
bepalen of een waarschuwing moet worden gegeven.

Het bericht is in overeenstemming met de output van -fstack-gebruik.

· Als het stapelgebruik volledig statisch is maar het opgegeven aantal overschrijdt, is dit:

waarschuwing: stackgebruik is 1120 bytes

· Als het stapelgebruik (gedeeltelijk) dynamisch maar begrensd is, is het:

waarschuwing: stackgebruik kan 1648 bytes zijn

· Als het stapelgebruik (gedeeltelijk) dynamisch en niet begrensd is, is het:

waarschuwing: stapelgebruik is mogelijk onbeperkt

-Wunsafe-loop-optimalisaties
Waarschuw als de lus niet kan worden geoptimaliseerd omdat de compiler niets kan aannemen
de grenzen van de lusindices. Met -funsafe-loop-optimalisaties waarschuwen als de compiler
zulke aannames gedaan.

-Wno-pedant-ms-formaat (Alleen MinGW-doelen)
Schakelt de waarschuwingen uit over niet-ISO "printf" / "scanf" formaatbreedtespecificaties "I32",
"I64" en "I" gebruikt op Windows-doelen, afhankelijk van de MS-runtime, wanneer u gebruikt
de opties -Wformaat en -pedant zonder gnu-extensies.

-Wpointer-arith
Waarschuw voor alles dat afhangt van de "grootte van" een functietype of van "void". GNU C
kent deze typen een grootte van 1 toe voor het gemak in berekeningen met "void *"
verwijzingen en verwijzingen naar functies. Waarschuw in C++ ook wanneer een rekenkundige bewerking
omvat "NULL". Deze waarschuwing wordt ook ingeschakeld door: -pedant.

-Wtype-limieten
Waarschuw als een vergelijking altijd waar of altijd onwaar is vanwege het beperkte bereik van de
gegevenstype, maar waarschuw niet voor constante expressies. Waarschuw bijvoorbeeld als een niet-ondertekend
variabele wordt vergeleken met nul met < or >=. Deze waarschuwing wordt ook ingeschakeld door:
-Wextra.

-Wbad-functie-cast (alleen C en Objective-C)
Waarschuw wanneer een functieaanroep wordt gecast naar een niet-overeenkomend type. Waarschuw bijvoorbeeld als
"int malloc()" wordt gegoten naar "anything *".

-Wc++-compatibel (alleen C en Objective-C)
Waarschuw voor ISO C-constructies die buiten de gemeenschappelijke subset van ISO C en ISO vallen
C++, bijv. verzoek om impliciete conversie van "void *" naar een pointer naar niet-"void"
type.

-Wc++11-compatibel (alleen C++ en Objective-C++)
Waarschuw voor C++-constructies waarvan de betekenis verschilt tussen ISO C++ 1998 en ISO C++ 2011,
bijv. identifiers in ISO C++ 1998 die trefwoorden zijn in ISO C++ 2011. Deze waarschuwing
gaat aan -vernauwing en is ingeschakeld door -Muur.

-Wcast-kwaliteit
Waarschuw wanneer een aanwijzer wordt gebruikt om een ​​typekwalificatie van het doeltype te verwijderen.
Waarschuw bijvoorbeeld als een "const char *" wordt gecast naar een gewone "char *".

Waarschuw ook bij het maken van een cast die op een onveilige manier een typekwalificatie introduceert. Voor
het casten van "char **" naar "const char **" is bijvoorbeeld onveilig, zoals in dit voorbeeld:

/* p is char ** waarde. */
const char **q = (const char **) p;
/* Toewijzing van alleen-lezen tekenreeks aan const char * is OK. */
*q = "tekenreeks";
/* Nu wijst de char**-aanwijzer naar alleen-lezen geheugen. */
**p = 'b';

-Wcast-uitlijnen
Waarschuw wanneer een aanwijzer zodanig wordt geplaatst dat de vereiste uitlijning van het doel is
toegenomen. Waarschuw bijvoorbeeld als een "char *" wordt gecast naar een "int *" op machines waar
gehele getallen zijn alleen toegankelijk bij grenzen van twee of vier bytes.

-Wwrite-tekenreeksen
Geef bij het compileren van C stringconstanten het type "const char[lengte]" dus dat kopiëren
het adres van een in een niet-"const" "char *" pointer krijgt een waarschuwing. Deze
waarschuwingen helpen u tijdens het compileren code te vinden die kan proberen in een string te schrijven
constant, maar alleen als je heel voorzichtig bent geweest met het gebruik van "const" in declaraties
en prototypen. Anders wordt het alleen maar vervelend. Dit is waarom we niet hebben gemaakt
-Muur deze waarschuwingen opvragen.

Waarschuw bij het compileren van C++ voor de verouderde conversie van letterlijke tekenreeksen naar "char
*". Deze waarschuwing is standaard ingeschakeld voor C++-programma's.

-Wingewikkeld
Waarschuw voor variabelen die kunnen worden gewijzigd door langjmp or vvork. Deze waarschuwing is ook:
ingeschakeld door -Wextra.

-Wconversie
Waarschuw voor impliciete conversies die een waarde kunnen wijzigen. Dit omvat conversies
tussen echt en geheel getal, zoals "abs (x)" wanneer "x" "dubbel" is; conversies tussen
ondertekend en niet ondertekend, zoals "unsigned ui = -1"; en conversies naar kleinere typen, zoals
"sqrtf (M_PI)". Waarschuw niet voor expliciete casts zoals "abs ((int) x)" en "ui =
(unsigned) -1", of als de waarde niet wordt gewijzigd door de conversie zoals in "abs (2.0)".
Waarschuwingen over conversies tussen getekende en niet-ondertekende gehele getallen kunnen worden uitgeschakeld door:
gebruik -Wno-teken-conversie.

Waarschuw voor C++ ook voor verwarrende overbelastingsresolutie voor door de gebruiker gedefinieerde conversies; en
conversies die nooit een typeconversieoperator zullen gebruiken: conversies naar "ongeldig", de
hetzelfde type, een basisklasse of een verwijzing daarnaar. Waarschuwingen over conversies tussen
ondertekende en niet-ondertekende gehele getallen zijn standaard uitgeschakeld in C++, tenzij -Wsign-conversie
expliciet is ingeschakeld.

-Wno-conversie-null (alleen C++ en Objective-C++)
Waarschuw niet voor conversies tussen "NULL" en non-pointer types. -Wconversie-null is
standaard ingeschakeld.

-Wzero-als-null-pointer-constante (alleen C++ en Objective-C++)
Waarschuwen wanneer een letterlijke '0' wordt gebruikt als nul-aanwijzerconstante. Dit kan handig zijn om
de conversie naar "nullptr" in C++11 vergemakkelijken.

-Weeg lichaam
Waarschuw als er een leeg lichaam voorkomt in een if, anders or do en uitspraak. Deze waarschuwing is:
ook ingeschakeld door -Wextra.

-Wenum-vergelijken
Waarschuw voor een vergelijking tussen waarden van verschillende opgesomde typen. In C++ enumeral
mismatches in voorwaardelijke expressies worden ook gediagnosticeerd en de waarschuwing wordt ingeschakeld door:
standaard. In C wordt deze waarschuwing geactiveerd door: -Muur.

-Wjump-missers-init (C, alleen Objective-C)
Waarschuwen als een "goto"-instructie of een "switch"-instructie naar voren springt over de
initialisatie van een variabele, of springt terug naar een label nadat de variabele is
begonnen. Dit waarschuwt alleen voor variabelen die worden geïnitialiseerd wanneer ze zijn
verklaard. Deze waarschuwing wordt alleen ondersteund voor C en Objective-C; in C++ dit soort
branch is in ieder geval een fout.

-Wjump-missers-init is inbegrepen in -Wc++-compatibel. Het kan worden uitgeschakeld met de
-Wno-jump-missers-init optie.

-Wsign-vergelijk
Waarschuw wanneer een vergelijking tussen ondertekende en niet-ondertekende waarden een onjuiste
resultaat wanneer de ondertekende waarde wordt geconverteerd naar niet-ondertekend. Deze waarschuwing is ook ingeschakeld
by -Wextra; om de andere waarschuwingen van te krijgen -Wextra zonder deze waarschuwing, gebruik -Wextra
-Wno-teken-vergelijk.

-Wsign-conversie
Waarschuw voor impliciete conversies die het teken van een geheel getal kunnen veranderen, zoals
een getekende integer-uitdrukking toewijzen aan een niet-ondertekende integer-variabele. een expliciete
cast dempt de waarschuwing. In C wordt deze optie ook ingeschakeld door: -Wconversie.

-Wadres
Waarschuw voor verdacht gebruik van geheugenadressen. Deze omvatten het gebruik van het adres van a
functie in een voorwaardelijke uitdrukking, zoals "void func(void); if (func)", en
vergelijkingen met het geheugenadres van een letterlijke tekenreeks, zoals "if (x == "abc")".
Dergelijk gebruik duidt meestal op een programmeerfout: het adres van een functie altijd
evalueert naar waar, dus het gebruik ervan in een voorwaardelijke geeft meestal aan dat de programmeur
vergat de haakjes in een functieaanroep; en vergelijkingen met letterlijke tekenreeksen
resulteren in niet-gespecificeerd gedrag en zijn niet overdraagbaar in C, dus geven ze meestal aan:
dat de programmeur van plan was om "strcmp" te gebruiken. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wlogische-op
Waarschuw voor verdacht gebruik van logische operatoren in expressies. Dit omvat het gebruik van
logische operators in contexten waar een bitsgewijze operator waarschijnlijk wordt verwacht.

-Waggregate-retour
Waarschuw als er functies zijn gedefinieerd of aangeroepen die structuren of vakbonden retourneren. (In
talen waar u een array kunt retourneren, roept dit ook een waarschuwing op.)

-Wno-attributen
Waarschuw niet als een onverwachte "__attribute__" wordt gebruikt, zoals niet-herkende attributen,
functieattributen toegepast op variabelen, enz. Dit stopt fouten niet voor
onjuist gebruik van ondersteunde attributen.

-Wno-ingebouwde-macro-opnieuw gedefinieerd
Waarschuw niet als bepaalde ingebouwde macro's opnieuw worden gedefinieerd. Dit onderdrukt waarschuwingen voor:
herdefinitie van "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", en
"__BASE_FILE__".

-Wstrict-prototypes (alleen C en Objective-C)
Waarschuwen als een functie wordt gedeclareerd of gedefinieerd zonder de argumenttypes op te geven. (Een
ouderwetse functiedefinitie is toegestaan ​​zonder waarschuwing indien voorafgegaan door a
declaratie die de argumenttypes specificeert.)

-Wold-stijl-verklaring (alleen C en Objective-C)
Waarschuw voor verouderd gebruik, volgens de C-norm, in een aangifte. Voor
waarschuw bijvoorbeeld als opslagklasse-specificaties zoals "statisch" niet de eerste dingen zijn in a
verklaring. Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wold-stijl-definitie (alleen C en Objective-C)
Waarschuw als er een ouderwetse functiedefinitie wordt gebruikt. Er wordt een waarschuwing gegeven, ook al is er
een eerder prototype.

-Ontbrekend-parametertype (alleen C en Objective-C)
Een functieparameter wordt gedeclareerd zonder een typespecificatie in K&R-achtige functies:

leegte foo(bar) { }

Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wmissing-prototypes (alleen C en Objective-C)
Waarschuwen als een globale functie is gedefinieerd zonder een eerdere prototypedeclaratie. Dit
waarschuwing wordt gegeven, zelfs als de definitie zelf een prototype levert. Er wordt gestreefd naar
globale functies detecteren die niet zijn gedeclareerd in headerbestanden.

-Wmissing-verklaringen
Waarschuwen als een globale functie is gedefinieerd zonder voorafgaande declaratie. Doe dit zelfs als
de definitie zelf levert een prototype op. Gebruik deze optie om global te detecteren
functies die niet zijn gedeclareerd in headerbestanden. In C++ worden geen waarschuwingen gegeven voor
functiesjablonen, of voor inline functies, of voor functies in anonieme naamruimten.

-Wmissing-veld-initializers
Waarschuw als er in de initialisatiefunctie van een structuur enkele velden ontbreken. Bijvoorbeeld het volgende:
code zou zo'n waarschuwing veroorzaken, omdat "xh" impliciet nul is:

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

Deze optie waarschuwt niet voor aangewezen initializers, dus de volgende wijziging:
zou geen waarschuwing activeren:

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

Deze waarschuwing is opgenomen in: -Wextra. om andere te krijgen -Wextra waarschuwingen zonder deze,
. -Wextra -Wno-ontbrekende-veld-initializers.

-Wmissing-formaat-kenmerk
Waarschuwen voor functieaanwijzers die mogelijk kandidaten zijn voor "format"-attributen. Opmerking
dit zijn alleen mogelijke kandidaten, geen absolute. GCC raadt die functie
pointers met "format" attributen die worden gebruikt bij toewijzing, initialisatie,
parameterpassing of returnstatements moeten een bijbehorend "format"-attribuut hebben
in het resulterende type. Dwz de linkerkant van de opdracht of initialisatie,
het type van de parametervariabele of het retourtype van de bevattende functie
moet ook een "format"-attribuut hebben om de waarschuwing te vermijden.

GCC waarschuwt ook voor functiedefinities die mogelijk in aanmerking komen voor "format"
attributen. Nogmaals, dit zijn slechts mogelijke kandidaten. GCC raadt dat "formaat"
attributen kunnen geschikt zijn voor elke functie die een functie zoals "vprintf" aanroept
of "vscanf", maar dit is misschien niet altijd het geval, en sommige functies waarvoor
"format"-attributen zijn mogelijk niet gedetecteerd.

-Wno-multichar
Waarschuw niet als een constante van meerdere tekens ('FOOF') is gebruikt. Meestal geven ze een
typfout in de code van de gebruiker, omdat deze door de implementatie gedefinieerde waarden hebben en dat niet zou mogen zijn
gebruikt in draagbare code.

-Wnormalized=
In ISO C en ISO C++ zijn twee identifiers verschillend als ze verschillende reeksen zijn van
karakters. Soms echter wanneer tekens buiten de standaard ASCII-tekenset
worden gebruikt, kunt u twee verschillende tekenreeksen hebben die er hetzelfde uitzien. Vermijden
verwarring, bevat de ISO 10646-norm enkele: normalisatie reglement welke wanneer toegepast?
zorg ervoor dat twee reeksen die er hetzelfde uitzien, in dezelfde reeks worden omgezet. GCC
kan u waarschuwen als u identifiers gebruikt die niet zijn genormaliseerd; deze optie
regelt die waarschuwing.

Er zijn vier waarschuwingsniveaus die door GCC worden ondersteund. De standaard is -Wgenormaliseerd=nfc,
die waarschuwt voor elke identifier die niet in de ISO 10646 "C" genormaliseerde vorm staat,
NFC. NFC is de aanbevolen vorm voor de meeste toepassingen.

Helaas zijn er enkele tekens toegestaan ​​in identifiers door ISO C en ISO C++
die, wanneer omgezet in NFC, niet zijn toegestaan ​​in identifiers. Dat wil zeggen, er is geen manier
om deze symbolen in draagbare ISO C of C++ te gebruiken en al uw identifiers in NFC te hebben.
-Wgenormaliseerd=id onderdrukt de waarschuwing voor deze tekens. Het is te hopen dat de toekomst
versies van de betrokken standaarden zullen dit corrigeren, daarom is deze optie dat niet
de standaard.

U kunt de waarschuwing voor alle tekens uitschakelen door te schrijven -Wnormalized=geen. Je
zou dit alleen willen doen als u een ander normalisatieschema gebruikt (zoals
"D"), omdat je anders gemakkelijk bugs kunt maken die letterlijk onmogelijk zijn
te zien.

Sommige tekens in ISO 10646 hebben verschillende betekenissen, maar zien er in sommige lettertypen identiek uit
of weergavemethodologieën, vooral nadat de opmaak is toegepast. Bijvoorbeeld
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", wordt weergegeven zoals een gewone "n"
dat in superscript is geplaatst. ISO 10646 definieert de NFKC normalisatie
schema om al deze ook in een standaardformulier om te zetten, en GCC zal waarschuwen als uw
code is niet in NFKC als je gebruikt -Wgenormaliseerd=nfkc. Deze waarschuwing is vergelijkbaar met
waarschuwing voor elke identifier die de letter O bevat, omdat deze verward kan zijn
met het cijfer 0, en is dus niet de standaard, maar kan nuttig zijn als lokale codering
conventie als de programmeeromgeving niet kan worden hersteld om deze weer te geven
karakters duidelijk.

-Wno-verouderd
Waarschuw niet voor het gebruik van verouderde functies.

-Wno-verouderde-declaraties
Waarschuw niet voor het gebruik van functies, variabelen en typen die zijn gemarkeerd als verouderd door
met het kenmerk "verouderd".

-Wno-overloop
Waarschuw niet voor overloop tijdens het compileren in constante expressies.

-Woverride-init (alleen C en Objective-C)
Waarschuwen als een geïnitialiseerd veld zonder bijwerkingen wordt overschreven bij gebruik van aangewezen
initialen.

Deze waarschuwing is opgenomen in: -Wextra. om andere te krijgen -Wextra waarschuwingen zonder deze,
. -Wextra -Wno-override-init.

-Wingepakt
Waarschuwen als een structuur het attribuut ingepakt krijgt, maar het attribuut ingepakt heeft geen
invloed op de indeling of grootte van de constructie. Dergelijke structuren kunnen verkeerd zijn uitgelijnd voor
weinig voordeel. In deze code zal bijvoorbeeld de variabele "fx" in "struct bar" dat doen
verkeerd uitgelijnd zijn, ook al heeft "struct bar" zelf niet het ingepakte attribuut:

struct foo {
int x;
teken a, b, c, d;
} __attribute __ ((verpakt));
structuurbalk {
teken z;
structuur foo f;
};

-Wpacked-bitfield-compatibel
De 4.1, 4.2 en 4.3 series van GCC negeren het "packed" attribuut op bit-fields van het type
"char". Dit is opgelost in GCC 4.4, maar de wijziging kan leiden tot verschillen in de
structuur lay-out. GCC informeert u wanneer de offset van een dergelijk veld is gewijzigd in GCC
4.4. Er is bijvoorbeeld geen 4-bits opvulling meer tussen veld "a" en "b" in deze
structuur:

structuur foo
{
teken a:4;
teken b:8;
} __attribuut__ ((verpakt));

Deze waarschuwing is standaard ingeschakeld. Gebruik maken van -Wno-verpakt-bitfield-compat om dit uit te schakelen
waarschuwing.

-Gevoerd
Waarschuwen als opvulling is opgenomen in een structuur, hetzij om een ​​element van de . uit te lijnen
structuur of om de hele structuur uit te lijnen. Soms als dit gebeurt is het mogelijk
om de velden van de structuur te herschikken om de opvulling te verminderen en zo de
structuur kleiner.

-Wredundant-verklaart
Waarschuw als iets meer dan eens in hetzelfde bereik wordt gedeclareerd, zelfs in gevallen waarin:
meervoudige aangifte is geldig en verandert niets.

-Wnested-externen (alleen C en Objective-C)
Waarschuwen als een "externe" declaratie wordt aangetroffen binnen een functie.

-Winlijn
Waarschuwen als een functie niet inline kan worden gemaakt en deze als inline is gedeclareerd. Zelfs hiermee
optie, zal de compiler niet waarschuwen voor fouten in inline-functies die zijn gedeclareerd in
systeemkoppen.

De compiler gebruikt verschillende heuristieken om te bepalen of een
functie. De compiler houdt bijvoorbeeld rekening met de grootte van de functie die:
inline en de hoeveelheid inline die al is gedaan in de huidige functie.
Daarom kunnen schijnbaar onbeduidende veranderingen in het bronprogramma de
waarschuwingen geproduceerd door -Winlijn verschijnen of verdwijnen.

-Wno-ongeldige-offsetof (alleen C++ en Objective-C++)
Onderdruk waarschuwingen voor het toepassen van de compensatie van macro naar een niet-POD-type. Volgens
de ISO C++-norm uit 1998, van toepassing: compensatie van naar een niet-POD-type is niet gedefinieerd. In
bestaande C++-implementaties, maar compensatie van geeft meestal betekenisvolle resultaten
zelfs wanneer toegepast op bepaalde soorten niet-POD-typen. (Zoals een simpele struct dat
kan alleen geen POD-type zijn omdat het een constructor heeft.) Deze vlag is voor
gebruikers die zich ervan bewust zijn dat ze niet-overdraagbare code schrijven en die opzettelijk
ervoor gekozen om de waarschuwing erover te negeren.

De beperkingen op compensatie van kan worden versoepeld in een toekomstige versie van de C++-standaard.

-Wno-in-naar-pointer-cast
Onderdruk waarschuwingen van casts naar pointertype van een geheel getal met een andere grootte. In
C++, casten naar een pointertype van kleiner formaat is een fout. Wint-naar-wijzer-cast is
standaard ingeschakeld.

-Wno-aanwijzer-naar-int-cast (alleen C en Objective-C)
Onderdruk waarschuwingen van casts van een aanwijzer naar een geheel getal van een andere grootte.

-Winvalid-pch
Waarschuwen als een voorgecompileerde koptekst wordt gevonden in het zoekpad, maar niet kan worden gebruikt.

-Lang-lang
Waarschuw als lang lang soort wordt gebruikt. Dit wordt mogelijk gemaakt door ofwel -pedant or -Wtraditioneel
in de modi ISO C90 en C++98. Om de waarschuwingsberichten te blokkeren, gebruik -Wno-lang-lang.

-Wvariadic-macro's
Waarschuw als variadische macro's worden gebruikt in de pedante ISO C90-modus of de alternatieve GNU-syntaxis
in de pedante ISO C99-modus. Dit is standaard. Om de waarschuwingsberichten te blokkeren, gebruik
-Wno-variadic-macro's.

-Wvector-operatie-prestaties
Waarschuw als vectorbewerking niet wordt geïmplementeerd via SIMD-mogelijkheden van de architectuur.
Vooral nuttig voor het afstemmen van prestaties. Vectorbewerking kan worden geïmplementeerd
"stuksgewijze", wat betekent dat de scalaire bewerking wordt uitgevoerd op elke vector
element; "parallel", wat betekent dat de vectorbewerking wordt uitgevoerd met
scalairen van een breder type, die normaal gesproken efficiënter zijn; en "als single"
scalair", wat betekent dat vector past in een scalair type.

-Wvla
Waarschuw als array met variabele lengte in de code wordt gebruikt. -Wno-vla zal voorkomen dat
-pedant waarschuwing van de variabele lengte array.

-Wvluchtig-register-var
Waarschuwen als een registervariabele vluchtig wordt verklaard. De vluchtige modifier niet
alle optimalisaties blokkeren die lees- en/of schrijfbewerkingen om te registreren kunnen elimineren
variabelen. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wdisabled-optimalisatie
Waarschuwen als een aangevraagde optimalisatiepas is uitgeschakeld. Deze waarschuwing is over het algemeen niet
aangeven dat er iets mis is met je code; het geeft alleen aan dat GCC's
optimizers waren niet in staat om effectief met de code om te gaan. Vaak is dat het probleem
uw code is te groot of te complex; GCC zal weigeren programma's te optimaliseren wanneer de
optimalisatie zelf zal waarschijnlijk buitensporige hoeveelheden tijd in beslag nemen.

-Wpointer-teken (alleen C en Objective-C)
Waarschuw voor het doorgeven van aanwijzerargumenten of toewijzingen met verschillende ondertekening. Dit
optie wordt alleen ondersteund voor C en Objective-C. Het wordt geïmpliceerd door -Muur en bij
-pedant, die kan worden uitgeschakeld met -Wno-wijzer-teken.

-Wstack-beschermer
Deze optie is alleen actief wanneer: -stack-beschermer is actief. Het waarschuwt voor functies
die niet beschermd zijn tegen stack smashing.

-Wno-spatlap
Onderdruk waarschuwingen over constructies die niet kunnen worden geïnstrumenteerd door -fspatlap.

-Woverlengte-snaren
Waarschuw voor stringconstanten die langer zijn dan de "minimale maximale" lengte
gespecificeerd in de C-norm. Moderne compilers staan ​​over het algemeen stringconstanten toe die:
zijn veel langer dan de minimumlimiet van de standaard, maar zeer draagbare programma's zouden moeten
vermijd het gebruik van langere snaren.

De limiet is van toepassing na string constante aaneenschakeling, en telt niet de trailing
NUL. In C90 was de limiet 509 tekens; in C99 werd het verhoogd tot 4095. C++98 wel
specificeer geen normatief minimum maximum, dus we diagnosticeren overlengte strings niet in
C ++.

Deze optie wordt geïmpliceerd door: -pedant, en kan worden uitgeschakeld met -Wno-overlengte-strings.

-Wunsuffixed-float-constanten (alleen C en Objective-C)
GCC geeft een waarschuwing voor elke zwevende constante die geen achtervoegsel heeft. Wanneer
gebruikt samen met -Wsysteem-headers het zal waarschuwen voor dergelijke constanten in de systeemkop
bestanden. Dit kan handig zijn bij het voorbereiden van code voor gebruik met de "FLOAT_CONST_DECIMAL64"
pragma van de decimale drijvende-komma-uitbreiding naar C99.

Opties For Debugging Your Programma or GCC
GCC heeft verschillende speciale opties die worden gebruikt voor het debuggen van uw programma of GCC:

-g Produceer foutopsporingsinformatie in het oorspronkelijke formaat van het besturingssysteem (stabs, COFF,
XCOFF of DWARF 2). GDB kan met deze foutopsporingsinformatie werken.

Op de meeste systemen die het stabs-formaat gebruiken, -g maakt gebruik van extra foutopsporingsinformatie mogelijk
die alleen GDB kan gebruiken; deze extra informatie zorgt ervoor dat debuggen beter werkt in GDB, maar
zal waarschijnlijk andere debuggers laten crashen of weigeren het programma te lezen. Als je wil
om met zekerheid te controleren of de extra informatie moet worden gegenereerd, gebruik -gstabs+,
-gstabs, -gxcoff+, -gxcoffof -gvms (zie hieronder).

Met GCC kunt u gebruik maken van -g Met -O. De snelkoppelingen die door geoptimaliseerde code zijn genomen, kunnen:
levert soms verrassende resultaten op: sommige variabelen die u hebt opgegeven, bestaan ​​mogelijk niet op
alle; flow of control kan zich even verplaatsen waar u het niet had verwacht; sommige uitspraken kunnen
niet worden uitgevoerd omdat ze constante resultaten berekenen of omdat hun waarden al op waren
hand; sommige instructies kunnen op verschillende plaatsen worden uitgevoerd omdat ze zijn verplaatst
lussen.

Toch blijkt het mogelijk om geoptimaliseerde output te debuggen. Dit maakt het redelijk
om de optimizer te gebruiken voor programma's die mogelijk fouten bevatten.

De volgende opties zijn handig wanneer GCC wordt gegenereerd met de mogelijkheid voor meer
dan één debugging-indeling.

-ggdb
Produceer foutopsporingsinformatie voor gebruik door GDB. Dit betekent om de meest expressieve
formaat beschikbaar (DWARF 2, stabs of het oorspronkelijke formaat als geen van beide is
ondersteund), inclusief GDB-extensies indien mogelijk.

-gstabs
Produceer foutopsporingsinformatie in stabs-formaat (als dat wordt ondersteund), zonder GDB
uitbreidingen. Dit is het formaat dat door DBX op de meeste BSD-systemen wordt gebruikt. Op MIPS, Alpha en
System V Release 4-systemen deze optie produceert steekproeven debugging-uitvoer die niet
begrepen door DBX of SDB. Op System V Release 4-systemen vereist deze optie de GNU
Verzamelen.

-feliminate-ongebruikte-debug-symbolen
Produceer foutopsporingsinformatie in stabs-indeling (als dat wordt ondersteund), voor alleen symbolen
die daadwerkelijk worden gebruikt.

-femit-class-debug-altijd
In plaats van foutopsporingsinformatie voor een C++-klasse uit te zenden in slechts één objectbestand,
zend het uit in alle objectbestanden met behulp van de klasse. Deze optie mag alleen worden gebruikt met:
debuggers die niet in staat zijn om te gaan met de manier waarop GCC normaal foutopsporingsinformatie verzendt
voor klassen omdat het gebruik van deze optie de foutopsporingsinformatie vergroot
met maar liefst een factor twee.

-fno-debug-types-sectie
Bij gebruik van DWARF v4 of hoger worden standaard DIE's in hun eigen type geplaatst
.debug_types sectie in plaats van ze onderdeel te maken van de .debug_info sectie. Het is
efficiënter om ze in aparte comdat-secties te plaatsen, aangezien de linker dan zal zijn
in staat om duplicaten te verwijderen. Maar niet alle DWARF-consumenten ondersteunen .debug_types-secties
nog niet.

-gstabs+
Produceer foutopsporingsinformatie in stabs-formaat (als dat wordt ondersteund), met behulp van GNU
extensies die alleen begrepen worden door de GNU debugger (GDB). Het gebruik van deze extensies is:
waarschijnlijk andere debuggers laten crashen of weigeren het programma te lezen.

-gcoff
Produceer foutopsporingsinformatie in COFF-formaat (als dat wordt ondersteund). Dit is de
formaat gebruikt door SDB op de meeste System V-systemen vóór System V Release 4.

-gxcoff
Produceer foutopsporingsinformatie in XCOFF-formaat (als dat wordt ondersteund). Dit is de
formaat gebruikt door de DBX debugger op IBM RS/6000-systemen.

-gxcoff+
Produceer foutopsporingsinformatie in XCOFF-formaat (als dat wordt ondersteund), met behulp van GNU
extensies die alleen begrepen worden door de GNU debugger (GDB). Het gebruik van deze extensies is:
waardoor andere debuggers waarschijnlijk crashen of weigeren het programma te lezen, en dit kan leiden tot:
andere assemblers dan de GNU-assembler (GAS) met een fout mislukken.

-gdwerg-versie
Produceer foutopsporingsinformatie in DWARF-indeling (indien ondersteund). Dit is de
formaat gebruikt door DBX op IRIX 6. De waarde van versie kan 2, 3 of 4 zijn; de
standaardversie is 2.

Merk op dat met DWARF versie 2 sommige poorten een aantal niet-
conflicterende DWARF 3-extensies in de afwikkeltabellen.

Versie 4 vereist mogelijk GDB 7.0 en -fvar-tracking-opdrachten voor maximaal voordeel.

-grecord-gcc-schakelaars
Deze schakeloptie zorgt ervoor dat de opdrachtregelopties die worden gebruikt om de compiler aan te roepen die kan:
invloed op het genereren van code die moet worden toegevoegd aan het kenmerk DW_AT_producer in DWARF
debug informatie. De opties zijn aaneengeschakeld met spaties die ze scheiden van
elkaar en van de compilerversie. Zie ook -frecord-gcc-schakelaars voor een ander
manier om compileropties op te slaan in het objectbestand.

-gno-record-gcc-schakelaars
Niet toestaan ​​om opdrachtregelopties toe te voegen aan het DW_AT_producer-kenmerk in DWARF
foutopsporingsinformatie. Dit is de standaardinstelling.

-gstrict-dwerg
Niet toestaan ​​dat extensies van een latere DWARF-standaardversie worden gebruikt dan geselecteerd met
-gdwerg-versie. Op de meeste doelen die niet-conflicterende DWARF-extensies van later gebruiken
standaardversies zijn toegestaan.

-gno-strikte-dwerg
Toestaan ​​dat extensies van een latere DWARF-standaardversie worden gebruikt dan geselecteerd met
-gdwerg-versie.

-gvms
Produceer foutopsporingsinformatie in VMS-foutopsporingsindeling (indien ondersteund). Dit is de
formaat gebruikt door DEBUG op VMS-systemen.

-gniveau
-ggdbniveau
-gstabsniveau
-gcoffniveau
-gxcoffniveau
-gvmsniveau
Vraag foutopsporingsinformatie aan en gebruik ook niveau om aan te geven hoeveel informatie. De
standaardniveau is 2.

Niveau 0 produceert helemaal geen foutopsporingsinformatie. Dus, -g0 ontkent -g.

Niveau 1 levert minimale informatie op, genoeg voor het maken van backtraces in delen van de
programma dat u niet van plan bent te debuggen. Dit omvat beschrijvingen van functies en
externe variabelen, maar geen informatie over lokale variabelen en geen regelnummers.

Niveau 3 bevat extra informatie, zoals alle macrodefinities die aanwezig zijn in de
programma. Sommige debuggers ondersteunen macro-uitbreiding wanneer u -g3.

-gdwerg-2 accepteert geen aaneengeschakeld debug-niveau, omdat GCC vroeger een
optie -gdwerg dat bedoeld was om foutopsporingsinformatie te genereren in versie 1 van de DWARF
formaat (wat heel anders is dan versie 2), en het zou te verwarrend zijn geweest.
Dat debug-formaat is al lang achterhaald, maar de optie kan nu niet worden gewijzigd. Gebruik in plaats daarvan
een extra -gniveau optie om het foutopsporingsniveau voor DWARF te wijzigen.

-goggle
Schakel het genereren van foutopsporingsinformatie uit, als het weglaten van deze optie deze zou hebben gegenereerd,
of zet hem anders aan op niveau 2. De positie van dit argument in de opdrachtregel
maakt niet uit, het wordt van kracht nadat alle andere opties zijn verwerkt, en dat gebeurt ook
slechts één keer, ongeacht hoe vaak het wordt gegeven. Deze is vooral bedoeld om te gebruiken
Met -fvergelijk-foutopsporing.

-fdump-finale-insns[=filet]
Dump de laatste interne representatie (RTL) naar filet. Als het optionele argument is
weggelaten (of als filet is "."), wordt de naam van het dumpbestand bepaald door toevoeging
".gkd" naar de naam van het compilatie-uitvoerbestand.

-fvergelijk-foutopsporing[=kiest]
Als er geen fout optreedt tijdens het compileren, voert u de compiler een tweede keer uit en voegt u kiest en
-fvergelijk-foutopsporing-seconde aan de argumenten doorgegeven aan de tweede compilatie. Dump de
definitieve interne weergave in beide compilaties, en druk een fout af als ze verschillen.

Als het gelijkteken wordt weggelaten, is de standaard -goggle is gebruikt.

De omgevingsvariabele GCC_COMPARE_DEBUG, indien gedefinieerd, niet leeg en niet nul,
maakt impliciet mogelijk -fvergelijk-foutopsporing. Indien GCC_COMPARE_DEBUG is gedefinieerd als een tekenreeks
beginnend met een streepje, dan wordt het gebruikt voor kiest, anders de standaard -goggle is
gebruikt.

-fvergelijk-debug=, met het gelijkteken maar zonder kiest, is gelijk aan
-fno-vergelijk-debug, die het dumpen van de uiteindelijke weergave en de
tweede compilatie, zelfs voorkomen GCC_COMPARE_DEBUG van kracht worden.

Om volledige dekking te verifiëren tijdens: -fvergelijk-foutopsporing testen, instellen GCC_COMPARE_DEBUG zeggen
-fcompare-debug-niet-overschreven, die GCC zal afwijzen als een ongeldige optie in elk
daadwerkelijke compilatie (in plaats van voorbewerking, assemblage of koppeling). Om maar een
waarschuwing, instelling GCC_COMPARE_DEBUG naar -w%n-fvergelijk-foutopsporing niet overschreven zal ik doen.

-fvergelijk-foutopsporing-seconde
Deze optie wordt impliciet doorgegeven aan de compiler voor de tweede gevraagde compilatie
by -fvergelijk-foutopsporing, samen met opties om waarschuwingen uit te zetten en andere opties weg te laten
dat zou leiden tot neveneffect compiler-uitvoer naar bestanden of naar de standaarduitvoer.
Dumpbestanden en bewaarde tijdelijke bestanden worden hernoemd zodat ze de ".gk" bevatten
extra extensie tijdens de tweede compilatie, om te voorkomen dat deze worden overschreven
gegenereerd door de eerste.

Wanneer deze optie wordt doorgegeven aan het compilerstuurprogramma, zorgt dit ervoor dat de eerste compilatie naar
worden overgeslagen, wat het nuttig maakt voor weinig anders dan het debuggen van de eigenlijke compiler.

-feliminate-dwerg2-dups
Comprimeer DWARF2-foutopsporingsinformatie door dubbele informatie over elk te verwijderen
symbool. Deze optie heeft alleen zin bij het genereren van DWARF2-foutopsporingsinformatie
Met -gdwerg-2.

-femit-struct-debug-baseonly
Stuur debug-informatie voor struct-achtige typen alleen uit als de basisnaam van de
compilatiebronbestand komt overeen met de basisnaam van het bestand waarin de structuur is gedefinieerd.

Deze optie verkleint de grootte van de foutopsporingsinformatie aanzienlijk, maar
aanzienlijk potentieel verlies in type-informatie voor de debugger. Zien
-femit-struct-debug-gereduceerd voor een minder agressieve optie. Zien
-femit-struct-debug-gedetailleerd voor meer gedetailleerde controle.

Deze optie werkt alleen met DWARF 2.

-femit-struct-debug-gereduceerd
Stuur debug-informatie voor struct-achtige typen alleen uit als de basisnaam van de
compilatiebronbestand komt overeen met de basisnaam van het bestand waarin het type is gedefinieerd,
tenzij de struc een sjabloon is of is gedefinieerd in een systeemkop.

Deze optie verkleint de grootte van de foutopsporingsinformatie aanzienlijk, met sommige
mogelijk verlies van type-informatie voor de debugger. Zien -femit-struct-debug-baseonly
voor een agressievere optie. Zien -femit-struct-debug-gedetailleerd voor meer gedetailleerde
controle.

Deze optie werkt alleen met DWARF 2.

-femit-struct-debug-gedetailleerd[=spec-lijst]
Specificeer de struct-achtige typen waarvoor de compiler foutopsporingsinformatie zal genereren.
De bedoeling is om dubbele struct-foutopsporingsinformatie tussen verschillende objecten te verminderen
bestanden binnen hetzelfde programma.

Deze optie is een gedetailleerde versie van -femit-struct-debug-gereduceerd en
-femit-struct-debug-baseonly, die voor de meeste behoeften zal dienen.

Een specificatie heeft de syntaxis[dir:|ind:][orde:|Genre:](elke|sys|baseren|geen)

Het optionele eerste woord beperkt de specificatie tot structs die direct worden gebruikt
(dir:) of indirect gebruikt (ind:). Een structuurtype wordt direct gebruikt wanneer het het type is
van een variabele, lid. Indirect gebruik ontstaat door verwijzingen naar structs. Dat is,
wanneer het gebruik van een onvolledige structuur legaal zou zijn, is het gebruik indirect. Een voorbeeld is
struct een direct; struct twee * indirect;.

Het optionele tweede woord beperkt de specificatie tot gewone structs (orde:) Of
generieke structuren (Genre:). Generieke structuren zijn een beetje ingewikkeld om uit te leggen. Voor C++,
dit zijn niet-expliciete specialisaties van sjabloonklassen of niet-sjabloonklassen
binnen het bovenstaande. Andere programmeertalen hebben generieke, maar
-femit-struct-debug-gedetailleerd voert ze nog niet uit.

Het derde woord specificeert de bronbestanden voor die structs waarvoor de compiler
zal foutopsporingsinformatie uitzenden. De waarden geen en elke de normale betekenis hebben. De
waarde baseren betekent dat de basis van de naam van het bestand waarin de typedeclaratie
verschijnt moet overeenkomen met de basis van de naam van het hoofdcompilatiebestand. In praktijk,
dit betekent dat typen gedeclareerd in foo.c en foo.h zal foutopsporingsinformatie hebben, maar
typen die in een andere kop zijn gedeclareerd, zullen dat niet doen. De waarde sys betekent dat die typen bevredigend zijn
baseren of gedeclareerd in systeem- of compilerheaders.

Mogelijk moet u experimenteren om de beste instellingen voor uw toepassing te bepalen.

De standaard is -femit-struct-debug-detailed=alles.

Deze optie werkt alleen met DWARF 2.

-fno-samenvoegen-debug-strings
Geef de linker opdracht om geen strings samen te voegen in de foutopsporingsinformatie die zijn
identiek in verschillende objectbestanden. Samenvoegen wordt niet door alle assembleurs ondersteund of
linkers. Samenvoegen verkleint de grootte van de foutopsporingsinformatie in het uitvoerbestand op
de kosten van het verhogen van de verwerkingstijd van de link. Samenvoegen is standaard ingeschakeld.

-fdebug-prefix-map=oud=nieuwe
Bij het compileren van bestanden in de map oud, registreer foutopsporingsinformatie en beschrijft ze als
in nieuwe gebruiken.

-fno-dwerg2-cfi-asm
Zend DWARF 2 afwikkelinformatie uit als door de compiler gegenereerde ".eh_frame" sectie in plaats van te gebruiken
GAS ".cfi_*" richtlijnen.

-p Genereer extra code om profielinformatie te schrijven die geschikt is voor het analyseprogramma
prof. U moet deze optie gebruiken bij het compileren van de bronbestanden waarover u gegevens wilt,
en je moet het ook gebruiken bij het linken.

-blz Genereer extra code om profielinformatie te schrijven die geschikt is voor het analyseprogramma
gprof. U moet deze optie gebruiken bij het compileren van de bronbestanden waarover u gegevens wilt,
en je moet het ook gebruiken bij het linken.

-Q Zorgt ervoor dat de compiler elke functienaam afdrukt terwijl deze is gecompileerd, en enkele afdrukken
statistieken over elke pas wanneer deze is afgelopen.

-ftime-rapport
Zorgt ervoor dat de compiler enkele statistieken afdrukt over de tijd die elke passage verbruikt wanneer deze
afwerkingen.

-fmem-rapport
Zorgt ervoor dat de compiler enkele statistieken over permanente geheugentoewijzing afdrukt wanneer het
afwerkingen.

-fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport
Zorgt ervoor dat de compiler enkele statistieken afdrukt over permanente geheugentoewijzing voor of
na interprocedurele optimalisatie.

-fstack-gebruik
Maakt de compiler output stack gebruiksinformatie voor het programma, per functie
basis. De bestandsnaam voor de dump wordt gemaakt door toe te voegen .su aan de auxnaam. auxnaam is
gegenereerd op basis van de naam van het uitvoerbestand, indien expliciet gespecificeerd en het is geen
uitvoerbaar is, anders is het de basisnaam van het bronbestand. Een invoer bestaat uit
drie velden:

· De naam van de functie.

· Een aantal bytes.

· Een of meer kwalificaties: "statisch", "dynamisch", "begrensd".

De kwalificatie "statisch" betekent dat de functie de stapel statisch manipuleert: a
vast aantal bytes wordt toegewezen aan het frame bij functie-invoer en vrijgegeven op
functie uitgang; er worden verder geen stapelaanpassingen gemaakt in de functie. De seconde
veld is dit vaste aantal bytes.

De kwalificatie "dynamisch" betekent dat de functie de stapel dynamisch manipuleert: in
naast de hierboven beschreven statische toewijzing, worden stapelaanpassingen gemaakt in de
body van de functie, bijvoorbeeld om argumenten rond functieaanroepen te pushen/poppen. Als de
qualifier "bounded" is ook aanwezig, het bedrag van deze aanpassingen is begrensd op
compileertijd en het tweede veld is een bovengrens van de totale hoeveelheid gebruikte stapel
door de functie. Als het niet aanwezig is, is het bedrag van deze aanpassingen niet begrensd
tijdens het compileren en het tweede veld vertegenwoordigt alleen het begrensde deel.

-fprofile-bogen
Voeg code toe zodat het programma verloopt bogen zijn geïnstrumenteerd. Tijdens de uitvoering van het programma
registreert hoe vaak elke vertakking en oproep wordt uitgevoerd en hoe vaak het wordt genomen
of retourneert. Wanneer het gecompileerde programma wordt afgesloten, slaat het deze gegevens op in een bestand met de naam
auxnaam.gcda voor elk bronbestand. De gegevens kunnen worden gebruikt voor profielgerichte
optimalisaties (-fbranch-waarschijnlijkheden), of voor analyse van testdekking
(-fest-dekking). Elk objectbestand is auxnaam wordt gegenereerd uit de naam van de
uitvoerbestand, indien expliciet gespecificeerd en het is niet het laatste uitvoerbare bestand, anders is het
is de basisnaam van het bronbestand. In beide gevallen wordt elk achtervoegsel verwijderd (bijv
foo.gcda voor invoerbestand dir/foo.cof dir/foo.gcda voor uitvoerbestand gespecificeerd als -o
dir/foo.o).

--Dekking
Deze optie wordt gebruikt om code te compileren en te koppelen die is geïnstrumenteerd voor dekkingsanalyse. De
optie is een synoniem voor -fprofile-bogen -fest-dekking (bij het compileren) en -lgcov
(bij koppelen). Zie de documentatie voor die opties voor meer details.

· Compileer de bronbestanden met -fprofile-bogen plus optimalisatie en codegeneratie
opties. Gebruik voor analyse van testdekking de aanvullende -fest-dekking optie.
U hoeft niet elk bronbestand in een programma te profileren.

· Koppel uw objectbestanden met -lgcov or -fprofile-bogen (de laatste impliceert de
vroegere).

· Voer het programma uit op een representatieve werklast om het boogprofiel te genereren
informatie. Dit kan een willekeurig aantal keren worden herhaald. U kunt gelijktijdig draaien
instanties van uw programma, en op voorwaarde dat het bestandssysteem vergrendeling ondersteunt,
gegevensbestanden worden correct bijgewerkt. Ook "fork"-oproepen worden gedetecteerd en
correct afgehandeld (dubbeltellingen zullen niet gebeuren).

· Voor profielgerichte optimalisaties, compileer de bronbestanden opnieuw met dezelfde
optimalisatie en code generatie opties plus -fbranch-waarschijnlijkheden.

· Gebruik voor analyse van testdekking gcov om voor mensen leesbare informatie te produceren uit
de .gcnr en .gcda bestanden. Verwijs naar de gcov documentatie voor verder
informatie.

met -fprofile-bogen, voor elke functie van je programma maakt GCC een programmastroom aan
grafiek, vindt dan een opspannende boom voor de grafiek. Alleen bogen die niet op de
spanning tree moeten worden geïnstrumenteerd: de compiler voegt code toe om het aantal te tellen
keer dat deze bogen worden uitgevoerd. Wanneer een boog de enige uitgang of enige ingang is naar
een blok, de instrumentatiecode kan aan het blok worden toegevoegd; anders een nieuwe basis
blok moet worden gemaakt om de instrumentatiecode te bevatten.

-fest-dekking
Maak een notitiebestand dat de gcov code-coverage hulpprogramma kan gebruiken om programma te tonen
Dekking. Het notitiebestand van elk bronbestand heet auxnaam.gcno. Verwijs naar de
-fprofile-bogen optie hierboven voor een beschrijving van auxnaam en instructies over hoe u
testdekkingsgegevens genereren. Dekkingsgegevens komen beter overeen met de bronbestanden,
als je niet optimaliseert.

-fdbg-cnt-lijst
Druk de naam en de bovengrens van de teller af voor alle foutopsporingstellers.

-fdbg-cnt=tegenwaardelijst
Stel de bovengrens van de interne foutopsporingsteller in. tegenwaardelijst is een door komma's gescheiden
lijst van naam:waarde paren die de bovengrens van elke foutopsporingsteller instellen naam naar
waarde. Alle foutopsporingstellers hebben de initiële bovengrens van UINT_MAX, dus dbg_cnt()
geeft altijd waar terug, tenzij de bovengrens door deze optie is ingesteld. bv Met
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) retourneert alleen true voor de eerste 10
aanroepen

-weerbaar-soort-passeren
-fuitschakelen-soort-passeren=bereiklijst
Dit is een set foutopsporingsopties die worden gebruikt om expliciet uit/in te schakelen
optimalisatie passeert. Voor gebruikers van compilers, reguliere opties voor het in-/uitschakelen van passen
moet in plaats daarvan worden gebruikt.

*<-fdisable-ipa-passeren>
Ipa-pas uitschakelen passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1.

*<-fdisable-rtl-passeren>
*<-fdisable-rtl-passeren=bereiklijst>
Schakel rtl-pass uit passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1. bereiklijst is een door komma's gescheiden lijst van
functiebereiken of namen van assemblers. Elk bereik is een getallenpaar gescheiden door een
dikke darm. Het assortiment is inclusief in beide uiteinden. Als het bereik triviaal is, is het aantal
paar kan worden vereenvoudigd als een enkel getal. Als de functie cgraph node's uid is
vallen binnen een van de gespecificeerde bereiken, de passeren is daarvoor uitgeschakeld
functie. De uid wordt weergegeven in de functiekop van een dumpbestand, en de pass
namen kunnen worden gedumpt met behulp van optie -fdump-passen.

*<-fuit-boom-passeren>
*<-fuit-boom-passeren=bereiklijst>
Boompas uitschakelen passeren. Zien -fdisable-rtl voor de beschrijving van optie:
argumenten.

*<-fenable-ipa-passeren>
Schakel ipa-pas in passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1.

*<-fenable-rtl-passeren>
*<-fenable-rtl-passeren=bereiklijst>
Schakel rtl-pass in passeren. Zien -fdisable-rtl voor de beschrijving van het optieargument en
voorbeelden.

*<-fenable-tree-passeren>
*<-fenable-tree-passeren=bereiklijst>
Boompas inschakelen passeren. Zien -fdisable-rtl voor de beschrijving van optieargumenten.

# schakel ccp1 uit voor alle functies
-fdisable-boom-ccp1
# schakel volledig uitrollen uit voor functie waarvan de cgraph node uid 1 . is
-fenable-tree-cunroll=1
# schakel gcse2 uit voor functies in de volgende bereiken [1,1],
# [300,400] en [400,1000]
# schakel gcse2 uit voor functies foo en foo2
-fdisable-rtl-gcse2=foo,foo2
# schakel vroege inlining uit
-fdisable-boom-einline
# ipa inlining uitschakelen
-fdisable-ipa-inline
# activeer boom volledig uitrollen
-fenable-boom-uitrollen

-dbrieven
-fdump-rtl-passeren
Zegt om foutopsporingsdumps te maken tijdens compilatie op tijden gespecificeerd door brieven. Deze
wordt gebruikt voor het debuggen van de op RTL gebaseerde passen van de compiler. De bestandsnamen voor de meeste
van de stortplaatsen wordt gemaakt door een pasnummer en een woord toe te voegen aan de dumpnaamEn
bestanden worden gemaakt in de map van het uitvoerbestand. Merk op dat het pasnummer is
statisch berekend terwijl passen worden geregistreerd in de passmanager. Aldus de
nummering is niet gerelateerd aan de dynamische volgorde van uitvoering van passen. In het bijzonder,
een pas die door een plug-in is geïnstalleerd, kan een nummer van meer dan 200 hebben, zelfs als deze goed wordt uitgevoerd
vroege. dumpnaam wordt gegenereerd op basis van de naam van het uitvoerbestand, indien expliciet
opgegeven en het is geen uitvoerbaar bestand, anders is het de basisnaam van de bron
bestand. Deze schakelaars kunnen verschillende effecten hebben wanneer -E wordt gebruikt voor voorbewerking.

Debug-dumps kunnen worden ingeschakeld met a -fdump-rtl schakelaar of zo -d optie brieven. Hier
zijn de mogelijke letters voor gebruik in passeren en brieven, en hun betekenis:

-fdump-rtl-uitlijningen
Dump nadat de uitlijning van de vertakkingen is berekend.

-fdump-rtl-asmcons
Dump na het repareren van rtl-statements die niet aan in/uit-beperkingen voldoen.

-fdump-rtl-auto_inc_dec
Dump na auto-inc-dec-detectie. Deze pas wordt alleen uitgevoerd op architecturen die:
auto inc of auto dec instructies hebben.

-fdump-rtl-barrières
Dump na het opruimen van de slagboom instructies.

-fdump-rtl-bbpart
Dump na het verdelen van warme en koude basisblokken.

-fdump-rtl-bbro
Dump na het opnieuw ordenen van blokken.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 en -fdump-rtl-btl2 dumpen inschakelen na het doel met twee vertakkingen
belasting optimalisatie passeert.

-fdump-rtl-bypass
Dump na sprong omzeilen en stroomoptimalisaties regelen.

-fdump-rtl-combineren
Dump na de RTL-instructiecombinatiepas.

-fdump-rtl-compgotos
Dump na het dupliceren van de berekende gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2 en -fdump-rtl-ce3 storten inschakelen na de drie
als de conversie slaagt.

-fdump-rtl-cprop_hardreg
Dump na hard register kopie propagatie.

-fdump-rtl-csa
Dump na het combineren van stapelaanpassingen.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 en -fdump-rtl-cse2 dumping mogelijk maken na de twee gemeenschappelijke sub-
uitdrukking eliminatie passeert.

-fdump-rtl-dce
Dump nadat de op zichzelf staande eliminatie van de dode code is geslaagd.

-fdump-rtl-dbr
Dump na vertraagde filiaalplanning.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 en -fdump-rtl-dce2 schakel dumpen in na de twee dode winkel
eliminatie passeert.

-fdump-rtl-eh
Dump na afronding van EH-verwerkingscode.

-fdump-rtl-eh_bereiken
Dump na conversie van EH-behandelingsbereikregio's.

-fdump-rtl-uitbreiden
Dump na RTL generatie.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 en -fdump-rtl-fwprop2 inschakelen dumpen na de twee forward
voortplanting gaat.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 en -fdump-rtl-gcse2 dumping inschakelen na global common
subexpressie eliminatie.

-fdump-rtl-init-regs
Dump na de initialisatie van de registers.

-fdump-rtl-initialen
Dump na de berekening van de initiële waardensets.

-fdump-rtl-in_cfglayout
Dump na conversie naar cfglayout-modus.

-fdump-rtl-ira
Dump na herhaalde registertoewijzing.

-fdump-rtl-sprong
Dump na de tweede sprong optimalisatie.

-fdump-rtl-loop2
-fdump-rtl-loop2 maakt dumpen mogelijk nadat de optimalisatie van de rtl-lus is geslaagd.

-fdump-rtl-mach
Dump na het uitvoeren van de machineafhankelijke reorganisatiepas, als die pas is
bestaat.

-fdump-rtl-mode_sw
Dump na het verwijderen van redundante modusschakelaars.

-fdump-rtl-rnreg
Dump na hernummering register.

-fdump-rtl-outof_cfglayout
Dump na conversie vanuit cfglayout-modus.

-fdump-rtl-kijkgaatje2
Dump na het kijkgaatje.

-fdump-rtl-postreload
Dump na optimalisaties na herladen.

-fdump-rtl-pro_and_epiloog
Dump na het genereren van de functie prologen en epilogen.

-fdump-rtl-regmove
Dump na de registerverplaatsingspas.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 en -fdump-rtl-sched2 storten inschakelen na het basisblok
planningspassen.

-fdump-rtl-zie
Dump na eliminatie van tekenuitbreiding.

-fdump-rtl-seqabstr
Dump na ontdekking van een gemeenschappelijke reeks.

-fdump-rtl-verkorten
Dump na het inkorten van takken.

-fdump-rtl-broer/zus
Dump na broer of zus oproep optimalisaties.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 en
-fdump-rtl-split5 schakel dumpen in na vijf instructierondes.

-fdump-rtl-sms
Dump na modulo planning. Deze pas wordt alleen uitgevoerd op bepaalde architecturen.

-fdump-rtl-stack
Dump na conversie van GCC's "platte registerbestand" registers naar de x87's
stapelachtige registers. Deze pas wordt alleen uitgevoerd op x86-varianten.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 en -fdump-rtl-subreg2 schakel dumpen in na de twee subreg
uitbreiding gaat.

-fdump-rtl-delen ongedaan maken
Dump nadat alle rtl is ongedaan gemaakt.

-fdump-rtl-vartrack
Dump na variabele tracking.

-fdump-rtl-vregs
Dump na het converteren van virtuele registers naar harde registers.

-fdump-rtl-web
Dump na splitsen van livebereik.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Deze dumps zijn gedefinieerd maar produceren altijd lege bestanden.

-in
-fdump-rtl-allemaal
Produceer alle hierboven genoemde stortplaatsen.

-dA Annoteer de uitvoer van de assembler met diverse foutopsporingsinformatie.

-dd Dump alle macrodefinities, aan het einde van de voorverwerking, naast normaal
uitgang.

-dH Produceer een kerndump wanneer er een fout optreedt.

-dp Annoteer de uitvoer van de assembler met een opmerking die aangeeft welk patroon en
alternatief werd gebruikt. De lengte van elke instructie wordt ook afgedrukt.

-dP Dump de RTL in de assembler-uitvoer als een opmerking voor elke instructie. Ook
gaat aan -dp annotatie.

-dv Voor elk van de andere aangegeven dumpbestanden (-fdump-rtl-passeren), dump een
weergave van de regelstroomgrafiek die geschikt is om met VCG te bekijken
bestand.pass.vcg.

-dx Genereer gewoon RTL voor een functie in plaats van deze te compileren. Meestal gebruikt met
-fdump-rtl-uitbreiden.

-fdump-noaddr
Bij het debuggen van dumps, onderdrukt u de adresuitvoer. Dit maakt het haalbaarder om
gebruik diff bij het debuggen van dumps voor compiler-aanroepen met verschillende compiler-binaries
en/of verschillende tekst / bss / data / heap / stack / dso startlocaties.

-fdump-ongenummerd
Bij het debuggen van dumps, onderdrukt u instructienummers en adresuitvoer. Dit
maakt het meer haalbaar om diff te gebruiken bij het debuggen van dumps voor compiler-aanroepen met
verschillende opties, in het bijzonder met en zonder -g.

-fdump-ongenummerde-links
Bij het debuggen van dumps (zie -d optie hierboven), onderdruk instructienummers voor de
links naar de vorige en volgende instructies in een reeks.

-fdump-vertaaleenheid (alleen C++)
-fdump-vertaaleenheid-opties (alleen C++)
Dump een weergave van de boomstructuur voor de gehele vertaaleenheid naar een bestand.
De bestandsnaam wordt gemaakt door toe te voegen .tu naar de naam van het bronbestand, en het bestand is
gemaakt in dezelfde map als het uitvoerbestand. Als de -opties formulier wordt gebruikt,
opties regelt de details van de dump zoals beschreven voor de -fdump-boom opties.

-fdump-klasse-hiërarchie (alleen C++)
-fdump-klasse-hiërarchie-opties (alleen C++)
Dump een weergave van de hiërarchie van elke klasse en de indeling van de virtuele functietabel naar a
het dossier. De bestandsnaam wordt gemaakt door toe te voegen .klasse naar de naam van het bronbestand, en het bestand
wordt gemaakt in dezelfde map als het uitvoerbestand. Als de -opties formulier wordt gebruikt,
opties regelt de details van de dump zoals beschreven voor de -fdump-boom opties.

-fdump-ipa-schakelaar
Beheers de dumping in verschillende stadia van de taalboom voor inter-procedurele analyse om een
het dossier. De bestandsnaam wordt gegenereerd door een switch-specifiek achtervoegsel toe te voegen aan de bron
bestandsnaam en het bestand wordt gemaakt in dezelfde map als het uitvoerbestand. De
volgende stortingen zijn mogelijk:

allen Schakelt alle inter-procedurele analysedumps in.

cgraaf
Dumpt informatie over call-graph optimalisatie, ongebruikte functie verwijderen, en
beslissingen nemen.

inline
Dump na functie inlining.

-fdump-passen
Dump de lijst met optimalisatiepassen die zijn in- en uitgeschakeld door de huidige
opdrachtregelopties.

-fdump-statistieken-optie
Schakel het dumpen van passtatistieken in een apart bestand in en controleer deze. De bestandsnaam is
gegenereerd door een achtervoegsel toe te voegen dat eindigt op .statistieken naar de naam van het bronbestand, en de
bestand wordt gemaakt in dezelfde map als het uitvoerbestand. Als de -optie vorm is
gebruikt, -statistieken zorgt ervoor dat tellers worden opgeteld over de hele compilatie-eenheid while
-details zal elk evenement dumpen als de passen ze genereren. De standaard met nr
optie is om tellers op te tellen voor elke gecompileerde functie.

-fdump-boom-schakelaar
-fdump-boom-schakelaar-opties
Beheers het dumpen in verschillende stadia van het verwerken van de tussenliggende taalboom om
een bestand. De bestandsnaam wordt gegenereerd door een switch-specifiek achtervoegsel toe te voegen aan het
bronbestandsnaam en het bestand wordt gemaakt in dezelfde map als het uitvoerbestand.
Indien de -opties formulier wordt gebruikt, opties is een lijst van - gescheiden opties die controleren
de details van de stortplaats. Niet alle opties zijn van toepassing op alle stortplaatsen; die dat zijn
niet zinvol zal worden genegeerd. De volgende opties zijn beschikbaar

adres
Druk het adres van elk knooppunt af. Meestal is dit niet zinvol omdat het verandert
volgens de omgeving en het bronbestand. Het primaire gebruik is voor het vastbinden van een
dump-bestand met een foutopsporingsomgeving.

asmnaam
Als "DECL_ASSEMBLER_NAME" is ingesteld voor een bepaalde decl, gebruik die dan in de dump
in plaats van "DECL_NAME". Het primaire gebruik is gebruiksgemak achteruit werken van
verminkte namen in het montagebestand.

slank
Voorkom het dumpen van leden van een reikwijdte of orgaan van een functie alleen daarom
bereik is bereikt. Dump dergelijke items alleen als ze direct bereikbaar zijn
een andere weg. Bij het dumpen van mooi geprinte bomen, verhindert deze optie het dumpen
de organen van controlestructuren.

rauw Print een ruwe weergave van de boom. Standaard worden bomen mooi afgedrukt in
een C-achtige weergave.

gegevens
Schakel meer gedetailleerde dumps in (niet gehonoreerd door elke dumpoptie).

stats
Schakel het dumpen van verschillende statistieken over de pas in (niet door elke dump gehonoreerd)
keuze).

blokken
Schakel het tonen van basisblokgrenzen in (uitgeschakeld in onbewerkte dumps).

vops
Schakel het weergeven van virtuele operanden voor elke instructie in.

linnen
Schakel het weergeven van regelnummers voor afschriften in.

uid Schakel het tonen van de unieke ID ("DECL_UID") voor elke variabele in.

breedsprakig
Schakel het weergeven van de boomdump voor elke instructie in.

eh Schakel het weergeven van het EH-regionummer in met elke verklaring.

scev
Schakel het weergeven van details van de analyse van de scalaire evolutie in.

allen Schakel alle opties in, behalve rauw, slank, breedsprakig en linnen.

De volgende boomstortplaatsen zijn mogelijk:

origineel
Dump vóór elke op bomen gebaseerde optimalisatie, om bestand.origineel.

geoptimaliseerde
Dump na alle op bomen gebaseerde optimalisatie, om bestand.geoptimaliseerd.

gimple
Dump elke functie voor en na de gimplificatie naar een bestand. Het bestand
naam wordt gemaakt door toe te voegen .simpel naar de naam van het bronbestand.

cfg Dump de controlestroomgrafiek van elke functie naar een bestand. De bestandsnaam is gemaakt door
aanhangen .cfg naar de naam van het bronbestand.

vcg Dump de besturingsstroomgrafiek van elke functie naar een bestand in VCG-indeling. Het bestand
naam wordt gemaakt door toe te voegen .vcg naar de naam van het bronbestand. Merk op dat als het bestand
meer dan één functie bevat, kan het gegenereerde bestand niet rechtstreeks worden gebruikt door
VCG. U moet de grafiek van elke functie in zijn eigen afzonderlijke grafiek knippen en plakken
eerst bestand.

ch Dump elke functie na het kopiëren van lusheaders. De bestandsnaam wordt gemaakt door toe te voegen
.ch naar de naam van het bronbestand.

ssa Dump SSA-gerelateerde informatie naar een bestand. De bestandsnaam wordt gemaakt door toe te voegen .sa
naar de naam van het bronbestand.

alias
Dump aliasinformatie voor elke functie. De bestandsnaam wordt gemaakt door toe te voegen
.alias naar de naam van het bronbestand.

ccp Dump elke functie na CCP. De bestandsnaam wordt gemaakt door toe te voegen .ccp aan de
naam van het bronbestand.

winkelccp
Dump elke functie na STORE-CCP. De bestandsnaam wordt gemaakt door toe te voegen .storeccp
naar de naam van het bronbestand.

pre Dump bomen na gedeeltelijke redundantie eliminatie. De bestandsnaam is gemaakt door
aanhangen .pre naar de naam van het bronbestand.

fre Dump bomen na volledige eliminatie van redundantie. De bestandsnaam wordt gemaakt door toe te voegen
.vrij naar de naam van het bronbestand.

kopieerprop
Dump bomen na vermeerdering van kopieën. De bestandsnaam wordt gemaakt door toe te voegen .copyprop
naar de naam van het bronbestand.

winkel_copyprop
Dump bomen na winkel kopie-propagatie. De bestandsnaam wordt gemaakt door toe te voegen
.store_copyprop naar de naam van het bronbestand.

dce Dump elke functie na eliminatie van dode code. De bestandsnaam is gemaakt door
aanhangen .dce naar de naam van het bronbestand.

spatlap
Dump elke functie na het toevoegen van spatlapinstrumentatie. De bestandsnaam is gemaakt door
aanhangen .spatklep naar de naam van het bronbestand.

SRA Dump elke functie na het uitvoeren van scalaire vervanging van aggregaten. Het bestand
naam wordt gemaakt door toe te voegen .sra naar de naam van het bronbestand.

wastafel
Dump elke functie na het uitvoeren van code-sinking. De bestandsnaam is gemaakt door
aanhangen .wasbak naar de naam van het bronbestand.

gift Dump elke functie na het toepassen van dominator-boomoptimalisaties. De bestandsnaam is
gemaakt door toe te voegen .dom naar de naam van het bronbestand.

zeggen Dump elke functie na het verwijderen van dode winkels. De bestandsnaam is gemaakt
door toe te voegen .dse naar de naam van het bronbestand.

phiopt
Dump elke functie na het optimaliseren van PHI-knooppunten in lineaire code. Het bestand
naam wordt gemaakt door toe te voegen .phiopt naar de naam van het bronbestand.

voorprop
Dump elke functie na het voorwaarts verspreiden van variabelen voor eenmalig gebruik. De bestandsnaam
wordt gemaakt door toe te voegen .voorprop naar de naam van het bronbestand.

kopiëren hernoemen
Dump elke functie na het toepassen van de optimalisatie voor het hernoemen van kopiëren. De bestandsnaam is
gemaakt door toe te voegen .copyhernoemen naar de naam van het bronbestand.

nr Dump elke functie na het toepassen van de benoemde retourwaarde-optimalisatie op generiek
bomen. De bestandsnaam wordt gemaakt door toe te voegen .nr naar de naam van het bronbestand.

vect
Dump elke functie na het toepassen van vectorisatie van lussen. De bestandsnaam is gemaakt
door toe te voegen .vector naar de naam van het bronbestand.

GFA Dump elke functie na het toepassen van vectorisatie van basisblokken. De bestandsnaam is
gemaakt door toe te voegen .slp naar de naam van het bronbestand.

vp Dump elke functie na Value Range Propagation (VRP). De bestandsnaam is gemaakt door
aanhangen .vrp naar de naam van het bronbestand.

allen Schakel alle beschikbare boomdumps in met de vlaggen in deze optie.

-ftree-vectorizer-verbose=n
Deze optie regelt de hoeveelheid foutopsporingsuitvoer die de vectorizer afdrukt. Dit
informatie wordt naar standaardfout geschreven, tenzij -fdump-boom-alles or -fdump-boom-vect
is opgegeven, in welk geval het wordt uitgevoerd naar het gebruikelijke bestand met dumplijsten, .vector. Voor
n=0 er wordt geen diagnostische informatie gerapporteerd. Als n=1 de vectorizer rapporteert elke lus
dat werd gevectoriseerd, en het totale aantal lussen dat werd gevectoriseerd. Als n=2 de
vectorizer rapporteert ook niet-gevectoriseerde lussen die de eerste analysefase hebben doorstaan
(vect_analyze_loop_form) - dat wil zeggen telbaar, binnenste, single-bb, single-entry/exit
lussen. Dit is hetzelfde breedsprakigheidsniveau dat -fdump-boom-vect-statistieken toepassingen. Hoger
breedsprakigheidsniveaus betekenen of meer informatie gedumpt voor elke gerapporteerde lus, of hetzelfde
hoeveelheid gerapporteerde informatie voor meer lussen: als n=3, vectorizer-kostenmodel
informatie wordt gemeld. Als n=4, uitlijningsgerelateerde informatie wordt toegevoegd aan het
rapporten. Als n=5, data-referenties gerelateerde informatie (bijv. geheugenafhankelijkheden, memory
toegangspatronen) wordt toegevoegd aan de rapporten. Als n=6, de vectorizer rapporteert ook niet-
gevectoriseerde binnenste lussen die de eerste analysefase niet hebben doorstaan ​​(d.w.z. misschien niet
telbaar zijn, of een gecompliceerde besturingsstroom hebben). Als n=7, rapporteert de vectorizer
ook niet-gevectoriseerde geneste lussen. Als n=8, SLP-gerelateerde informatie wordt toegevoegd aan het
rapporten. Voor n=9, alle informatie die de vectorizer genereert tijdens zijn analyse
en transformatie wordt gerapporteerd. Dit is hetzelfde breedsprakigheidsniveau dat
-fdump-boom-vect-details toepassingen.

-random-seed=snaar
Deze optie biedt een seed die GCC gebruikt wanneer het anders willekeurige getallen zou gebruiken.
Het wordt gebruikt om bepaalde symboolnamen te genereren die in elk anders moeten zijn
gecompileerd bestand. Het wordt ook gebruikt om unieke stempels in dekkingsgegevensbestanden te plaatsen en de
objectbestanden die ze produceren. U kunt de -willekeurig zaad optie te produceren
reproduceerbaar identieke objectbestanden.

De snaar moet voor elk bestand dat u compileert anders zijn.

-fsched-verbose=n
Op doelen die instructieplanning gebruiken, regelt deze optie de hoeveelheid
het debuggen van uitvoer drukt de planner af. Deze informatie is geschreven met een standaardfout,
tenzij -fdump-rtl-sched1 or -fdump-rtl-sched2 is opgegeven, in welk geval het wordt uitgevoerd
naar het gebruikelijke dumplijstbestand, .sched1 or .sched2 respectievelijk. echter voor n
groter dan negen, wordt de uitvoer altijd afgedrukt met de standaardfout.

Voor n groter dan nul, -fsched-uitgebreid geeft dezelfde informatie weer als:
-fdump-rtl-sched1 en -fdump-rtl-sched2. Voor n groter dan één, geeft het ook basis
blokwaarschijnlijkheden, gedetailleerde gereed-lijstinformatie en unit/insn-info. Voor n
groter dan twee, bevat het RTL op afbreekpunt, controlestroom en regio-informatie. En
For n meer dan vier, -fsched-uitgebreid bevat ook informatie over afhankelijkheid.

-opslaan-temps
-save-temps=cwd
Sla de gebruikelijke "tijdelijke" tussenbestanden permanent op; plaats ze in de stroom
directory en geef ze een naam op basis van het bronbestand. Dus, het compileren foo.c Met -c
-opslaan-temps bestanden zou opleveren foo.i en foo.sevenals foo.o. Dit creëert een
voorbewerkt foo.i output-bestand, hoewel de compiler nu normaal gesproken een
geïntegreerde preprocessor.

Bij gebruik in combinatie met de -x opdrachtregeloptie, -opslaan-temps is verstandig
genoeg om te voorkomen dat een invoerbronbestand met dezelfde extensie als een
tussenbestand. Het corresponderende tussenbestand kan worden verkregen door hernoemen
het bronbestand voor gebruik -opslaan-temps.

Als u GCC parallel aanroept en verschillende bronbestanden compileert die een
gemeenschappelijke basisnaam in verschillende submappen of hetzelfde bronbestand gecompileerd voor
meerdere uitvoerbestemmingen, is het waarschijnlijk dat de verschillende parallelle compilers
interfereren met elkaar en overschrijven de tijdelijke bestanden. Bijvoorbeeld:

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

kan resulteren in foo.i en foo.o gelijktijdig geschreven door beide compilers.

-save-temps=obj
Sla de gebruikelijke "tijdelijke" tussenbestanden permanent op. Als de -o optie wordt gebruikt,
de tijdelijke bestanden zijn gebaseerd op het objectbestand. Als de -o optie niet wordt gebruikt, de
-save-temps=obj schakelaar gedraagt ​​zich als -opslaan-temps.

Bijvoorbeeld:

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

zou creëren foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s en
dir2/yfoobar.o.

-tijd[=filet]
Rapporteer de CPU-tijd die elk subproces in beslag neemt in de compilatievolgorde. voor C
bronbestanden, dit is de eigenlijke compiler en assembler (plus de linker als linken is
gedaan).

Zonder de specificatie van een uitvoerbestand ziet de uitvoer er als volgt uit:

# cc1 0.12 0.01
# als 0.00 0.01

Het eerste cijfer op elke regel is de "gebruikerstijd", dat wil zeggen de tijd die wordt besteed aan het uitvoeren van de
zelf programmeren. Het tweede getal is "systeemtijd", de tijd die wordt besteed aan het uitvoeren van bewerkingen
systeemroutines namens het programma. Beide cijfers zijn in seconden.

Met de specificatie van een uitvoerbestand wordt de uitvoer toegevoegd aan het genoemde bestand,
en het ziet er zo uit:

0.12 0.01 cc1
0.00 0.01 as

De "gebruikerstijd" en de "systeemtijd" worden voor de programmanaam geplaatst en de
opties die aan het programma zijn doorgegeven, worden weergegeven, zodat men later kan zien welk bestand het was
wordt samengesteld, en met welke opties.

-fvar-tracking
Voer een variabele trackingpas uit. Het berekent waar variabelen op elke positie worden opgeslagen
in codes. Er wordt dan betere foutopsporingsinformatie gegenereerd (als de foutopsporingsinformatie
formaat ondersteunt deze informatie).

Het is standaard ingeschakeld bij het compileren met optimalisatie (-Jij, -O, -O2, ...),
foutopsporingsinformatie (-g) en het debug-infoformaat ondersteunt dit.

-fvar-tracking-opdrachten
Annoteer toewijzingen aan gebruikersvariabelen in het begin van de compilatie en probeer deze over te dragen
de annotaties doorheen de compilatie helemaal tot het einde, in een poging
om debug-informatie te verbeteren en tegelijkertijd te optimaliseren. Gebruik van -gdwerg-4 wordt aanbevolen langs
mee.

Het kan worden ingeschakeld, zelfs als var-tracking is uitgeschakeld, in welk geval annotaties dat wel zullen zijn
gemaakt en onderhouden, maar aan het einde weggegooid.

-fvar-tracking-toewijzingen-toggle
Toggle -fvar-tracking-opdrachtenop dezelfde manier als dat -goggle knevels -g.

-print-bestandsnaam=bibliotheek
Druk de volledige absolute naam van het bibliotheekbestand af bibliotheek dat zou worden gebruikt wanneer
koppelen --- en doe niets anders. Met deze optie compileert of linkt GCC niet
iets; het drukt alleen de bestandsnaam af.

-print-meerdere mappen
Druk de mapnaam af die overeenkomt met de multilib geselecteerd door andere schakelaars
aanwezig in de opdrachtregel. Deze map zou moeten bestaan ​​in GCC_EXEC_PREFIX.

-print-multi-lib
Druk de toewijzing af van multilib-directorynamen naar compiler-switches die ze inschakelen.
De directorynaam wordt van de schakelaars gescheiden door: ;, en elke schakelaar begint met een
@ in plaats van de -, zonder spaties tussen meerdere schakelaars. Dit hoort
gemakkelijke shell-verwerking.

-print-multi-os-map
Druk het pad af naar OS-bibliotheken voor de geselecteerde multilib, relatief aan sommige lib
submap. Als OS-bibliotheken aanwezig zijn in de lib submap en geen multilibs
worden gebruikt, is dit meestal gewoon ., als OS-bibliotheken aanwezig zijn in libachtervoegsel broer
mappen die dit afdrukt, bijv ../lib64, ../ lib or ../lib32, of als OS-bibliotheken zijn
aanwezig in lib/submap submappen die het afdrukt, bijv amd64, spacv9 or ev6.

-print-multiarch
Druk het pad af naar OS-bibliotheken voor de geselecteerde multiarch, relatief aan sommige lib
submap.

-print-prog-naam=programma
Like -print-bestandsnaam, maar zoekt naar een programma zoals cpp.

-print-libgcc-bestandsnaam
Hetzelfde als -print-bestandsnaam=libgcc.a.

Dit is handig wanneer u -nostlib or -nodefaultlibs maar je wilt wel linken met
libgcc.a. Je kunt doen

gcc -nostdlib ... `gcc -print-libgcc-bestandsnaam`

-print-zoekmap
Druk de naam af van de geconfigureerde installatiemap en een lijst met programma- en
bibliotheekmappen gcc zal zoeken --- en verder niets doen.

Dit is handig wanneer: gcc drukt de foutmelding af installatie probleem, kan niet exec
cpp0: Nee dergelijk filet or directory. Om dit op te lossen, moet je ofwel cpp0 en
andere compilercomponenten waar: gcc verwacht ze te vinden, of u kunt de
variabele omgeving GCC_EXEC_PREFIX naar de map waarin u ze hebt geïnstalleerd. niet doen
vergeet de trailing /.

-print-sysroot
Druk de doel-sysroot-directory af die tijdens de compilatie zal worden gebruikt. Dit is de
doel-sysroot opgegeven tijdens het configureren of met behulp van de --sysroot keuze,
mogelijk met een extra achtervoegsel dat afhangt van de compilatie-opties. Als er geen doel is
sysroot is opgegeven, drukt de optie niets af.

-print-sysroot-headers-achtervoegsel
Druk het achtervoegsel af dat is toegevoegd aan de doel-sysroot bij het zoeken naar headers, of geef een
fout als de compiler niet is geconfigureerd met zo'n achtervoegsel --- en doe niets
anders.

- dumpmachine
Druk de doelmachine van de compiler af (bijvoorbeeld i686-pc-linux-gnu) --- en niet doen
nog iets anders.

-dumpversie
Druk de compilerversie af (bijvoorbeeld 3.0) --- en doe niets anders.

-stortspecificaties
Druk de ingebouwde specificaties van de compiler af --- en doe niets anders. (Dit wordt gebruikt wanneer
GCC zelf wordt gebouwd.)

-feliminate-ongebruikte-debug-types
Normaal gesproken zal GCC bij het produceren van DWARF2-uitvoer foutopsporingsinformatie voor iedereen uitzenden
typen gedeclareerd in een compilatie-eenheid, ongeacht of ze dat ook daadwerkelijk zijn
gebruikt in die compilatie-eenheid. Soms is dit handig, bijvoorbeeld als in de debugger
u een waarde wilt casten naar een type dat niet echt in uw programma wordt gebruikt (maar wel
verklaard). Vaker resulteert dit echter in een aanzienlijke hoeveelheid verspilde ruimte.
Met deze optie vermijdt GCC uitvoer van foutopsporingssymbolen voor typen die dat wel zijn
nergens gebruikt in het bronbestand dat wordt gecompileerd.

Opties ZIJN Controle Optimization
Deze opties regelen verschillende soorten optimalisaties.

Zonder enige optimalisatieoptie is het doel van de compiler om de compilatiekosten te verlagen
en om debuggen de verwachte resultaten te laten opleveren. Verklaringen zijn onafhankelijk: als u
stop het programma met een breekpunt tussen instructies, u kunt dan een nieuwe waarde toewijzen aan
een willekeurige variabele of verander de programmateller in een andere instructie in de functie en get
precies de resultaten die u van de broncode mag verwachten.

Door optimalisatievlaggen aan te zetten, probeert de compiler de prestaties te verbeteren en/of
codegrootte ten koste van compilatietijd en mogelijk de mogelijkheid om de
programma.

De compiler voert optimalisatie uit op basis van de kennis die hij van het programma heeft.
Door meerdere bestanden tegelijk te compileren naar een enkele uitvoerbestandsmodus kan de compiler gebruiken
informatie verkregen uit alle bestanden bij het samenstellen van elk van hen.

Niet alle optimalisaties worden rechtstreeks beheerd door een vlag. Alleen optimalisaties met een
vlag worden in deze sectie vermeld.

De meeste optimalisaties zijn alleen ingeschakeld als een -O niveau wordt ingesteld op de opdrachtregel. Anders
ze zijn uitgeschakeld, zelfs als individuele optimalisatievlaggen zijn opgegeven.

Afhankelijk van het doel en hoe GCC is geconfigureerd, kan een iets andere set van
optimalisaties kunnen worden ingeschakeld bij elke -O niveau dan hier vermeld. U kunt een beroep doen op GCC
Met -Q --help=optimalisaties om de exacte set optimalisaties te vinden die zijn ingeschakeld op
elk niveau.

-O
-O1 Optimaliseren. Het optimaliseren van de compilatie kost iets meer tijd, en veel meer geheugen voor
een grote functie.

met -O, de compiler probeert de codegrootte en uitvoeringstijd te verkleinen, zonder te presteren
alle optimalisaties die veel compilatietijd vergen.

-O schakelt de volgende optimalisatievlaggen in:

-fauto-inc-dec -fvergelijk-elim -fcprop-registers -fdce -fdefer-pop -fvertraagde-tak
-fdse -fguess-branch-waarschijnlijkheid -fif-conversie2 -fif-conversie -fipa-pure-const
-fipa-profiel -fipa-referentie -fmerge-constanten -fsplit-wide-types -ftree-bit-ccp
-ftree-ingebouwde-aanroep-dce -ftree-ccp -ftree-ch -ftree-kopieernaam -ftree-dce
-ftree-dominator-opteert -ftree-dse -ftree-forwprop - vrij van bomen -ftree-phiprop -ftree-sra
-ftree-pta -ftree-ter -fun-at-a-time

-O gaat ook aan -fomit-frame-aanwijzer op machines waar dit niet interfereert
met debuggen.

-O2 Nog meer optimaliseren. GCC voert bijna alle ondersteunde optimalisaties uit die dat niet doen
een afweging van ruimtesnelheid met zich meebrengen. In vergelijking met -O, deze optie verhoogt beide
compilatietijd en de prestaties van de gegenereerde code.

-O2 schakelt alle optimalisatievlaggen in die zijn gespecificeerd door -O. Het zet ook het volgende aan:
optimalisatie vlaggen: -fthread-sprongen -falign-functies -falign-sprongen -falign-lussen
-falign-labels -fcaller-opslaat -fcrossspringen -fcse-volg-sprongen -fcse-blokken-overslaan
-fdelete-null-pointer-controles -fdevirtualiseren -fexpensive-optimalisaties -fgcse
-fgcse-lm -finline-kleine-functies -findirect-inlining -fipa-sra
-foptimize-broer-zus-oproepen -fgedeeltelijke-inlining -fkijkgaatje2 -fregverplaatsing -freeorder-blokken
-freeorder-functies -frerun-cse-na-lus -fsched-interblock -fsched-specificatie
-fschema-insns -fschema-insns2 -fstrict-aliasing -fstrict-overloop
-ftree-switch-conversie -ftree-staart-samenvoegen -ftree-pre -ftree-vrp

Let op de waarschuwing onder -fgcse over het aanroepen van -O2 op programma's die gebruikmaken van computergestuurde
ga naar S.

OPMERKING: In Ubuntu 8.10 en latere versies, -D_FORTIFY_SOURCE=2 is standaard ingesteld en is
geactiveerd wanneer -O is ingesteld op 2 of hoger. Dit maakt extra compileertijd en
runtime-controles voor verschillende libc-functies. Om uit te schakelen, specificeer een van beide
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Nog meer optimaliseren. -O3 schakelt alle optimalisaties in die zijn gespecificeerd door -O2 en gaat ook aan
de -finline-functies, -funswitch-loops, -fvoorspellende-commoning, -fgcse-na-herladen,
-ftree-vectoriseren, -ftree-gedeeltelijke-pre en -fipa-cp-kloon opties.

-O0 Verminder de compilatietijd en zorg dat debugging de verwachte resultaten oplevert. Dit is de
standaard.

-Jij Optimaliseer voor grootte. -Jij maakt alles mogelijk -O2 optimalisaties die doorgaans niet toenemen
code grootte. Het voert ook verdere optimalisaties uit die zijn ontworpen om de codegrootte te verkleinen.

-Jij schakelt de volgende optimalisatievlaggen uit: -falign-functies -falign-sprongen
-falign-lussen -falign-labels -freeorder-blokken -freeorder-blokken-en-partitie
-fprefetch-loop-arrays -ftree-vect-loop-versie

-Of snel
Negeer de naleving van strikte normen. -Of snel maakt alles mogelijk -O3 optimalisaties. Het ook
maakt optimalisaties mogelijk die niet geldig zijn voor alle standaardcompatibele programma's. Het
gaat aan -ffast-wiskunde en de Fortran-specifieke -fno-bescherm-ouders en -fstack-arrays.

Als u meerdere gebruikt -O opties, met of zonder niveaunummers, de laatste optie is
degene die effectief is.

Opties van het formulier -fvlag specificeer machine-onafhankelijke vlaggen. De meeste vlaggen hebben beide
positieve en negatieve vormen; de negatieve vorm van -foei zou -fno-foo. In de tafel
hieronder wordt slechts één van de formulieren weergegeven --- degene die u doorgaans zult gebruiken. Je kunt erachter komen
uit de andere vorm door een van beide te verwijderen Nee- of toevoegen.

De volgende opties regelen specifieke optimalisaties. Ze worden ofwel geactiveerd door: -O
opties of zijn gerelateerd aan degenen die dat wel zijn. U kunt de volgende vlaggen gebruiken in de rare
gevallen waarin "fine-tuning" van uit te voeren optimalisaties gewenst is.

-fno-standaard-inline
Maak standaard geen lidfuncties inline alleen omdat ze binnenin zijn gedefinieerd
het klassenbereik (alleen C++). Anders, wanneer u opgeeft -O, lidfuncties gedefinieerd
inside class scope wordt standaard inline gecompileerd; dat wil zeggen, u hoeft niet toe te voegen inline
voor de naam van de lidfunctie.

-fno-uitstellen-pop
Pop altijd de argumenten voor elke functieaanroep zodra die functie terugkeert. Voor
machines die argumenten moeten popen na een functie-aanroep, laat de compiler normaal gesproken
argumenten stapelen zich op op de stapel voor verschillende functie-aanroepen en verschijnen ze allemaal op
een keer.

Uitgeschakeld op niveaus -O, -O2, -O3, -Jij.

-vooruit-propageren
Voer een voorwaartse vermeerdering door op RTL. De pas probeert twee instructies te combineren
en controleert of het resultaat vereenvoudigd kan worden. Als het afrollen van de lus actief is, twee passages
worden uitgevoerd en de tweede is gepland na het uitrollen van de lus.

Deze optie is standaard ingeschakeld op optimalisatieniveaus -O, -O2, -O3, -Jij.

-ffp-contract=stijl
-ffp-contract=uit schakelt samentrekking van drijvende-komma-expressies uit. -ffp-contract=snel
maakt samentrekking van drijvende-komma-expressies mogelijk, zoals het vormen van fused multi-add
bewerkingen als het doel native ondersteuning voor hen heeft. -ffp-contract=aan maakt
samentrekking van drijvende-komma-expressie indien toegestaan ​​door de taalstandaard. Dit is
momenteel niet geïmplementeerd en gelijk behandeld aan -ffp-contract=uit.

De standaard is -ffp-contract=snel.

-fomit-frame-aanwijzer
Bewaar de framepointer niet in een register voor functies die er geen nodig hebben. Dit
vermijdt de instructies om framepointers op te slaan, in te stellen en te herstellen; het maakt ook een
extra register beschikbaar in vele functies. It ook merken debugging onmogelijk on
sommige machines.

Op sommige machines, zoals de VAX, heeft deze vlag geen effect, omdat de standaard
aanroepvolgorde verwerkt automatisch de frame-aanwijzer en er wordt niets opgeslagen door
doen alsof het niet bestaat. De machinebeschrijvingsmacro "FRAME_POINTER_REQUIRED"
bepaalt of een doelcomputer deze vlag ondersteunt.

Vanaf GCC versie 4.6 is de standaardinstelling (wanneer niet wordt geoptimaliseerd voor grootte) voor:
32-bits Linux x86- en 32-bits Darwin x86-doelen zijn gewijzigd in
-fomit-frame-aanwijzer. De standaard kan worden teruggezet naar: -fno-omit-frame-aanwijzer by
GCC configureren met de --enable-frame-aanwijzer optie configureren.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-foptimize-broer-zus-oproepen
Optimaliseer recursieve oproepen voor broers en zussen.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fno-inline
Breid geen functies inline uit, behalve die gemarkeerd met de "always_inline"
attribuut. Dit is de standaardinstelling wanneer niet wordt geoptimaliseerd.

Enkele functies kunnen worden vrijgesteld van inlining door ze te markeren met de "noinline"
attribuut.

-finline-kleine-functies
Integreer functies in hun bellers wanneer hun lichaam kleiner is dan verwacht
functie-aanroepcode (zodat de totale omvang van het programma kleiner wordt). de compiler
bepaalt heuristisch welke functies eenvoudig genoeg zijn om de moeite waard te zijn om in te integreren
op deze manier. Deze inlining is van toepassing op alle functies, zelfs die niet inline gedeclareerd zijn.

Ingeschakeld op niveau -O2.

-findirect-inlining
Inline ook indirecte oproepen waarvan bekend is dat ze tijdens het compileren bekend zijn dankzij
vorige inlining. Deze optie heeft alleen effect als inlining zelf is ingeschakeld
Door de -finline-functies or -finline-kleine-functies opties.

Ingeschakeld op niveau -O2.

-finline-functies
Overweeg alle functies voor inlining, zelfs als ze niet inline zijn gedeclareerd. De
compiler beslist heuristisch welke functies het waard zijn om op deze manier te integreren.

Als alle oproepen naar een bepaalde functie zijn geïntegreerd en de functie is gedeclareerd
"statisch", dan wordt de functie normaal gesproken niet als zelfstandige assembler-code uitgevoerd.

Ingeschakeld op niveau -O3.

-finline-functies-eenmaal genoemd
Overweeg alle "statische" functies die eenmaal zijn aangeroepen om in hun beller te worden opgenomen, zelfs als:
ze zijn niet gemarkeerd als "inline". Als een oproep naar een bepaalde functie is geïntegreerd, dan
functie wordt niet op zichzelf als assembler-code uitgevoerd.

Ingeschakeld op niveaus -O1, -O2, -O3 en -Jij.

-angstig-inlining
Inline-functies gemarkeerd met "always_inline" en functies waarvan de body kleiner lijkt dan
de functie-aanroep overhead vroeg voordat u doet -fprofile-genereren instrumentatie en
echte inlining pass. Hierdoor wordt profilering aanzienlijk goedkoper en meestal
sneller inlinen op programma's met grote ketens van geneste wrapper-functies.

Standaard ingeschakeld.

-fipa-sra
Voer interprocedurele scalaire vervanging van aggregaten uit, verwijder ongebruikte parameters
en vervanging van parameters doorgegeven door referentie door parameters doorgegeven door waarde.

Ingeschakeld op niveaus -O2, -O3 en -Jij.

-finline-limiet=n
GCC beperkt standaard de grootte van functies die inline kunnen worden geplaatst. Deze vlag staat toe:
grove controle van deze limiet. n is de grootte van functies die kunnen worden inline
aantal pseudo-instructies.

Inlining wordt feitelijk bestuurd door een aantal parameters, die kunnen worden gespecificeerd
individueel met behulp van --param naam=waarde. De -finline-limiet=n optie stelt een aantal van
deze parameters als volgt:

max-inline-insns-single
is ingesteld op n/ 2.

max-inline-insns-auto
is ingesteld op n/ 2.

Zie hieronder voor een documentatie van de individuele parameters die inlining en
voor de standaardwaarden van deze parameters.

Opmerking: er is misschien geen waarde aan -finline-limiet dat resulteert in standaard gedrag.

Opmerking: pseudo-instructie vertegenwoordigt, in deze specifieke context, een abstract
meting van de grootte van de functie. Het vertegenwoordigt op geen enkele manier een telling van de vergadering
instructies en als zodanig kan de exacte betekenis ervan veranderen van de ene release naar de andere
andere.

-fno-keep-inline-dllexport
Dit is een meer verfijnde versie van -fkeep-inline-functies, die alleen van toepassing is op
functies die zijn gedeclareerd met het kenmerk "dllexport" of declspec

-fkeep-inline-functies
Zend in C "statische" functies uit die "inline" zijn gedeclareerd in het objectbestand, zelfs als:
de functie is in al zijn bellers opgenomen. Deze schakelaar heeft geen invloed op:
functies met behulp van de "externe inline" extensie in GNU C90. Zend in C++ alles en nog wat uit
inline-functies in het objectbestand.

-fhoud-statische-consts
Geef variabelen uit die zijn gedeclareerd als "statische const" wanneer optimalisatie niet is ingeschakeld, zelfs als de
naar variabelen wordt niet verwezen.

GCC schakelt deze optie standaard in. Als u de compiler wilt dwingen om te controleren of het
naar variabele werd verwezen, ongeacht of optimalisatie is ingeschakeld, use
de -fno-keep-static-consts optie.

-fmerge-constanten
Poging om identieke constanten samen te voegen (tekenreeksconstanten en drijvende-kommaconstanten)
over compilatie-eenheden.

Deze optie is de standaard voor geoptimaliseerde compilatie als de assembler en linker
ondersteun het. Gebruik maken van -fno-samenvoegen-constanten om dit gedrag te remmen.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fmerge-alle-constanten
Poging om identieke constanten en identieke variabelen samen te voegen.

Deze optie houdt in: -fmerge-constanten. In aanvulling op -fmerge-constanten dit
beschouwt bijv. zelfs constant geïnitialiseerde arrays of geïnitialiseerde constante variabelen met
integrale of drijvende-kommatypes. Talen zoals C of C++ vereisen elke variabele,
het opnemen van meerdere instanties van dezelfde variabele in recursieve aanroepen, om verschillende
locaties, dus het gebruik van deze optie resulteert in niet-conform gedrag.

-fmodulo-sched
Voer de swing-modulo-planning uit vlak voor de eerste planningspas. Dit
pass kijkt naar de binnenste lussen en herschikt hun instructies door verschillende overlappende
iteraties.

-fmodulo-sched-toestaan-regmoves
Voer agressievere op SMS gebaseerde modulo-planning uit met toegestane registerbewegingen. Door
door deze vlag in te stellen, worden bepaalde anti-afhankelijkheidsranden verwijderd die worden geactiveerd
het genereren van reg-moves op basis van de levensbereikanalyse. Deze optie is
alleen effectief met -fmodulo-sched ingeschakeld.

-fno-filiaal-tel-reg
Gebruik geen "decrement and branch"-instructies op een telregister, maar in plaats daarvan:
genereer een reeks instructies die een register verlagen, vergelijk het met
nul, dan vertakt op basis van het resultaat. Deze optie is alleen zinvol op
architecturen die dergelijke instructies ondersteunen, waaronder x86, PowerPC, IA-64 en
S/390.

De standaard is -ftak-tel-reg.

-fno-functie-cse
Zet geen functieadressen in registers; maak elke instructie die a . aanroept
constante functie bevatten expliciet het adres van de functie.

Deze optie resulteert in minder efficiënte code, maar enkele vreemde hacks die de
assembler-uitvoer kan worden verward door de optimalisaties die worden uitgevoerd wanneer deze optie is
niet gebruikt.

De standaard is -ffunctie-cse

-fno-nul-geïnitialiseerd-in-bss
Als het doel een BSS-sectie ondersteunt, plaatst GCC standaard variabelen die:
geïnitialiseerd op nul in BSS. Dit kan ruimte besparen in de resulterende code.

Deze optie schakelt dit gedrag uit omdat sommige programma's expliciet afhankelijk zijn van variabelen
naar het gegevensgedeelte gaan. Bijvoorbeeld, zodat het resulterende uitvoerbare bestand het
begin van die sectie en/of maak op basis daarvan aannames.

De standaard is -fzero-geïnitialiseerd-in-bss.

-fspatlap -fspatlap -fmodderlapir
Voor front-ends die dit ondersteunen (C en C++), instrument alle risicovolle pointer/array
dereferentiebewerkingen, sommige standaardbibliotheekreeks-/heapfuncties en enkele andere
geassocieerde constructen met bereik/validiteitstesten. Modules die zo geïnstrumenteerd zouden moeten zijn:
immuun voor bufferoverflows, ongeldig heapgebruik en enkele andere klassen van C/C++
programmeer fouten. De instrumentatie is gebaseerd op een aparte runtime-bibliotheek
(libmudflap), die zal worden gekoppeld aan een programma als -fspatlap wordt gegeven tijdens het koppelen.
Het looptijdgedrag van het geïnstrumenteerde programma wordt bestuurd door de MUDFLAP_OPTIONS
omgevingsvariabele. Zie "env MUDFLAP_OPTIONS=-help a.out" voor de opties.

Te gebruiken -fspatlap in plaats van -fspatlap te compileren en te linken als uw programma multi-
schroefdraad. Gebruik maken van -fmodderlapirNaast -fspatlap or -fspatlap, als
instrumentatie moet pointer-lezingen negeren. Dit levert minder instrumentatie op (en
daardoor snellere uitvoering) en biedt nog steeds enige bescherming tegen ronduit geheugen
corrupte schrijfbewerkingen, maar staat foutief gelezen gegevens toe om zich binnen een programma te verspreiden.

-fthread-sprongen
Voer optimalisaties uit waarbij we controleren of een sprong vertakt naar een locatie waar
een andere vergelijking die door de eerste wordt opgenomen, wordt gevonden. Zo ja, dan is de eerste tak
direct omgeleid naar de bestemming van de tweede tak of een punt
volgen, afhankelijk van of bekend is dat de voorwaarde waar of onwaar is.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fsplit-wide-types
Bij gebruik van een type dat meerdere registers in beslag neemt, zoals "long long" op een 32-bit
systeem, de registers opsplitsen en onafhankelijk toewijzen. dit normaal
genereert betere code voor die typen, maar kan het debuggen moeilijker maken.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fcse-volg-sprongen
In Common Subexpression Elimination (CSE), scant u door springinstructies wanneer de
het doel van de sprong wordt door geen enkel ander pad bereikt. Bijvoorbeeld, wanneer CSE tegenkomt
een "if"-instructie met een "else"-clausule, zal CSE de sprong volgen wanneer de voorwaarde
getest is vals.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fcse-blokken-overslaan
Dit is vergelijkbaar met -fcse-volg-sprongen, maar zorgt ervoor dat CSE sprongen volgt die
blokken voorwaardelijk overslaan. Wanneer CSE een eenvoudige "if"-instructie tegenkomt met nee
anders clausule, -fcse-blokken-overslaan zorgt ervoor dat CSE de sprong rond het lichaam van de
"indien".

Ingeschakeld op niveaus -O2, -O3, -Jij.

-frerun-cse-na-lus
Voer de eliminatie van algemene subexpressies opnieuw uit nadat lusoptimalisaties zijn uitgevoerd.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fgcse
Voer een globale gemeenschappelijke subexpressie eliminatie pass uit. Deze pas presteert ook
globale constante en kopievoortplanting.

Opmerking: Bij het compileren van een programma met behulp van computed gotos, een GCC-extensie, krijgt u mogelijk:
betere runtime-prestaties als u de globale eliminatie van gemeenschappelijke subexpressies uitschakelt
pas door toe te voegen -fno-gcse naar de opdrachtregel.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fgcse-lm
. -fgcse-lm is ingeschakeld, zal de eliminatie van globale gemeenschappelijke subexpressies proberen
verplaats ladingen die alleen door winkels worden gedood naar zichzelf. Dit maakt een lus mogelijk
met een laad-/opslagvolgorde die moet worden gewijzigd in een belasting buiten de lus, en a
kopiëren/opslaan binnen de lus.

Standaard ingeschakeld wanneer gcse is ingeschakeld.

-fgcse-sm
. -fgcse-sm is ingeschakeld, wordt een winkelbewegingspas uitgevoerd na global common
eliminatie van subexpressie. Deze pas probeert winkels uit de lussen te halen. Wanneer
gebruikt in combinatie met -fgcse-lm, kunnen lussen met een laad-/opslagreeks zijn
gewijzigd in een belasting voor de lus en een opslag na de lus.

Op geen enkel optimalisatieniveau ingeschakeld.

-fgcse-las
. -fgcse-las is ingeschakeld, de globale gemeenschappelijke subexpressie eliminatie pass
elimineert overtollige belastingen die na opslag op dezelfde geheugenlocatie komen (beide
gedeeltelijke en volledige ontslagen).

Op geen enkel optimalisatieniveau ingeschakeld.

-fgcse-na-herladen
. -fgcse-na-herladen is ingeschakeld, wordt een redundante belastingverwijderingspas uitgevoerd
na herladen. Het doel van deze pas is om overtollige morsingen op te ruimen.

-funsafe-loop-optimalisaties
Indien gegeven, gaat de loop-optimizer ervan uit dat loop-indices niet overlopen, en zo
de lussen met een niet-triviale exit-voorwaarde zijn niet oneindig. Dit maakt een groter bereik mogelijk
van lusoptimalisaties, zelfs als de lusoptimalisatie zelf niet kan bewijzen dat deze
aannames kloppen. Gebruik makend van -Wunsafe-loop-optimalisaties, zal de compiler u waarschuwen
als het dit soort lus vindt.

-fcrossspringen
Voer een cross-jumping transformatie uit. Deze transformatie verenigt equivalente code en
codegrootte opslaan. De resulterende code kan al dan niet beter presteren dan zonder
springen.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fauto-inc-dec
Combineer verhogingen of verlagingen van adressen met geheugentoegangen. Deze pas is
worden altijd overgeslagen op architecturen die geen instructies hebben om dit te ondersteunen.
Standaard ingeschakeld op -O en hoger op architecturen die dit ondersteunen.

-fdce
Voer dead code-eliminatie (DCE) uit op RTL. Standaard ingeschakeld op -O en hoger.

-fdse
Voer dead store eliminatie (DSE) uit op RTL. Standaard ingeschakeld op -O en hoger.

-fif-conversie
Poging om voorwaardelijke sprongen om te zetten in takloze equivalenten. Dit is inclusief gebruik
van voorwaardelijke zetten, min, max, stel vlaggen en abs-instructies in, en sommige trucs zijn uitvoerbaar
door standaard rekenkunde. Het gebruik van voorwaardelijke uitvoering op chips waar het is
beschikbaar is, wordt beheerd door "if-conversion2".

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fif-conversie2
Gebruik voorwaardelijke uitvoering (indien beschikbaar) om voorwaardelijke sprongen om te zetten in
brancheloze equivalenten.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fdelete-null-pointer-controles
Neem aan dat programma's de verwijzing naar null-pointers niet veilig kunnen verwijderen en dat er geen code of gegevens zijn
element zit daar. Dit maakt eenvoudige constante vouwoptimalisaties helemaal mogelijk
optimalisatie niveaus. Bovendien gebruiken andere optimalisatiepassen in GCC deze vlag om:
controle van globale datastroomanalyses die nutteloze controles op nullpointers elimineren;
deze gaan ervan uit dat als een aanwijzer wordt gecontroleerd nadat deze al is verwijderd, deze
Kan niet nul zijn.

Merk echter op dat in sommige omgevingen deze veronderstelling niet waar is. Gebruik maken van
-fno-verwijder-null-pointer-controles om deze optimalisatie uit te schakelen voor programma's die afhankelijk zijn van
op dat gedrag.

Sommige doelen, vooral ingebedde doelen, schakelen deze optie op alle niveaus uit. Anders
het is ingeschakeld op alle niveaus: -O0, -O1, -O2, -O3, -Jij. Passen die de informatie gebruiken
worden onafhankelijk ingeschakeld op verschillende optimalisatieniveaus.

-fdevirtualiseren
Poging om oproepen naar virtuele functies om te zetten in directe oproepen. Dit is beide gedaan
binnen een procedure en interprocedureel als onderdeel van indirecte inlining
("-findirect-inlining") en interprocedurele constante voortplanting (-fipa-cp). Ingeschakeld
op niveaus -O2, -O3, -Jij.

-fexpensive-optimalisaties
Voer een aantal kleine optimalisaties uit die relatief duur zijn.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-vrij
Poging om overbodige extensie-instructies te verwijderen. Dit is vooral handig voor
de x86-64-architectuur die daarna impliciet nul-uitbreidt in 64-bits registers
schrijven naar hun lagere 32-bits helft.

Ingeschakeld voor x86 op niveaus -O2, -O3.

-foptimaliseren-register-verplaatsen
-fregverplaatsing
Poging om registernummers opnieuw toe te wijzen in verplaatsingsinstructies en als operanden van andere
eenvoudige instructies om de hoeveelheid registerbinding te maximaliseren. Dit is
vooral handig op machines met twee-operand instructies.

Note -fregverplaatsing en -foptimaliseren-register-verplaatsen zijn dezelfde optimalisatie.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fira-algoritme=algoritme
Gebruik het opgegeven kleuralgoritme voor de geïntegreerde registertoewijzer. De
algoritme argument kan zijn prioriteit, die de prioriteitskleuring van Chow specificeert, of CB,
die de Chaitin-Briggs-kleuring specificeert. Chaitin-Briggs-kleuring is niet geïmplementeerd
voor alle architecturen, maar voor die doelen die het wel ondersteunen, is dit de standaard
omdat het betere code genereert.

-fira-regio=regio
Gebruik opgegeven regio's voor de geïntegreerde registertoewijzer. De regio argument
moet een van de volgende zijn:

allen Gebruik alle lussen als registertoewijzingsregio's. Dit kan de beste resultaten geven voor:
machines met een kleine en/of onregelmatige registerset.

gemengd
Gebruik alle lussen behalve lussen met een kleine registerdruk als de regio's. Dit
waarde geeft meestal de beste resultaten in de meeste gevallen en voor de meeste architecturen, en
is standaard ingeschakeld bij het compileren met optimalisatie voor snelheid (-O, -O2, ...).

een Gebruik alle functies als één regio. Dit resulteert meestal in de kleinste code
grootte, en is standaard ingeschakeld voor -Jij or -O0.

-fira-loop-druk
Gebruik IRA om registerdruk in lussen te evalueren voor beslissingen om lusinvarianten te verplaatsen.
Deze optie resulteert meestal in het genereren van snellere en kleinere code op machines met:
grote registerbestanden (>= 32 registers), maar het kan de compiler vertragen.

Deze optie is ingeschakeld op niveau -O3 voor sommige doelen.

-fno-ira-share-save-slots
Schakel het delen van stack-slots uit die worden gebruikt voor het opslaan van door oproepen gebruikte harde registers die doorleven
een telefoontje. Elk hard register krijgt een aparte stapelsleuf, en als resultaat functiestapel
kozijnen zijn groter.

-fno-ira-share-spill-slots
Schakel het delen van stapelsleuven die zijn toegewezen voor pseudo-registers uit. Elk pseudo-register
die geen hard register krijgt, krijgt een aparte stack-sleuf, en als resultaat functie
stapelframes zijn groter.

-fira-verbose=n
Beheer de breedsprakigheid van het dumpbestand voor de geïntegreerde registertoewijzer. De
standaardwaarde is 5. Als de waarde n groter of gelijk is aan 10, wordt de dumpoutput verzonden
naar stderr met hetzelfde formaat als n min 10.

-fvertraagde-tak
Indien ondersteund voor de doelcomputer, probeer de instructies om te misbruiken opnieuw te ordenen
instructieslots beschikbaar na vertraagde vertakkingsinstructies.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fschema-insns
Indien ondersteund voor de doelcomputer, probeer de instructies opnieuw te ordenen om te elimineren
uitvoering loopt vast omdat de vereiste gegevens niet beschikbaar zijn. Dit helpt machines die:
langzame drijvende-komma- of geheugenlaadinstructies hebben door andere instructies toe te staan:
worden afgegeven totdat het resultaat van de load- of floating-pointinstructie vereist is.

Ingeschakeld op niveaus -O2, -O3.

-fschema-insns2
Soortgelijke -fschema-insns, maar vraagt ​​om een ​​extra instructieplanning
nadat de registertoewijzing is gedaan. Dit is vooral handig op machines met een
relatief klein aantal registers en waar instructies voor het laden van het geheugen meer dan
één cyclus.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fno-sched-interblock
Plan geen instructies over basisblokken heen. Dit is normaal gesproken standaard ingeschakeld
bij het plannen vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 or
hoger.

-fno-sched-specificatie
Sta geen speculatieve beweging van niet-laden instructies toe. Dit wordt normaal gesproken ingeschakeld door:
standaard bij planning vóór registertoewijzing, dwz met -fschema-insns of
-O2 of hoger.

-fsched-druk
Activeer registerdrukgevoelige insn-planning vóór de registertoewijzing.
Dit heeft alleen zin als plannen vóór registertoewijzing is ingeschakeld, dwz met
-fschema-insns of -O2 of hoger. Het gebruik van deze optie kan de gegenereerde
code en verklein de grootte door te voorkomen dat de registerdruk boven het nummer stijgt
van beschikbare harde registers en als gevolg daarvan registermorsingen in het register
toewijzing.

-fsched-specificatie-laden
Laat speculatieve beweging van sommige laadinstructies toe. Dit heeft alleen zin als
planning vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 of hoger.

-fsched-spec-load-gevaarlijk
Laat speculatieve beweging van meer laadinstructies toe. Dit heeft alleen zin als
planning vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 of hoger.

-fsched-vastgelopen-insns
-fsched-vastgelopen-insns=n
Definieer hoeveel insns (indien aanwezig) voortijdig uit de wachtrij van vastgelopen kunnen worden verplaatst
insns in de gereedstaande lijst, tijdens de tweede planningspas.
-fno-sched-vastgelopen-insns betekent dat er geen herbergen voortijdig worden verplaatst,
-fsched-vastgelopen-insns=0 betekent dat er geen limiet is op het aantal in de wachtrij geplaatste insns dat kan worden verplaatst
voortijdig. -fsched-vastgelopen-insns zonder een waarde is gelijk aan
-fsched-vastgelopen-insns=1.

-fsched-vastgelopen-insns-dep
-fsched-vastgelopen-insns-dep=n
Definieer hoeveel insn-groepen (cycli) zullen worden onderzocht op een afhankelijkheid van een vastgelopen
insn die kandidaat is voor voortijdige verwijdering uit de wachtrij van vastgelopen insns. Dit
heeft alleen effect tijdens de tweede planningspassage, en alleen als
-fsched-vastgelopen-insns is gebruikt. -fno-sched-vastgelopen-insns-dep is gelijk aan
-fsched-vastgelopen-insns-dep=0. -fsched-vastgelopen-insns-dep zonder waarde is equivalent
naar -fsched-vastgelopen-insns-dep=1.

-fsched2-gebruik-superblokken
Gebruik bij het plannen na registertoewijzing het algoritme voor superblokplanning.
Superblock-planning maakt beweging mogelijk over basisblokgrenzen heen, wat resulteert in sneller
schema's. Deze optie is experimenteel, aangezien niet alle machinebeschrijvingen door GCC worden gebruikt
modelleer de CPU nauwkeurig genoeg om onbetrouwbare resultaten van het algoritme te voorkomen.

Dit heeft alleen zin bij het plannen na registertoewijzing, dus met
-fschema-insns2 of -O2 of hoger.

-fsched-groep-heuristiek
Schakel de groepsheuristiek in de planner in. Deze heuristiek is gunstig voor de instructie
die bij een planningsgroep hoort. Dit is standaard ingeschakeld wanneer plannen is
ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2 of hoger.

-fsched-kritiek-pad-heuristiek
Schakel de kritieke-padheuristiek in de planner in. Deze heuristiek begunstigt
instructies op het kritieke pad. Dit is standaard ingeschakeld wanneer plannen is
ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2 of hoger.

-fsched-spec-insn-heuristiek
Schakel de speculatieve instructieheuristiek in de planner in. Deze heuristiek begunstigt
speculatieve instructies met een grotere afhankelijkheidszwakte. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-fsched-rank-heuristiek
Schakel de rangheuristiek in de planner in. Deze heuristiek is gunstig voor de instructie
behorend tot een basisblok met grotere omvang of frequentie. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-fsched-laatste-insn-heuristiek
Schakel de heuristiek van de laatste instructie in de planner in. Deze heuristiek is gunstig voor de
instructie die minder afhankelijk is van de laatst ingeplande instructie. Dit is ingeschakeld
standaard wanneer planning is ingeschakeld, dwz met -fschema-insns or -fschema-insns2
of -O2 of hoger.

-fsched-dep-count-heuristiek
Schakel de heuristiek van het aantal afhankelijkheden in de planner in. Deze heuristiek is gunstig voor de
instructie die meer instructies heeft, afhankelijk van. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-nieuwe planning-modulo-geplande-lussen
De modulo-planning komt vóór de traditionele planning, als een lus modulo was
gepland, willen we misschien voorkomen dat de latere planningspassen zijn wijzigen
schema, we gebruiken deze optie om dat te regelen.

-fselectieve planning
Plan instructies met behulp van selectief planningsalgoritme. Selectieve planning wordt uitgevoerd
in plaats van de eerste plannerpas.

-fselectieve planning2
Plan instructies met behulp van selectief planningsalgoritme. Selectieve planning wordt uitgevoerd
in plaats van de tweede plannerpas.

-fsel-sched-pijpleidingen
Schakel software-pipelining van binnenste lussen in tijdens selectieve planning. Dit
optie heeft geen effect totdat een van -fselectieve planning or -fselectieve planning2 is
Opgewonden.

-fsel-sched-pipelining-buitenste lussen
Bij het pijplijnen van lussen tijdens selectieve planning, ook voor het pijplijnen van buitenste lussen. Dit
optie heeft geen effect totdat -fsel-sched-pijpleidingen is ingeschakeld.

-fkrimpfolie
Zend functie-prologen alleen uit vóór delen van de functie die het nodig hebben, in plaats van bij
de bovenkant van de functie. Deze vlag is standaard ingeschakeld op -O en hoger.

-fcaller-opslaat
Activeer waarden die kunnen worden toegewezen in registers die worden overspoeld door functieaanroepen,
door extra instructies uit te zenden om de registers rond dergelijke oproepen op te slaan en te herstellen.
Een dergelijke toewijzing wordt alleen gedaan als het lijkt te resulteren in betere code dan zou gebeuren
anders geproduceerd worden.

Deze optie is altijd standaard ingeschakeld op bepaalde machines, meestal die met:
geen oproep-bewaarde registers om in plaats daarvan te gebruiken.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fcombine-stack-aanpassingen
Volgt stapelaanpassingen (pusht en plop) en stapelt geheugenreferenties en probeert dan
manieren te vinden om ze te combineren.

Standaard ingeschakeld op -O1 en hoger.

-fconserve-stack
Probeer het stapelgebruik te minimaliseren. De compiler zal proberen om minder stackruimte te gebruiken,
zelfs als dat het programma langzamer maakt. Deze optie impliceert het instellen van de grote stapel
omlijsting parameter op 100 en de large-stack-frame-groei parameter naar 400.

-ftree-redenoc
Voer herassociatie uit op bomen. Deze vlag is standaard ingeschakeld op -O en hoger.

-ftree-pre
Voer gedeeltelijke redundantieverwijdering (PRE) uit op bomen. Deze vlag is ingeschakeld door
standaard op -O2 en -O3.

-ftree-gedeeltelijke-pre
Maak gedeeltelijke redundantie-eliminatie (PRE) agressiever. Deze vlag is ingeschakeld door
standaard op -O3.

-ftree-forwprop
Voer voorwaartse voortplanting uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

- vrij van bomen
Voer volledige redundantie-eliminatie (FRE) uit op bomen. Het verschil tussen FRE en
PRE is dat FRE alleen uitdrukkingen beschouwt die zijn berekend op alle paden die leiden naar
de overbodige berekening. Deze analyse is sneller dan PRE, hoewel het minder blootlegt
ontslagen. Deze vlag is standaard ingeschakeld op -O en hoger.

-ftree-phiprop
Voer het hijsen van lasten uit vanaf voorwaardelijke wijzers op bomen. Deze pas is mogelijk gemaakt door:
standaard op -O en hoger.

-ftree-kopie-prop
Kopieervoortplanting op bomen uitvoeren. Deze pas elimineert onnodige kopieerhandelingen.
Deze vlag is standaard ingeschakeld op -O en hoger.

-fipa-pure-const
Ontdek welke functies puur of constant zijn. Standaard ingeschakeld op -O en hoger.

-fipa-referentie
Ontdek welke statische variabelen niet kunnen ontsnappen aan de compilatie-eenheid.
Standaard ingeschakeld op -O en hoger.

-fipa-pta
Voer interprocedurele pointeranalyse en interprocedurele modificatie uit en
referentie analyse. Deze optie kan leiden tot overmatig geheugen en tijdens het compileren
grote verzameleenheden. Het is op geen enkel optimalisatieniveau standaard ingeschakeld.

-fipa-profiel
Voer interprocedurele profielvoortplanting uit. De functies worden alleen vanuit de koude aangeroepen
functies zijn gemarkeerd als koud. Ook functies die eenmalig worden uitgevoerd (zoals "koud",
"noreturn", statische constructors of destructors) worden geïdentificeerd. Koude functies en
lusloze delen van functies die een keer worden uitgevoerd, worden vervolgens geoptimaliseerd voor grootte. Ingeschakeld door
standaard op -O en hoger.

-fipa-cp
Voer interprocedurele constante voortplanting uit. Deze optimalisatie analyseert het programma
om te bepalen wanneer waarden die aan functies worden doorgegeven constanten zijn en vervolgens optimaliseren
overeenkomstig. Deze optimalisatie kan de prestaties aanzienlijk verhogen als de
toepassing heeft constanten doorgegeven aan functies. Deze vlag is standaard ingeschakeld op
-O2, -Jij en -O3.

-fipa-cp-kloon
Voer functieklonen uit om interprocedurele constante voortplanting sterker te maken. Wanneer
ingeschakeld, voert interprocedurele constante propagatie functieklonen uit wanneer
extern zichtbare functie kan worden aangeroepen met constante argumenten. Omdat dit
optimalisatie kan meerdere kopieën van functies maken, het kan aanzienlijk toenemen
codegrootte (zie --param ippc-eenheidsgroei=waarde). Deze vlag is standaard ingeschakeld op
-O3.

-fipa-matrix-reorg
Voer matrixafvlakking en transponering uit. Matrix flattening probeert een
m-dimensionale matrix met zijn equivalente n-dimensionale matrix, waarbij n < m. Dit
vermindert het indirecte niveau dat nodig is om toegang te krijgen tot de elementen van de matrix. De
tweede optimalisatie is matrixtransponering, die probeert de volgorde van de
matrix-dimensies om de locatie van de cache te verbeteren. Beide optimalisaties hebben de
-f hele-programma vlag. Transponeren is alleen ingeschakeld als profileringsinformatie is ingeschakeld
beschikbaar.

-vtree-gootsteen
Voer voorwaartse opslagbeweging uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-bit-ccp
Voer schaarse voorwaardelijke bitconstante propagatie uit op bomen en propageer de aanwijzer
informatie over uitlijning. Deze pas werkt alleen op lokale scalaire variabelen en is
standaard ingeschakeld op -O en hoger. Het vereist dat -ftree-ccp is ingeschakeld.

-ftree-ccp
Voer schaarse voorwaardelijke constante voortplanting (CCP) uit op bomen. Alleen deze pas
werkt op lokale scalaire variabelen en is standaard ingeschakeld op -O en hoger.

-ftree-switch-conversie
Voer conversie uit van eenvoudige initialisaties in een omschakeling naar initialisaties van a
scalaire reeks. Deze vlag is standaard ingeschakeld op -O2 en hoger.

-ftree-staart-samenvoegen
Zoek naar identieke codereeksen. Wanneer gevonden, vervangt u de ene door een sprong naar de andere.
Deze optimalisatie staat bekend als staartsamenvoeging of kruisspringen. Deze vlag is ingeschakeld door
standaard op -O2 en hoger. De compilatietijd in deze pas kan worden beperkt met:
max-tail-merge-vergelijkingen parameter en max-tail-merge-iteraties parameter.

-ftree-dce
Voer dode code-eliminatie (DCE) uit op bomen. Deze vlag is standaard ingeschakeld op -O
en hoger.

-ftree-ingebouwde-aanroep-dce
Voer voorwaardelijke dode code-eliminatie (DCE) uit voor oproepen naar ingebouwde functies die
kunnen "errno" instellen, maar zijn verder vrij van bijwerkingen. Deze vlag is standaard ingeschakeld
at -O2 en hoger als -Jij staat ook niet vermeld.

-ftree-dominator-opteert
Voer een verscheidenheid aan eenvoudige scalaire opschoningen uit (constante/kopie-propagatie, redundantie
eliminatie, bereikvermeerdering en expressievereenvoudiging) op basis van een dominator
boom oversteken. Hiermee wordt ook jumpthreading uitgevoerd (om sprongen tot sprongen te verminderen). Dit
vlag is standaard ingeschakeld op -O en hoger.

-ftree-dse
Voer dead store-eliminatie (DSE) uit op bomen. Een dode winkel is een winkel in een herinnering
locatie die later wordt overschreven door een andere winkel zonder tussenliggende belastingen. In
in dit geval kan de eerdere winkel worden verwijderd. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-ch
Voer luskopkopieën uit op bomen. Dit is gunstig omdat het toeneemt
effectiviteit van optimalisaties van codebewegingen. Het scheelt ook een sprong. Deze vlag is
standaard ingeschakeld op -O en hoger. Het is niet ingeschakeld voor -Jij, aangezien het meestal
vergroot de codegrootte.

-ftree-loop-optimaliseren
Voer lusoptimalisaties uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-loop-lineair
Voer lusuitwisselingstransformaties uit op boom. Hetzelfde als -floop-uitwisseling. Gebruiken
deze codetransformatie, GCC moet worden geconfigureerd met --met-ppl en --met-cloog naar
de Graphite loop-transformatie-infrastructuur mogelijk maken.

-floop-uitwisseling
Voer lusuitwisselingstransformaties uit op lussen. Twee geneste lussen verwisselen
schakelt de binnenste en buitenste lussen. Bijvoorbeeld, gegeven een lus als:

DO J = 1, M
DO ik = 1, N
A(J, ik) = A(J, ik) * C
EINDDO
EINDDO

lusuitwisseling zal de lus transformeren alsof de gebruiker had geschreven:

DO ik = 1, N
DO J = 1, M
A(J, ik) = A(J, ik) * C
EINDDO
EINDDO

wat handig kan zijn als "N" groter is dan de caches, omdat in Fortran de
elementen van een array worden aaneengesloten per kolom in het geheugen opgeslagen, en het origineel
lus herhaalt rijen, waardoor bij elke toegang mogelijk een cache wordt gemist. Dit
optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te maken.

-floop-strip-mijn
Voer lus strip mining-transformaties uit op lussen. Strip mining splitst een lus in
twee geneste lussen. De buitenste lus heeft stappen gelijk aan de stripmaat en de binnenste lus
lus heeft stappen van de originele lus in een strook. De striplengte kan worden gewijzigd!
met de lus-blok-tegelgrootte parameter. Bijvoorbeeld, gegeven een lus als:

DO ik = 1, N
A(I) = A(I) + C
EINDDO

loop strip mining transformeert de lus alsof de gebruiker had geschreven:

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

Deze optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te maken.

-floop-blok
Voer lusblokkeringstransformaties uit op lussen. Blokkeerstrip mijnt elke lus in de
loop nest zodat de geheugentoegangen van de elementlussen in caches passen. De
striplengte kan worden gewijzigd met de lus-blok-tegelgrootte parameter. Bijvoorbeeld,
gegeven een lus zoals:

DO ik = 1, N
DO J = 1, M
A(J, ik) = B(I) + C(J)
EINDDO
EINDDO

lusblokkering transformeert de lus alsof de gebruiker had geschreven:

DO II = 1, N, 51
DOEN JJ = 1, M, 51
DO ik = II, min (II + 50, N)
DO J = JJ, min (JJ + 50, M)
A(J, ik) = B(I) + C(J)
EINDDO
EINDDO
EINDDO
EINDDO

wat handig kan zijn als "M" groter is dan de caches, omdat de binnenste lus
itereert over een kleinere hoeveelheid gegevens die in de caches kan worden bewaard. Dit
optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te maken.

-fgrafiet-identiteit
Schakel de identiteitstransformatie voor grafiet in. Voor elke SCoP genereren we de
polyedrische representatie en transformeer deze terug naar gimple. Gebruik makend van -fgrafiet-identiteit
we kunnen de kosten of baten van de GIMPLE -> GRAPHITE -> GIMPLE transformatie bekijken.
Enkele minimale optimalisaties worden ook uitgevoerd door de codegenerator CLooG, zoals index
splitsen en eliminatie van dode code in lussen.

-floop-afvlakken
Verwijdert de lus-neststructuur: transformeert de lus-nest in een enkele lus. Dit
transformatie kan nuttig zijn als een activeringstransformatie voor vectorisatie en
parallellisatie. Deze functie is experimenteel. Om deze codetransformatie te gebruiken, GCC
moet worden geconfigureerd met --met-ppl en --met-cloog om de Graphite-lus in te schakelen
transformatie infrastructuur.

-floop-paralleliseer-alles
Gebruik de Graphite-gegevensafhankelijkheidsanalyse om lussen te identificeren die kunnen worden geparalleliseerd.
Parallelliseer alle lussen die kunnen worden geanalyseerd om geen door lussen gedragen afhankelijkheden te bevatten
zonder te controleren of het winstgevend is om de lussen te parallelliseren.

-fcheck-data-deps
Vergelijk de resultaten van verschillende data-afhankelijkheidsanalysatoren. Deze optie wordt gebruikt voor:
debuggen van de gegevensafhankelijkheidsanalysatoren.

-ftree-lus-als-omzetten
Poging om voorwaardelijke sprongen in de binnenste lussen te transformeren naar takloos
equivalenten. De bedoeling is om de controlestroom uit de binnenste lussen te verwijderen om
om het vermogen van de vectorisatiepas om deze lussen te verwerken te verbeteren. Dit is
standaard ingeschakeld als vectorisatie is ingeschakeld.

-ftree-loop-if-convert-winkels
Probeer ook if-convert voorwaardelijke sprongen die geheugenschrijven bevatten. Dit
transformatie kan onveilig zijn voor programma's met meerdere threads omdat het voorwaardelijk transformeert
geheugen schrijft in onvoorwaardelijk geheugen schrijft. Bijvoorbeeld,

voor (i = 0; ik < N; i++)
als (cond)
A[i] = uitdr;

zou worden omgevormd tot

voor (i = 0; ik < N; i++)
A[i] = voorwaarde ? expr : A[i];

mogelijk dataraces produceren.

-ftree-loop-distributie
Voer lusdistributie uit. Deze vlag kan de cacheprestaties op grote luslichamen verbeteren
en laat verdere lusoptimalisaties, zoals parallellisatie of vectorisatie, toe
plaats. Bijvoorbeeld de lus

DO ik = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
EINDDO

wordt getransformeerd naar

DO ik = 1, N
A(I) = B(I) + C
EINDDO
DO ik = 1, N
D(I) = E(I) * F
EINDDO

-ftree-loop-distribueer-patronen
Voer lusdistributie uit van patronen die kunnen worden gegenereerd door middel van aanroepen naar a
bibliotheek. Deze vlag is standaard ingeschakeld op -O3.

Deze pas verdeelt de initialisatielussen en genereert een aanroep naar memset nul.
Bijvoorbeeld de lus

DO ik = 1, N
EEN(I) = 0
B(I) = A(I) + Ik
EINDDO

wordt getransformeerd naar

DO ik = 1, N
EEN(I) = 0
EINDDO
DO ik = 1, N
B(I) = A(I) + Ik
EINDDO

en de initialisatielus wordt omgezet in een oproep naar memset nul.

-ftree-lus-im
Voer lusinvariante bewegingen uit op bomen. Deze pass verplaatst alleen invarianten die zouden zijn
moeilijk te hanteren op RTL-niveau (functieaanroepen, bewerkingen die uitgroeien tot niet-triviaal
reeksen van insns). Met -funswitch-loops het verplaatst ook operanden van voorwaarden die
zijn invariant uit de lus, zodat we alleen triviale invariantiteitsanalyse kunnen gebruiken
in lus uitschakeling. De pas bevat ook winkelbewegingen.

-ftree-loop-ivcanon
Maak een canonieke teller voor het aantal iteraties in lussen waarvoor het bepalen van
aantal iteraties vereist een gecompliceerde analyse. Latere optimalisaties kunnen dan
eenvoudig het aantal bepalen. Nuttig vooral in verband met uitrollen.

-vijfpunten
Optimalisaties van inductievariabelen uitvoeren (sterktevermindering, inductievariabele)
samenvoeging en inductievariabele eliminatie) op bomen.

-ftree-parallelize-loops=n
Parallelliseer lussen, dwz splits hun iteratieruimte om in n threads te lopen. Dit is
alleen mogelijk voor lussen waarvan de iteraties onafhankelijk zijn en willekeurig kunnen zijn
herbesteld. De optimalisatie is alleen winstgevend op machines met meerdere processors, voor loops
die CPU-intensief zijn, in plaats van beperkt door bijvoorbeeld geheugenbandbreedte. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad.

-ftree-pta
Voer functie-lokale punten-naar-analyse uit op bomen. Deze vlag is standaard ingeschakeld
at -O en hoger.

-ftree-sra
Voer scalaire vervanging van aggregaten uit. Deze pas vervangt structuurreferenties
met scalairen om te voorkomen dat structuren te vroeg in het geheugen worden vastgelegd. Deze vlag is
standaard ingeschakeld op -O en hoger.

-ftree-kopieernaam
Kopieer hernoemen op bomen. Deze pas probeert de tijdelijke compiler te hernoemen naar:
andere variabelen op kopieerlocaties, wat meestal resulteert in variabelenamen die meer
sterk lijken op de oorspronkelijke variabelen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-coalesce-inline-vars
Vertel de copyrename pass (zie -ftree-kopieernaam) om te proberen kleine gebruikers-
gedefinieerde variabelen ook, maar alleen als ze inline waren vanuit andere functies. Het is een
meer beperkte vorm van -ftree-coalescentie-vars. Dit kan de foutopsporingsinformatie van dergelijke schaden
inline-variabelen, maar het houdt variabelen van de inline-in-functie apart van
elkaar, zodat ze meer kans hebben om de verwachte waarden te bevatten in a
debug sessie. Dit was de standaardinstelling in GCC-versies ouder dan 4.7.

-ftree-coalescentie-vars
Vertel de copyrename pass (zie -ftree-kopieernaam) om te proberen kleine gebruikers-
ook gedefinieerde variabelen, in plaats van alleen tijdelijke compiler. Dit kan ernstig beperken
de mogelijkheid om een ​​geoptimaliseerd programma te debuggen dat is gecompileerd met -fno-var-tracking-toewijzingen.
In de ontkende vorm voorkomt deze vlag dat SSA samensmelt met gebruikersvariabelen, waaronder:
ingelijnde. Deze optie is standaard ingeschakeld.

-ftree-ter
Voer tijdelijke vervanging van expressies uit tijdens de SSA->normale fase. Enkel
use/single def tijdelijken worden op hun gebruikslocatie vervangen door hun bepalende
uitdrukking. Dit resulteert in niet-GIMPLE-code, maar geeft de uitbreidingen veel meer
complexe bomen om aan te werken wat resulteert in een betere RTL-generatie. Dit wordt mogelijk gemaakt door
standaard op -O en hoger.

-ftree-vectoriseren
Voer lusvectorisatie uit op bomen. Deze vlag is standaard ingeschakeld op -O3.

-ftree-slp-vectoriseren
Voer basisblokvectorisatie uit op bomen. Deze vlag is standaard ingeschakeld op -O3 en
wanneer -ftree-vectoriseren is ingeschakeld.

-ftree-vect-loop-versie
Voer lusversiebeheer uit bij het uitvoeren van lusvectorisatie op bomen. Wanneer een lus verschijnt
vectoriseerbaar zijn, behalve dat gegevensuitlijning of gegevensafhankelijkheid niet kan worden bepaald
tijdens het compileren worden vervolgens gevectoriseerde en niet-gevectoriseerde versies van de lus gegenereerd
samen met runtime-controles voor uitlijning of afhankelijkheid om te bepalen welke versie is
uitgevoerd. Deze optie is standaard ingeschakeld, behalve op niveau -Jij waar het is uitgeschakeld.

-fvect-kostenmodel
Kostenmodel inschakelen voor vectorisatie.

-ftree-vrp
Voer waardebereikvoortplanting uit op bomen. Dit is vergelijkbaar met de constante voortplanting
pass, maar in plaats van waarden worden waardenbereiken gepropageerd. Hierdoor kan de
optimalisatieprogramma's om onnodige bereikcontroles zoals matrixgebonden controles en null-aanwijzer te verwijderen
cheques. Dit is standaard ingeschakeld op -O2 en hoger. Null pointer check eliminatie
wordt alleen gedaan als -fdelete-null-pointer-controles is ingeschakeld.

-ftracer
Voer staartduplicatie uit om de superblokgrootte te vergroten. Deze transformatie vereenvoudigt
de controlestroom van de functie waardoor andere optimalisaties beter werk kunnen doen.

-funroll-loops
Ontrol loops waarvan het aantal iteraties kan worden bepaald tijdens het compileren of daarna
toegang tot de lus. -funroll-loops impliceert -frerun-cse-na-lus. Deze optie maakt
code groter, en kan het al dan niet sneller laten werken.

-funroll-alle-loops
Rol alle lussen uit, zelfs als hun aantal iteraties onzeker is wanneer de lus is
ingevoerde. Hierdoor werken programma's meestal langzamer. -funroll-alle-loops impliceert de
dezelfde opties als -funroll-loops,

-fsplit-ivs-in-uitroller
Maakt het mogelijk waarden van inductievariabelen uit te drukken in latere iteraties van de
uitgerolde lus met behulp van de waarde in de eerste iteratie. Dit doorbreekt een lange afhankelijkheid
ketens, waardoor de efficiëntie van de planningspassen wordt verbeterd.

Combinatie van -fweb en CSE is vaak voldoende om hetzelfde effect te verkrijgen. Echter
in het geval dat het luslichaam ingewikkelder is dan een enkel basisblok, is dit niet het geval
betrouwbaar. Het werkt ook helemaal niet op sommige architecturen vanwege
beperkingen in de CSE-pas.

Deze optimalisatie is standaard ingeschakeld.

-fvariabele-uitbreiding-in-afroller
Met deze optie maakt de compiler meerdere kopieën van sommige lokale variabelen
bij het uitrollen van een lus die kan resulteren in superieure code.

-fgedeeltelijke-inlining
Inline delen van functies. Deze optie heeft alleen effect als inlinen zelf is
ingeschakeld door de -finline-functies or -finline-kleine-functies opties.

Ingeschakeld op niveau -O2.

-fvoorspellende-commoning
Predictive commoning-optimalisatie uitvoeren, dat wil zeggen, berekeningen opnieuw gebruiken (vooral
geheugen wordt geladen en opgeslagen) uitgevoerd in eerdere iteraties van lussen.

Deze optie is ingeschakeld op niveau -O3.

-fprefetch-loop-arrays
Indien ondersteund door de doelmachine, genereer instructies om geheugen vooraf op te halen om
de prestaties verbeteren van lussen die toegang hebben tot grote arrays.

Deze optie kan betere of slechtere code genereren; resultaten zijn sterk afhankelijk van de
structuur van lussen in de broncode.

Uitgeschakeld op niveau -Jij.

-fno-kijkgaatje
-fno-kijkgaatje2
Schakel eventuele machinespecifieke kijkgaatjesoptimalisaties uit. Het verschil tussen
-fno-kijkgaatje en -fno-kijkgaatje2 zit in hoe ze worden geïmplementeerd in de compiler; sommige
doelen gebruiken de ene, sommige gebruiken de andere, een paar gebruiken beide.

-fkijkgaatje is standaard ingeschakeld. -fkijkgaatje2 ingeschakeld op niveaus -O2, -O3, -Jij.

-fno-raad-tak-waarschijnlijkheid
Raad de vertakkingskansen niet met behulp van heuristieken.

GCC gebruikt heuristieken om vertakkingskansen te raden als deze niet worden geleverd door
profileringsfeedback (-fprofile-bogen). Deze heuristieken zijn gebaseerd op de controlestroom
grafiek. Als sommige vertakkingskansen zijn gespecificeerd door __ingebouwd_verwacht, dan de
heuristieken zullen worden gebruikt om vertakkingskansen voor de rest van de besturingsstroom te raden
grafiek, het nemen van de __ingebouwd_verwacht informatie in acht nemen. De interacties tussen de
heuristieken en __ingebouwd_verwacht kan complex zijn en in sommige gevallen kan het nuttig zijn om
schakel de heuristieken uit zodat de effecten van __ingebouwd_verwacht zijn gemakkelijker te
begrijpen.

De standaard is -fguess-branch-waarschijnlijkheid op niveaus -O, -O2, -O3, -Jij.

-freeorder-blokken
Herschik de basisblokken in de gecompileerde functie om het aantal genomen te verminderen
branches en verbeter de codelocatie.

Ingeschakeld op niveaus -O2, -O3.

-freeorder-blokken-en-partitie
Naast het opnieuw ordenen van basisblokken in de gecompileerde functie, om
aantal genomen takken, verdeelt warme en koude basisblokken in aparte secties
van de assembly- en .o-bestanden, om de prestaties van de paging- en cachelocatie te verbeteren.

Deze optimalisatie wordt automatisch uitgeschakeld in het geval van exception handling,
voor linkonce-secties, voor functies met een door de gebruiker gedefinieerd sectie-attribuut en op elke
architectuur die geen benoemde secties ondersteunt.

-freeorder-functies
Herschik functies in het objectbestand om de codelocatie te verbeteren. Dit is
geïmplementeerd met behulp van speciale subsecties ".text.hot" voor de meest uitgevoerde
functies en ".text.unlikely" voor onwaarschijnlijk uitgevoerde functies. Nabestellen wordt gedaan door
de linker, dus het bestandsformaat van het object moet benoemde secties ondersteunen en de linker moet plaatsen
ze op een redelijke manier.

Er moet ook profielfeedback beschikbaar zijn om deze optie effectief te maken. Zien
-fprofile-bogen voor meer info.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fstrict-aliasing
Laat de compiler de strengste aliasingregels aannemen die van toepassing zijn op de taal
wordt samengesteld. Voor C (en C++) activeert dit optimalisaties op basis van het type
uitdrukkingen. In het bijzonder wordt aangenomen dat een object van een bepaald type nooit op de
hetzelfde adres als een object van een ander type, tenzij de typen bijna hetzelfde zijn.
Een "unsigned int" kan bijvoorbeeld een "int" zijn, maar geen "void*" of een "double". EEN
karaktertype kan een alias zijn van elk ander type.

Besteed speciale aandacht aan code zoals deze:

vakbond a_union {
int i;
dubbele d;
};

intf() {
vakbond a_union t;
td = 3.0;
keer terug;
}

De praktijk van het lezen van een ander vakbondslid dan het meest recentelijk
geschreven naar (de zogenaamde "type-woordspeling") is gebruikelijk. Zelfs met -fstrict-aliasing, typ-
woordspelingen zijn toegestaan, op voorwaarde dat het geheugen toegankelijk is via het type union. Dus de
bovenstaande code zal werken zoals verwacht. Deze code kan echter niet:

intf() {
vakbond a_union t;
int* ip;
td = 3.0;
ip = &t.i;
retour *ip;
}

Evenzo toegang door het adres te nemen, de resulterende aanwijzer te casten en
dereferentie van het resultaat heeft ongedefinieerd gedrag, zelfs als de cast een unie-type gebruikt,
bijvoorbeeld:

intf() {
dubbele d = 3.0;
return ((union a_union *) &d)->i;
}

De -fstrict-aliasing optie is ingeschakeld op niveaus -O2, -O3, -Jij.

-fstrict-overloop
Laat de compiler strikte regels voor ondertekende overloop aannemen, afhankelijk van de taal
wordt samengesteld. Voor C (en C++) betekent dit dat overlopen bij rekenen met
ondertekende nummers is ongedefinieerd, wat betekent dat de compiler ervan uit kan gaan dat dit niet het geval is
gebeuren. Dit maakt verschillende optimalisaties mogelijk. De compiler gaat er bijvoorbeeld van uit
dat een uitdrukking als "i + 10 > i" altijd waar zal zijn voor getekende "i". Dit
aanname is alleen geldig als ondertekende overloop ongedefinieerd is, aangezien de uitdrukking onwaar is
als "i + 10" overstroomt bij gebruik van twee-complement rekenen. Wanneer deze optie binnen is
voer elke poging uit om te bepalen of een bewerking op ondertekende nummers zal overlopen
moet zorgvuldig worden geschreven om niet echt overflow te betrekken.

Met deze optie kan de compiler ook een strikte pointer-semantiek aannemen: gegeven a
aanwijzer naar een object, als het toevoegen van een verschuiving aan die aanwijzer geen aanwijzer oplevert
voor hetzelfde object is de toevoeging niet gedefinieerd. Hierdoor kan de compiler concluderen:
dat "p + u > p" altijd waar is voor een aanwijzer "p" en een geheel getal "u" ​​zonder teken. Dit
aanname is alleen geldig omdat de omhulling van de aanwijzer niet is gedefinieerd, zoals de uitdrukking is
false als "p + u" overloopt met behulp van twee-complement rekenkunde.

Zie ook de -fwrapv optie. Gebruik makend van -fwrapv betekent dat integer ondertekend overloop is
volledig gedefinieerd: het wikkelt. Wanneer -fwrapv wordt gebruikt, is er geen verschil tussen:
-fstrict-overloop en -fno-strikte-overloop voor gehele getallen. Met -fwrapv bepaalde types
van overloop zijn toegestaan. Als de compiler bijvoorbeeld een overflow krijgt tijdens het doen van
rekenkunde op constanten, de overgelopen waarde kan nog steeds worden gebruikt met -fwrapv, Maar niet
anders.

De -fstrict-overloop optie is ingeschakeld op niveaus -O2, -O3, -Jij.

-falign-functies
-falign-functies=n
Lijn het begin van functies uit met de volgende macht van twee groter dan n, overslaan naar n
bytes. Bijvoorbeeld, -falign-functies=32 lijnt functies uit met de volgende 32-byte
grens, maar -falign-functies=24 zou alleen worden uitgelijnd op de volgende grens van 32 bytes als
dit kan worden gedaan door 23 bytes of minder over te slaan.

-fno-align-functies en -falign-functies=1 zijn equivalent en betekenen dat functies
zal niet worden uitgelijnd.

Sommige assemblers ondersteunen deze vlag alleen wanneer: n is een macht van twee; in dat geval is het
afgerond.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-falign-labels
-falign-labels=n
Lijn alle vertakkingsdoelen uit met een macht-van-twee grens, tot n bytes zoals
-falign-functies. Deze optie kan de code gemakkelijk langzamer maken, omdat deze moet worden ingevoegd
dummy-bewerkingen voor wanneer het vertakkingsdoel wordt bereikt in de gebruikelijke stroom van de code.

-fno-align-labels en -falign-labels=1 zijn gelijkwaardig en betekenen dat labels dat niet zullen zijn
uitgelijnd.

If -falign-lussen or -falign-sprongen van toepassing zijn en groter zijn dan deze waarde, dan
hun waarden worden in plaats daarvan gebruikt.

If n is niet gespecificeerd of is nul, gebruik een machineafhankelijke standaardwaarde die zeer waarschijnlijk is
te 1, wat betekent dat er geen uitlijning is.

Ingeschakeld op niveaus -O2, -O3.

-falign-lussen
-falign-loops=n
Lijn lussen uit met een macht-van-twee grens, door tot n bytes zoals -falign-functies.
De hoop is dat de lus vele malen zal worden uitgevoerd, wat alles zal goedmaken
uitvoering van de dummy operaties.

-fno-align-loops en -falign-loops=1 zijn equivalent en betekenen dat lussen dat niet zullen zijn
uitgelijnd.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-falign-sprongen
-falign-sprongen=n
Lijn vertakkingsdoelen uit met een macht-van-twee grens, voor vertakkingsdoelen waarbij de doelen
kan alleen worden bereikt door te springen, over te slaan naar n bytes zoals -falign-functies. in
in dit geval hoeven er geen dummy-bewerkingen te worden uitgevoerd.

-fno-align-sprongen en -falign-sprongen=1 zijn equivalent en betekenen dat lussen dat niet zullen zijn
uitgelijnd.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-fun-at-a-time
Deze optie is om compatibiliteitsredenen gelaten. -fun-at-a-time heeft geen effect, terwijl
-fno-eenheid-per-tijd impliceert -fno-toplevel-herordenen en -fno-sectie-ankers.

Standaard ingeschakeld.

-fno-toplevel-herordenen
De volgorde van functies, variabelen en "asm"-instructies op het hoogste niveau niet opnieuw rangschikken. Voer ze in
dezelfde volgorde waarin ze in het invoerbestand verschijnen. Wanneer deze optie wordt gebruikt,
statische variabelen zonder referentie worden niet verwijderd. Deze optie is bedoeld ter ondersteuning
bestaande code die afhankelijk is van een bepaalde bestelling. Voor nieuwe code is het beter om te gebruiken
attributen.

Ingeschakeld op niveau -O0. Wanneer expliciet uitgeschakeld, betekent dit ook: -fno-sectie-ankers,
die anders is ingeschakeld op -O0 op sommige doelen.

-fweb
Maakt webs zoals gewoonlijk gebruikt voor registertoewijzingsdoeleinden en wijst elk web toe
individueel pseudoregister. Hierdoor kan de registertoewijzingspas werken op
pseudos direct, maar versterkt ook verschillende andere optimalisatiepassen, zoals CSE,
loop optimizer en triviale dode code remover. Het kan echter debuggen
onmogelijk, aangezien variabelen niet langer in een "thuisregister" blijven.

Standaard ingeschakeld met -funroll-loops.

-f hele-programma
Neem aan dat de huidige compilatie-eenheid het hele programma vertegenwoordigt dat wordt gecompileerd.
Alle publieke functies en variabelen met uitzondering van "main" en die samengevoegd door
attribuut "extern_zichtbaar" worden statische functies en zijn in feite geoptimaliseerd
agressiever door interprocedurele optimizers. Als goud wordt gebruikt als de linker-plug-in,
"externally_visible" attributen worden automatisch toegevoegd aan functies (nog niet variabel
door een stroming goud probleem) die toegankelijk zijn buiten LTO-objecten volgens
resolutiebestand geproduceerd door goud. Voor andere linkers die geen resolutie kunnen genereren
bestand, zijn expliciete "external_visible" attributen nog steeds nodig. Terwijl deze optie
staat gelijk aan correct gebruik van het trefwoord "static" voor programma's die bestaan ​​uit a
enkel bestand, in combinatie met optie -flto deze vlag kan worden gebruikt om er veel te compileren
programma's op kleinere schaal omdat de functies en variabelen lokaal worden voor het geheel
gecombineerde compilatie-eenheid, niet voor het enkele bronbestand zelf.

Deze optie houdt in: -fhele-bestand voor Fortran-programma's.

-flto[=n]
Deze optie voert de standaard link-time optimizer uit. Wanneer het wordt aangeroepen met de broncode,
genereert GIMPLE (een van GCC's interne representaties) en schrijft het naar speciale ELF
secties in het objectbestand. Wanneer de objectbestanden aan elkaar zijn gekoppeld, worden alle
functielichamen worden uit deze ELF-secties gelezen en geïnstantieerd alsof ze waren
onderdeel van dezelfde vertaaleenheid.

Om de link-time optimizer te gebruiken, -flto moet worden gespecificeerd tijdens het compileren en tijdens
de laatste koppeling. Bijvoorbeeld:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o mijnprog -flto -O2 foo.o bar.o

De eerste twee aanroepen van GCC slaan een bytecode-representatie van GIMPLE op in special
ELF-secties binnen foo.o en bar.o. De laatste aanroep leest de GIMPLE bytecode
oppompen van foo.o en bar.o, voegt de twee bestanden samen tot één interne afbeelding en compileert
het resultaat zoals gewoonlijk. Sinds beide foo.o en bar.o zijn samengevoegd tot één afbeelding, dit
zorgt ervoor dat alle interprocedurele analyses en optimalisaties in GCC over de hele
twee bestanden alsof ze één zijn. Dit betekent bijvoorbeeld dat de inliner is
in staat om functies te inline bar.o in functies in foo.o en vice versa.

Een andere (eenvoudigere) manier om linktime-optimalisatie mogelijk te maken is:

gcc -o mijnprog -flto -O2 foo.c bar.c

Het bovenstaande genereert bytecode voor: foo.c en bar.c, voegt ze samen tot een enkele
GIMPLE-weergave en optimaliseert ze zoals gewoonlijk om te produceren mijnprog.

Het enige belangrijke om in gedachten te houden is dat om link-time optimalisaties mogelijk te maken de
-flto vlag moet worden doorgegeven aan zowel de compileer- als de link-opdracht.

Om de optimalisatie van het hele programma effectief te maken, is het noodzakelijk om bepaalde
aannames van het programma. De compiler moet weten welke functies en variabelen kunnen zijn
toegankelijk door bibliotheken en runtime buiten de voor koppelingstijd geoptimaliseerde eenheid. Wanneer
ondersteund door de linker, de linker plug-in (zie -fuse-linker-plug-in) gaat
informatie aan de compiler over gebruikte en extern zichtbare symbolen. Wanneer de
linker plug-in is niet beschikbaar, -f hele-programma moet worden gebruikt om de compiler toe te staan
om deze aannames te maken, wat leidt tot agressievere optimalisatiebeslissingen.

Merk op dat wanneer een bestand is gecompileerd met -flto, het gegenereerde objectbestand is groter dan
een gewoon objectbestand omdat het GIMPLE-bytecodes en de gebruikelijke eindcode bevat.
Dit betekent dat objectbestanden met LTO-informatie als normaal object kunnen worden gekoppeld
bestanden; indien -flto wordt niet doorgegeven aan de linker, er zijn geen interprocedurele optimalisaties
toegepast.

Bovendien zijn de optimalisatievlaggen die worden gebruikt om individuele bestanden te compileren niet:
noodzakelijkerwijs gerelateerd aan die gebruikt op link time. Bijvoorbeeld,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o mijnprog -flto -O3 foo.o bar.o

Dit produceert individuele objectbestanden met niet-geoptimaliseerde assemblercode, maar de
resulterende binaire mijnprog is geoptimaliseerd op -O3. Als in plaats daarvan het laatste binaire bestand is
gegenereerd zonder -fltodan mijnprog is niet geoptimaliseerd.

Bij het produceren van het laatste binaire bestand met -flto, GCC past alleen link-time optimalisaties toe
naar die bestanden die bytecode bevatten. Daarom kunt u objectbestanden mixen en matchen
en bibliotheken met GIMPLE bytecodes en uiteindelijke objectcode. GCC selecteert automatisch
welke bestanden moeten worden geoptimaliseerd in de LTO-modus en welke bestanden moeten worden gekoppeld zonder verdere
processing.

Er zijn enkele codegeneratievlaggen bewaard door GCC bij het genereren van bytecodes, zoals:
ze moeten worden gebruikt tijdens de laatste koppelingsfase. Momenteel zijn de volgende opties:
worden opgeslagen in de GIMPLE bytecode-bestanden: -fPIC, -fgewone en alle -m doel vlaggen.

Bij het koppelen worden deze opties ingelezen en opnieuw toegepast. Merk op dat de huidige
implementatie doet geen poging om tegenstrijdige waarden voor deze opties te herkennen. Indien
verschillende bestanden hebben conflicterende optiewaarden (bijv. één bestand is gecompileerd met -fPIC
en een ander niet), gebruikt de compiler gewoon de laatste waarde die uit de bytecode is gelezen
bestanden. Het wordt daarom aanbevolen dat u alle bestanden compileert die deelnemen aan de
dezelfde link met dezelfde opties.

Als LTO objecten tegenkomt met een C-koppeling die is gedeclareerd met incompatibele typen in afzonderlijke
aan elkaar te koppelen vertaaleenheden (ongedefinieerd gedrag volgens ISO C99
6.2.7), kan een niet-fatale diagnose worden gesteld. Het gedrag is nog steeds niet gedefinieerd tijdens het uitvoeren
tijd.

Een ander kenmerk van LTO is dat het mogelijk is om interprocedurele optimalisaties toe te passen
op bestanden die in verschillende talen zijn geschreven. Dit vereist ondersteuning op het taalfront
einde. Momenteel kunnen de C-, C++- en Fortran-frontends GIMPLE . uitzenden
bytecodes, dus zoiets zou moeten werken:

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

Merk op dat de laatste link wordt gedaan met g ++ om de C++ runtime-bibliotheken te krijgen en
-lgfortran is toegevoegd om de Fortran runtime-bibliotheken te krijgen. In het algemeen, bij het mengen:
talen in de LTO-modus, moet u dezelfde opties voor koppelingsopdrachten gebruiken als bij het mixen
talen in een reguliere (niet-LTO) compilatie; alles wat je hoeft toe te voegen is -flto om alle
compileren en koppelen van opdrachten.

Als objectbestanden met GIMPLE-bytecode zijn opgeslagen in een bibliotheekarchief, zeg dan:
libfoo.a, is het mogelijk om ze uit te pakken en te gebruiken in een LTO-link als je een
linker met ondersteuning voor plug-ins. Gebruik de vlag . om deze functie in te schakelen -fuse-linker-plug-in
op linktijd:

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

Met de linker plug-in ingeschakeld, extraheert de linker de benodigde GIMPLE-bestanden uit:
libfoo.a en geeft ze door aan de lopende GCC om ze onderdeel te maken van de geaggregeerde
GIMPLE-afbeelding moet worden geoptimaliseerd.

Als u geen linker gebruikt met ondersteuning voor plug-ins en/of de linker niet inschakelt
plug-in, dan de objecten erin libfoo.a worden geëxtraheerd en gelinkt zoals gewoonlijk, maar ze
niet deelnemen aan het LTO-optimalisatieproces.

Link-time optimalisaties vereisen niet de aanwezigheid van het hele programma om te werken.
Als het programma geen symbolen nodig heeft om te worden geëxporteerd, is het mogelijk om te combineren
-flto en -f hele-programma zodat de interprocedurele optimizers meer kunnen gebruiken
agressieve veronderstellingen die kunnen leiden tot verbeterde optimalisatiemogelijkheden. Gebruik van
-f hele-programma is niet nodig als de linker-plug-in actief is (zie -fuse-linker-plug-in).

De huidige implementatie van LTO doet geen poging om bytecode te genereren die:
draagbaar tussen verschillende soorten hosts. De bytecode-bestanden zijn voorzien van een versie en daar
is een strikte versiecontrole, dus bytecode-bestanden die in één versie van GCC zijn gegenereerd, doen dat niet
werken met een oudere/nieuwere versie van GCC.

Optimalisatie van koppelingstijd werkt niet goed bij het genereren van foutopsporingsinformatie.
De combinatie van -flto Met -g is momenteel experimenteel en zal naar verwachting verkeerd produceren
resultaten.

Als u de optionele n, de optimalisatie en het genereren van codes tijdens de koppeling
wordt parallel uitgevoerd met behulp van n parallelle taken door gebruik te maken van een geïnstalleerd maken programma.
De omgevingsvariabele MAAK kan worden gebruikt om het gebruikte programma te overschrijven. De standaard
waarde voor n is 1.

U kunt ook specificeren -flto=jobserver om de jobserver-modus van GNU make te gebruiken om te bepalen:
het aantal parallelle banen. Dit is handig wanneer de Makefile die GCC aanroept al is
parallel uitvoeren. Je moet een toevoegen + naar het commandorecept in de parent
Makefile om dit te laten werken. Deze optie werkt waarschijnlijk alleen als MAAK is GNU maken.

Deze optie is standaard uitgeschakeld

-flto-partitie=alg
Geef het partitioneringsalgoritme op dat wordt gebruikt door de linktime-optimizer. De waarde is
ofwel "1op1" om een ​​partitionering te specificeren die de originele bronbestanden spiegelt of
"gebalanceerd" om opdeling in gelijke delen (indien mogelijk) te specificeren.
Als u "none" specificeert als een algoritme, worden partitionering en streaming volledig uitgeschakeld. De
standaardwaarde is "gebalanceerd".

-flto-compressieniveau=n
Deze optie specificeert het compressieniveau dat wordt gebruikt voor geschreven tussenliggende taal
naar LTO-objectbestanden, en is alleen zinvol in combinatie met LTO-modus (-flto).
Geldige waarden zijn 0 (geen compressie) tot 9 (maximale compressie). Waarden buiten dit
bereik worden vastgeklemd op 0 of 9. Als de optie niet wordt gegeven, wordt een standaard gebalanceerde
compressie-instelling wordt gebruikt.

-flto-rapport
Drukt een rapport af met interne details over de werking van de link-time optimizer. De
inhoud van dit rapport varieert van versie tot versie. Het is bedoeld om nuttig te zijn voor GCC
ontwikkelaars bij het verwerken van objectbestanden in LTO-modus (via -flto).

Standaard uitgeschakeld.

-fuse-linker-plug-in
Maakt het gebruik van een linker plug-in mogelijk tijdens link-time optimalisatie. Deze optie is afhankelijk van
op plug-in-ondersteuning in de linker, die beschikbaar is in goud of in GNU ld 2.21 of
nieuwer.

Deze optie maakt het extraheren van objectbestanden met GIMPLE bytecode uit de bibliotheek mogelijk
archieven. Dit verbetert de kwaliteit van de optimalisatie door meer code bloot te stellen aan de link-
tijd optimalisatie. Deze informatie specificeert welke symbolen extern toegankelijk zijn
(door niet-LTO-object of tijdens dynamisch koppelen). Resulterende kwaliteitsverbeteringen van de code op
binaire bestanden (en gedeelde bibliotheken die verborgen zichtbaarheid gebruiken) zijn vergelijkbaar met
"-fwhole-programma". Zien -flto voor een beschrijving van het effect van deze vlag en hoe u
gebruik het.

Deze optie is standaard ingeschakeld wanneer LTO-ondersteuning in GCC is ingeschakeld en GCC was
geconfigureerd voor gebruik met een linker die plug-ins ondersteunt (GNU ld 2.21 of nieuwer of goud).

-ffat-lto-objecten
Fat LTO-objecten zijn objectbestanden die zowel de tussentaal als de
voorwerp code. Dit maakt ze bruikbaar voor zowel LTO-koppeling als normale koppeling. Dit
optie is alleen effectief bij compileren met -flto en wordt genegeerd tijdens het koppelen.

-fno-fat-lto-objecten verbetert de compilatietijd ten opzichte van gewone LTO, maar vereist de
complete toolchain om op de hoogte te zijn van LTO. Het vereist een linker met ondersteuning voor linker-plug-ins
voor basisfunctionaliteit. Bovendien moeten nm, ar en ranlib linker ondersteunen
plug-ins om een ​​complete bouwomgeving mogelijk te maken (in staat om statische
bibliotheken enz.).

De standaard is -ffat-lto-objecten maar deze standaard is bedoeld om in de toekomst te veranderen
releases wanneer omgevingen met linker plug-in vaker voorkomen.

-fvergelijk-elim
Na de splitsing van de registertoewijzing en de splitsing van de toewijzingsinstructie na het register, identificeert u:
rekenkundige instructies die processorvlaggen berekenen, vergelijkbaar met een vergelijkingsbewerking
op basis van die rekenkunde. Elimineer indien mogelijk de expliciete vergelijkingsbewerking.

Deze pas is alleen van toepassing op bepaalde doelen die niet expliciet de . kunnen vertegenwoordigen
vergelijkingsbewerking voordat de registertoewijzing is voltooid.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fuse-ld=goud
Gebruik de goud linker in plaats van de standaard linker.

-zekering-ld=bfd
Gebruik de ld.bfd linker in plaats van de standaard linker.

-fcprop-registers
Na het splitsen van de toewijzing van registers en het splitsen van toewijzingen na registers, we
voer een kopieerpropagatiepas uit om planningsafhankelijkheden te verminderen en
verwijder af en toe de kopie.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fprofiel-correctie
Profielen die zijn verzameld met behulp van een geïnstrumenteerd binair bestand voor programma's met meerdere threads kunnen zijn:
inconsistent vanwege gemiste tellerupdates. Wanneer deze optie is opgegeven, zal GCC dat doen
gebruik heuristieken om dergelijke inconsistenties te corrigeren of glad te strijken. Standaard zal GCC dat doen
een foutmelding geven wanneer een inconsistent profiel wordt gedetecteerd.

-fprofiel-dir=pad
Stel de directory in om te zoeken naar de profielgegevensbestanden in to pad. Deze optie
heeft alleen invloed op de profielgegevens die zijn gegenereerd door -fprofile-genereren, -fest-dekking,
-fprofile-bogen en gebruikt door -fprofile-gebruik en -fbranch-waarschijnlijkheden en het is gerelateerd
opties. Zowel absolute als relatieve paden kunnen worden gebruikt. GCC gebruikt standaard de
huidige map als pad, dus het profielgegevensbestand zal daarin verschijnen
directory als het objectbestand.

-fprofile-genereren
-fprofile-genereren=pad
Schakel opties in die gewoonlijk worden gebruikt voor instrumentatietoepassingen om een ​​nuttig profiel te produceren
voor latere hercompilatie met op profielfeedback gebaseerde optimalisatie. Je moet gebruiken
-fprofile-genereren zowel bij het compileren als bij het koppelen van uw programma.

De volgende opties zijn ingeschakeld: "-fprofile-arcs", "-fprofile-values", "-fvpt".

If pad is opgegeven, zal GCC kijken naar de pad om de profielfeedbackgegevens te vinden
bestanden. Zien -fprofile-dir.

-fprofile-gebruik
-fprofile-gebruik=pad
Schakel optimalisaties gericht op profielfeedback in en optimalisaties die over het algemeen winstgevend zijn
alleen met profielfeedback beschikbaar.

De volgende opties zijn ingeschakeld: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

GCC geeft standaard een foutmelding als de feedbackprofielen niet overeenkomen met de
broncode. Deze fout kan worden omgezet in een waarschuwing met behulp van -Wdekking-mismatch.
Merk op dat dit kan resulteren in slecht geoptimaliseerde code.

If pad is opgegeven, zal GCC kijken naar de pad om de profielfeedbackgegevens te vinden
bestanden. Zien -fprofile-dir.

De volgende opties bepalen het gedrag van de compiler met betrekking tot rekenkunde met drijvende komma.
Deze opties balanceren tussen snelheid en correctheid. Alles moet specifiek zijn ingeschakeld.

-float-winkel
Sla geen drijvende-kommavariabelen op in registers en blokkeer andere opties die:
kan veranderen of een drijvende-kommawaarde uit een register of geheugen wordt gehaald.

Deze optie voorkomt ongewenste overprecisie op machines zoals de 68000 waarbij
de zwevende registers (van de 68881) houden meer precisie dan een "dubbel" wordt verondersteld
hebben. Hetzelfde geldt voor de x86-architectuur. Voor de meeste programma's is de overmatige precisie
doet alleen maar goed, maar een paar programma's vertrouwen op de precieze definitie van IEEE-floating
punt. Gebruik maken van -float-winkel voor dergelijke programma's, nadat u ze hebt gewijzigd om ze allemaal op te slaan
relevante tussentijdse berekeningen in variabelen.

-fexcess-precisie=stijl
Deze optie biedt verdere controle over overmatige precisie op machines waar zwevende
puntregisters hebben meer precisie dan de IEEE "float" en "double" types en de
processor ondersteunt geen bewerkingen die naar die typen afronden. Standaard,
-fexcess-precisie = snel is van kracht; dit betekent dat operaties worden uitgevoerd in
de precisie van de registers en dat het onvoorspelbaar is bij het afronden naar de typen
gespecificeerd in de broncode plaatsvindt. Bij het compileren van C, als
-fexcess-precisie=standaard is gespecificeerd, volgt overmatige precisie de regels
gespecificeerd in ISO C99; in het bijzonder zorgen zowel casts als toewijzingen ervoor dat waarden
afgerond op hun semantische typen (terwijl -float-winkel heeft alleen invloed op opdrachten).
Deze optie is standaard ingeschakeld voor C als een strikte conformiteitsoptie zoals:
-standaard=c99 is gebruikt.

-fexcess-precisie=standaard is niet geïmplementeerd voor andere talen dan C, en heeft geen
effect als -funsafe-math-optimalisaties or -ffast-wiskunde is gespecificeerd. Op de x86 is het
heeft ook geen effect als -mfpmath=sse or -mfpmath=sse+387 is gespecificeerd; in de vorige
In het laatste geval is de IEEE-semantiek van toepassing zonder overmatige precisie, en in het laatste geval is afronding
onvoorspelbaar.

-ffast-wiskunde
Sets -fno-wiskunde-errno, -funsafe-math-optimalisaties, -alleen eindige-wiskunde,
-fno-afronding-wiskunde, -fno-signalering-nans en -fcx-beperkt bereik.

Deze optie zorgt ervoor dat de preprocessor-macro "__FAST_MATH__" wordt gedefinieerd.

Deze optie is door niemand ingeschakeld -O optie bovendien -Of snel omdat het kan resulteren in
onjuiste uitvoer voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

-fno-wiskunde-errno
Stel ERRNO niet in na het aanroepen van wiskundige functies die met een single worden uitgevoerd
instructie, bijv. sqrt. Een programma dat vertrouwt op IEEE-uitzonderingen voor wiskundige fouten
afhandeling wil deze vlag misschien gebruiken voor snelheid met behoud van IEEE-rekenkunde
compatibiliteit.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

De standaard is -fmath-fout.

Op Darwin-systemen stelt de wiskundebibliotheek nooit "errno" in. Er is dus geen reden
voor de compiler om de mogelijkheid te overwegen dat het zou kunnen, en -fno-wiskunde-errno is de
standaard.

-funsafe-math-optimalisaties
Sta optimalisaties toe voor drijvende-kommaberekeningen die (a) aannemen dat argumenten en
resultaten zijn geldig en (b) kunnen in strijd zijn met de IEEE- of ANSI-normen. Bij gebruik op link-time,
het kan bibliotheken of opstartbestanden bevatten die het standaard FPU-stuurwoord wijzigen of
andere vergelijkbare optimalisaties.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen. Schakelt in
-fno-ondertekende nullen, -fno-trapping-wiskunde, -Fassociatieve-wiskunde en -freciprocal-wiskunde.

De standaard is -fno-onveilige-wiskunde-optimalisaties.

-Fassociatieve-wiskunde
Sta opnieuw koppelen van operanden toe in reeksen drijvende-kommabewerkingen. Dit
schendt de ISO C- en C++-taalstandaard door mogelijk het berekeningsresultaat te wijzigen.
OPMERKING: opnieuw bestellen kan het teken van nul veranderen en NaN's negeren en of . remmen
maak onderloop of overloop (en kan dus niet worden gebruikt voor code die afhankelijk is van afronding)
gedrag zoals "(x + 2**52) - 2**52". Kan ook drijvende-kommavergelijkingen opnieuw ordenen en
mag dus niet worden gebruikt wanneer geordende vergelijkingen vereist zijn. Deze optie vereist dat:
zowel -fno-ondertekende nullen en -fno-trapping-wiskunde van kracht zijn. Bovendien maakt het niet
veel zin met -grond-wiskunde. Voor Fortran wordt de optie automatisch ingeschakeld wanneer:
zowel -fno-ondertekende nullen en -fno-trapping-wiskunde zijn van kracht.

De standaard is -fno-associatieve-wiskunde.

-freciprocal-wiskunde
Sta toe dat het omgekeerde van een waarde wordt gebruikt in plaats van te delen door de waarde als dit
optimalisaties mogelijk maakt. "x / y" kan bijvoorbeeld worden vervangen door "x * (1/y)", wat is
nuttig als "(1/y)" onderhevig is aan eliminatie van algemene subexpressies. Merk op dat dit
verliest precisie en verhoogt het aantal flops dat op de waarde werkt.

De standaard is -fno-wederkerige-wiskunde.

-alleen eindige-wiskunde
Sta optimalisaties toe voor drijvende-kommaberekeningen die aannemen dat argumenten en
resultaten zijn geen NaNs of +-Infs.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

De standaard is -fno-eindige-wiskunde-alleen.

-fno-ondertekende nullen
Sta optimalisaties toe voor drijvende-kommaberekeningen die de ondertekendheid van nul negeren.
IEEE-rekenkunde specificeert het gedrag van verschillende +0.0 en -0.0 waarden, die dan
verbiedt vereenvoudiging van uitdrukkingen zoals x+0.0 of 0.0*x (zelfs met
-alleen eindige-wiskunde). Deze optie houdt in dat het teken van een nulresultaat niet is
significant.

De standaard is -fsigned-nullen.

-fno-trapping-wiskunde
Compileer code in de veronderstelling dat bewerkingen met drijvende komma niet zichtbaar voor de gebruiker kunnen genereren
vallen. Deze vallen omvatten deling door nul, overloop, onderstroom, onnauwkeurig resultaat en
ongeldige operatie. Deze optie vereist dat: -fno-signalering-nans van kracht zijn.
Door deze optie in te stellen kan snellere code mogelijk zijn als men vertrouwt op "non-stop" IEEE-rekenkunde,
bijvoorbeeld.

Deze optie mag door niemand worden ingeschakeld -O optie omdat dit kan resulteren in:
onjuiste uitvoer voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies.

De standaard is -ftrapping-wiskunde.

-grond-wiskunde
Schakel transformaties en optimalisaties uit die standaard afronding met drijvende komma aannemen
gedrag. Dit is afgerond op nul voor alle conversies van drijvende komma naar geheel getal, en
afronden naar dichtstbijzijnde voor alle andere rekenkundige afknottingen. Deze optie zou moeten zijn:
gespecificeerd voor programma's die de FP-afrondingsmodus dynamisch wijzigen, of die
uitgevoerd met een niet-standaard afrondingsmodus. Deze optie schakelt het constant vouwen van . uit
drijvende-komma-expressies tijdens het compileren (die kunnen worden beïnvloed door de afrondingsmodus)
en rekenkundige transformaties die onveilig zijn in de aanwezigheid van tekenafhankelijke
afrondingsmodi.

De standaard is -fno-afronding-wiskunde.

Deze optie is experimenteel en kan momenteel niet garanderen dat alle GCC worden uitgeschakeld
optimalisaties die worden beïnvloed door de afrondingsmodus. Toekomstige versies van GCC kunnen bieden:
fijnere controle van deze instelling met behulp van C99's "FENV_ACCESS" pragma. Deze opdrachtregel
optie wordt gebruikt om de standaardstatus voor "FENV_ACCESS" op te geven.

-fsignalering-nans
Compileer code ervan uitgaande dat IEEE-signalering NaN's voor de gebruiker zichtbare vallen kunnen genereren tijdens:
drijvende-kommabewerkingen. Als u deze optie instelt, worden optimalisaties uitgeschakeld die kunnen veranderen
het aantal uitzonderingen dat zichtbaar is bij signalerende NaN's. Deze optie houdt in:
-ftrapping-wiskunde.

Deze optie zorgt ervoor dat de preprocessor-macro "__SUPPORT_SNAN__" wordt gedefinieerd.

De standaard is -fno-signalering-nans.

Deze optie is experimenteel en kan momenteel niet garanderen dat alle GCC worden uitgeschakeld
optimalisaties die het signaalgedrag van NaN beïnvloeden.

-fsingle-precisie-constante
Behandel drijvende-kommaconstanten als enkele precisie in plaats van impliciet te converteren
ze tot dubbele precisie constanten.

-fcx-beperkt bereik
Indien ingeschakeld, geeft deze optie aan dat een stap voor het verkleinen van het bereik niet nodig is wanneer:
complexe deling uitvoeren. Ook wordt niet gecontroleerd of het resultaat van a
complexe vermenigvuldiging of deling is "NaN + I*NaN", met een poging om de . te redden
situatie in dat geval. De standaard is -fno-cx-beperkt bereik, maar is ingeschakeld door
-ffast-wiskunde.

Deze optie regelt de standaardinstelling van het ISO C99 "CX_LIMITED_RANGE" pragma.
Desalniettemin geldt de optie voor alle talen.

-fcx-fortran-regels
Complexe vermenigvuldiging en deling volgen de Fortran-regels. Bereikreductie wordt gedaan als
onderdeel van complexe deling, maar er wordt niet gecontroleerd of het resultaat van een complex
vermenigvuldigen of delen is "NaN + I*NaN", met een poging om de situatie te redden
in dat geval.

De standaard is -fno-cx-fortran-regels.

De volgende opties regelen optimalisaties die de prestaties kunnen verbeteren, maar dat niet zijn:
ingeschakeld door een -O opties. Deze sectie bevat experimentele opties die kunnen leiden tot:
gebroken code.

-fbranch-waarschijnlijkheden
Na het uitvoeren van een programma dat is gecompileerd met -fprofile-bogen, je kunt het een tweede keer compileren
gebruik -fbranch-waarschijnlijkheden, om optimalisaties te verbeteren op basis van het aantal keren
elke tak werd genomen. Wanneer het programma is gecompileerd met -fprofile-bogen verlaat het bespaart
booguitvoering telt tot een bestand met de naam bronnaam.gcda voor elk bronbestand. De
informatie in dit gegevensbestand is erg afhankelijk van de structuur van het gegenereerde
code, dus u moet voor beide dezelfde broncode en dezelfde optimalisatie-opties gebruiken
compilaties.

met -fbranch-waarschijnlijkheden, GCC zet een REG_BR_PROB noteer op elk JUMP_INSN en
CALL_INSN. Deze kunnen worden gebruikt om de optimalisatie te verbeteren. Momenteel worden ze alleen gebruikt
op één plek: in reorg.c, in plaats van te raden naar welk pad een vertakking het meest waarschijnlijk is
nemen, de REG_BR_PROB waarden worden gebruikt om precies te bepalen welk pad het meest wordt genomen
vaak.

-fprofile-waarden
Indien gecombineerd met -fprofile-bogen, het voegt code toe zodat sommige gegevens over waarden van
uitdrukkingen in het programma worden verzameld.

met -fbranch-waarschijnlijkheden, het leest de gegevens terug die zijn verzameld uit profileringswaarden van
uitdrukkingen voor gebruik in optimalisaties.

Ingeschakeld met -fprofile-genereren en -fprofile-gebruik.

-fvpt
Indien gecombineerd met -fprofile-bogen, instrueert het de compiler om een ​​code toe te voegen om te verzamelen
informatie over waarden van uitdrukkingen.

met -fbranch-waarschijnlijkheden, het leest de verzamelde gegevens terug en voert daadwerkelijk de
op basis daarvan optimalisaties. Momenteel omvatten de optimalisaties specialisatie van
delingsbewerking met behulp van de kennis over de waarde van de noemer.

-frename-registers
Poging om valse afhankelijkheden in geplande code te vermijden door gebruik te maken van registers left
voorbij na registertoewijzing. Deze optimalisatie zal de meeste verwerkers ten goede komen
veel registers. Afhankelijk van het foutopsporingsinformatieformaat dat door het doel is aangenomen,
het kan debuggen echter onmogelijk maken, aangezien variabelen niet langer in een
"thuisregister".

Standaard ingeschakeld met -funroll-loops en -fpel-loops.

-ftracer
Voer staartduplicatie uit om de superblokgrootte te vergroten. Deze transformatie vereenvoudigt
de controlestroom van de functie waardoor andere optimalisaties beter werk kunnen doen.

Ingeschakeld met -fprofile-gebruik.

-funroll-loops
Ontrol loops waarvan het aantal iteraties kan worden bepaald tijdens het compileren of daarna
toegang tot de lus. -funroll-loops impliceert -frerun-cse-na-lus, -fweb en
-frename-registers. Het zet ook volledige luspeeling aan (dwz volledige verwijdering van
lussen met een klein constant aantal iteraties). Deze optie maakt code groter, en
kan het wel of niet sneller laten lopen.

Ingeschakeld met -fprofile-gebruik.

-funroll-alle-loops
Rol alle lussen uit, zelfs als hun aantal iteraties onzeker is wanneer de lus is
ingevoerde. Hierdoor werken programma's meestal langzamer. -funroll-alle-loops impliceert de
dezelfde opties als -funroll-loops.

-fpel-loops
Peels lussen waarvoor voldoende informatie is dat ze niet veel rollen (van
profielfeedback). Het zet ook volledige luspeeling aan (dwz volledige verwijdering van
loops met een klein constant aantal iteraties).

Ingeschakeld met -fprofile-gebruik.

-fmove-loop-invarianten
Schakelt de loop-invariante bewegingsdoorgang in de RTL-loopoptimalisatie in. Ingeschakeld op niveau
-O1

-funswitch-loops
Verplaats takken met lusinvariante condities uit de lus, met duplicaten van de
lus op beide takken (aangepast volgens resultaat van de voorwaarde).

-ffunctie-secties
-fdata-secties
Plaats elke functie of gegevensitem in zijn eigen sectie in het uitvoerbestand als het doel
ondersteunt willekeurige secties. De naam van de functie of de naam van het gegevensitem
bepaalt de naam van de sectie in het uitvoerbestand.

Gebruik deze opties op systemen waar de linker optimalisaties kan uitvoeren om te verbeteren
referentieplaats in de instructieruimte. De meeste systemen die het ELF-object gebruiken
formaat en SPARC-processors met Solaris 2 hebben linkers met dergelijke optimalisaties.
AIX kan deze optimalisaties in de toekomst hebben.

Gebruik deze opties alleen als er aanzienlijke voordelen zijn. Wanneer je
specificeer deze opties, de assembler en linker zullen een groter object creëren en
uitvoerbare bestanden en zal ook langzamer zijn. U kunt "gprof" niet overal gebruiken
systemen als u deze optie opgeeft en u kunt problemen krijgen met foutopsporing als u
specificeer zowel deze optie als -g.

-fbranch-target-load-optimize
Voer optimalisatie van de belasting van het vertakkingsdoelregister uit vóór het threaden van proloog / epiloog.
Het gebruik van doelregisters kan doorgaans alleen tijdens het herladen worden blootgesteld, dus hijsen
laadt uit lussen en het doen van inter-blokplanning heeft een afzonderlijke optimalisatie nodig
voorbij lopen.

-fbranch-target-load-optimize2
Voer optimalisatie van de belasting van het vertakkingsdoelregister uit na proloog / epiloog threading.

-fbtr-bb-exclusief
Bij het uitvoeren van optimalisatie van de belasting van het vertakkingsdoelregister, mag u vertakkingsdoel niet opnieuw gebruiken
registreert zich binnen elk basisblok.

-stack-beschermer
Zend extra code uit om te controleren op bufferoverflows, zoals stacksmash-aanvallen. Dit
wordt gedaan door een bewakingsvariabele toe te voegen aan functies met kwetsbare objecten. Dit
bevat functies die alloca aanroepen, en functies met buffers groter dan 8 bytes.
De bewakers worden geïnitialiseerd wanneer een functie wordt ingevoerd en vervolgens gecontroleerd wanneer de
functie verlaat. Als een bewakingscontrole mislukt, wordt een foutmelding afgedrukt en het programma
uitgangen.

OPMERKING: In Ubuntu 6.10 en latere versies is deze optie standaard ingeschakeld voor C, C++,
ObjC, ObjC++, indien geen van -fno-stack-beschermer, -nostlib, ook niet -vrijstaand zijn
gevonden.

-fstack-protector-all
Like -stack-beschermer behalve dat alle functies zijn beveiligd.

-fsectie-ankers
Probeer het aantal symbolische adresberekeningen te verminderen door een gedeeld "anker" te gebruiken
symbolen om objecten in de buurt aan te pakken. Deze transformatie kan helpen om het aantal te verminderen
van GOT-items en GOT-toegangen op sommige doelen.

Bijvoorbeeld de implementatie van de volgende functie "foo":

statisch int a, b, c;
int foo (void) { retourneer a + b + c; }

zou normaal gesproken de adressen van alle drie de variabelen berekenen, maar als je het compileert
Met -fsectie-ankers, krijgt het toegang tot de variabelen vanaf een gemeenschappelijk ankerpunt
in plaats van. Het effect is vergelijkbaar met de volgende pseudocode (die geen geldige C is):

int foo (ongeldig)
{
registreer int *xr = &x;
retourneer xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Niet alle doelen ondersteunen deze optie.

--param naam=waarde
Op sommige plaatsen gebruikt GCC verschillende constanten om de hoeveelheid optimalisatie te regelen die
is klaar. GCC plaatst bijvoorbeeld geen functies die meer dan een bepaalde waarde bevatten
aantal instructies. U kunt sommige van deze constanten op de opdrachtregel controleren
met de --param optie.

De namen van specifieke parameters en de betekenis van de waarden zijn gekoppeld aan de
interne onderdelen van de compiler, en kunnen in de toekomst zonder voorafgaande kennisgeving worden gewijzigd
releases.

In elk geval is de waarde is een geheel getal. De toegestane keuzes voor naam worden gegeven
de volgende tabel:

voorspelbare-tak-uitkomst
Wanneer wordt voorspeld dat vertakking wordt genomen met een waarschijnlijkheid die lager is dan deze drempel
(in procenten), dan wordt het als goed voorspelbaar beschouwd. De standaardwaarde is 10.

max-kruissprong-randen
Het maximale aantal inkomende randen waarmee rekening moet worden gehouden voor crossjumping. Het algoritme
door -fcrossspringen is O (N ^ 2) in het aantal randen dat in elk blok binnenkomt.
Toenemende waarden betekenen agressievere optimalisatie, waardoor de compilatietijd wordt verkort
verhogen met waarschijnlijk een kleine verbetering in uitvoerbare grootte.

min-crossjump-insns
Het minimum aantal instructies dat moet worden gekoppeld aan het einde van twee blokken
voordat crossjumping op hen zal worden uitgevoerd. Deze waarde wordt in het geval genegeerd
waar alle instructies in het blok waaruit gekruist wordt, overeenkomen. De
standaardwaarde is 5.

max-grow-copy-bb-insns
De maximale codegrootte-uitbreidingsfactor bij het kopiëren van basisblokken in plaats van
springen. De uitbreiding is relatief ten opzichte van een springinstructie. De standaardwaarde is
8.

max-goto-duplicatie-insns
Het maximum aantal instructies om te dupliceren naar een blok dat springt naar a
berekende goto. Om O(N^2)-gedrag in een aantal passages te vermijden, zijn GCC-factoren
goto's vroeg in het compilatieproces berekend en de factoren zo laat als
mogelijk. Alleen berekende sprongen aan het einde van een basisblok met niet meer dan max.
goto-duplicatie-insns zijn niet meegenomen. De standaardwaarde is 8.

max-delay-slot-insn-zoeken
Het maximale aantal instructies waarmee rekening moet worden gehouden bij het zoeken naar een instructie om
een vertragingsslot vullen. Als er meer dan dit willekeurige aantal instructies is
gezocht, zal de tijdsbesparing door het vullen van het vertragingsslot minimaal zijn, dus stop
zoeken. Toenemende waarden betekenen meer agressieve optimalisatie, waardoor de
de compilatietijd neemt toe met waarschijnlijk een kleine verbetering in de uitvoeringstijd.

max-delay-slot-live-zoeken
Bij het proberen om vertragingsslots te vullen, het maximale aantal instructies om te overwegen
bij het zoeken naar een blok met geldige live-registerinformatie. Dit verhogen
willekeurig gekozen waarde betekent meer agressieve optimalisatie, waardoor de
compilatie tijd. Deze parameter moet worden verwijderd wanneer de vertragingsslotcode is
herschreven om de control-flow-grafiek te behouden.

max-gcse-geheugen
De geschatte maximale hoeveelheid geheugen die wordt toegewezen om
voer de globale gemeenschappelijke subexpressie-eliminatie-optimalisatie uit. Indien meer geheugen
dan gespecificeerd is vereist, wordt de optimalisatie niet uitgevoerd.

max-gcse-invoegverhouding
Als de verhouding tussen invoegingen van expressies en verwijderingen groter is dan deze waarde voor
elke uitdrukking, dan zal RTL PRE de uitdrukking invoegen of verwijderen en dus verlaten
gedeeltelijk redundante berekeningen in de instructiestroom. De standaardwaarde is
20.

max-in behandeling-lijst-lengte
Het maximale aantal openstaande afhankelijkheden die in de planning staan, is toegestaan ​​vóór het leegmaken
de huidige status en opnieuw beginnen. Grote functies met weinig vestigingen of calls
kan buitensporig grote lijsten maken die onnodig geheugen en bronnen verbruiken.

max-modulo-backtrack-pogingen
Het maximale aantal backtrack-pogingen dat de planner moet doen wanneer modulo
een lus plannen. Grotere waarden kunnen de compilatietijd exponentieel verlengen.

max-inline-insns-single
Verschillende parameters regelen de tree-inliner die wordt gebruikt in gcc. Dit nummer stelt de
maximum aantal instructies (geteld in de interne representatie van GCC) in a
enkele functie die de boominliner in overweging zal nemen voor inlining. Alleen dit
beïnvloedt functies die inline zijn gedeclareerd en methoden die zijn geïmplementeerd in een klassendeclaratie
(C++). De standaardwaarde is 400.

max-inline-insns-auto
Wanneer u gebruik maken van -finline-functies (inbegrepen -O3), veel functies die
anders niet in aanmerking komen voor inlining door de compiler zal worden onderzocht. Naar
die functies, een andere (meer beperkende) limiet in vergelijking met functies
gedeclareerd inline kan worden toegepast. De standaardwaarde is 40.

grote-functie-insns
De limiet die echt grote functies specificeert. Voor functies groter dan deze limiet
na inlining wordt inlining beperkt door: --param grote-functie-groei. Deze
parameter is vooral nuttig om extreme compilatietijd veroorzaakt door niet-
lineaire algoritmen die door de back-end worden gebruikt. De standaardwaarde is 2700.

grote-functie-groei
Specificeert maximale groei van grote functies veroorzaakt door inlining in procenten. De
standaardwaarde is 100, wat de groei van grote functies beperkt tot 2.0 keer het origineel
grootte.

grote-eenheid-insns
De limiet die een grote vertaaleenheid opgeeft. Groei veroorzaakt door inlining van eenheden
groter dan deze limiet wordt beperkt door --param inline-unit-groei. Voor kleine eenheden
dit kan te krap zijn (denk aan een eenheid bestaande uit functie A die inline is en
B die gewoon A drie keer roept. Als B klein is ten opzichte van A, de groei van de eenheid
is 300\% en toch is zo'n inlining heel verstandig. Voor zeer grote eenheden bestaande uit
kleine inlineable functies, maar de limiet voor de totale groei van eenheden is nodig
vermijd exponentiële explosie van codegrootte. Dus voor kleinere eenheden is de maat
verhoogd tot --param grote-eenheid-insns voor het aanbrengen --param inline-unit-groei.
De standaardwaarde is 10000

inline-unit-groei
Specificeert maximale algehele groei van de compilatie-eenheid veroorzaakt door inlining. De
de standaardwaarde is 30, wat de groei van de eenheden beperkt tot 1.3 keer de oorspronkelijke grootte.

ipcp-eenheidsgroei
Specificeert maximale totale groei van de compilatie-eenheid veroorzaakt door interprocedurele
constante voortplanting. De standaardwaarde is 10, wat de groei van eenheden beperkt tot 1.1
keer de oorspronkelijke grootte.

groot gestapeld frame
De limiet voor het specificeren van grote stapelframes. Terwijl het inlinen het algoritme probeert
om niet te veel voorbij deze grens te groeien. De standaardwaarde is 256 bytes.

large-stack-frame-groei
Specificeert maximale groei van grote stapelframes veroorzaakt door inlining in procenten.
De standaardwaarde is 1000, wat de groei van grote stapelframes beperkt tot 11 keer de
originele grootte.

max-inline-insns-recursief
max-inline-insns-recursieve-auto
Specificeert maximum aantal instructies out-of-line kopie van zelf recursieve inline
functie kan groeien door recursieve inlining uit te voeren.

Voor functies die inline zijn gedeclareerd --param max-inline-insns-recursief wordt opgenomen
rekening. Voor functies die niet inline zijn verklaard, vindt recursieve inlining alleen plaats wanneer
-finline-functies (inbegrepen -O3) is ingeschakeld en --param max-inline-insns-
recursief-auto is gebruikt. De standaardwaarde is 450.

max-inline-recursieve-diepte
max-inline-recursieve-diepte-auto
Specificeert de maximale recursiediepte die wordt gebruikt door de recursieve inlining.

Voor functies die inline zijn gedeclareerd --param max-inline-recursieve-diepte wordt opgenomen
rekening. Voor functies die niet inline zijn verklaard, vindt recursieve inlining alleen plaats wanneer
-finline-functies (inbegrepen -O3) is ingeschakeld en --param max-inline-recursieve-
diepte-auto is gebruikt. De standaardwaarde is 8.

min-inline-recursieve-waarschijnlijkheid
Recursieve inlining is alleen winstgevend voor functies met diepe recursie in
gemiddeld en kan pijn doen voor functie met weinig recursiediepte door de
prolooggrootte of complexiteit van functielichaam naar andere optimizers.

Wanneer profielfeedback beschikbaar is (zie -fprofile-genereren) de werkelijke recursie
diepte kan worden geraden op basis van de kans dat de functie terugkeert via een bepaalde oproep
uitdrukking. Deze parameter beperkt inlining alleen tot het aanroepen van expressie wiens
waarschijnlijkheid overschrijdt gegeven drempel (in procenten). De standaardwaarde is 10.

vroege-inlining-insns
Specificeer groei die vroege inliner kan maken. In feite verhoogt het de hoeveelheid
inlining voor code met een grote abstractieboete. De standaardwaarde is 10.

max-early-inliner-iteraties
max-early-inliner-iteraties
Limiet van iteraties van vroege inliner. Dit begrenst in feite het aantal geneste
indirecte oproepen kunnen vroege inliner oplossen. Diepere kettingen worden laat nog steeds behandeld
inlijnen.

comdat-delen-waarschijnlijkheid
comdat-delen-waarschijnlijkheid
Waarschijnlijkheid (in procenten) dat C++ inline-functie met comdat-zichtbaarheid zal zijn
gedeeld over meerdere compilatie-eenheden. De standaardwaarde is 20.

min-vect-loop-gebonden
Het minimale aantal iteraties waarbij een lus niet wordt gevectoriseerd wanneer
-ftree-vectoriseren is gebruikt. Het aantal iteraties na vectorisatie moet
groter zijn dan de waarde gespecificeerd door deze optie om vectorisatie toe te staan. De
standaardwaarde is 0.

gcse-kosten-afstand-ratio
Schaalfactor bij berekening van maximale afstand waarmee een uitdrukking kan worden verplaatst
GCSE-optimalisaties. Dit wordt momenteel alleen ondersteund in de code hijspas.
Hoe groter de verhouding, hoe agressiever het hijsen van codes zal zijn met eenvoudig
uitdrukkingen, dat wil zeggen, de uitdrukkingen die minder hebben gekost dan gcse-onbeperkt-
kosten. Als u 0 opgeeft, wordt het hijsen van eenvoudige uitdrukkingen uitgeschakeld. De standaard
waarde is 10.

gcse-onbeperkte-kosten
Kosten, ruwweg gemeten als de kosten van een enkele typische machine-instructie, op
welke GCSE-optimalisaties de afstand die een uitdrukking kan afleggen niet beperken.
Dit wordt momenteel alleen ondersteund in de code hijspas. Hoe lager de kosten,
hoe agressiever het hijsen van codes zal zijn. Als u 0 opgeeft, is alles toegestaan
uitdrukkingen om onbeperkte afstanden af ​​te leggen. De standaardwaarde is 3.

max-hijsdiepte
De diepte van het zoeken in de dominatorboom naar uitdrukkingen om te hijsen. Dit wordt gebruikt
om kwadratisch gedrag in het hijsalgoritme te voorkomen. De waarde van 0 zal vermijden
het zoeken beperken, maar kan de compilatie van enorme functies vertragen. De standaard
waarde is 30.

max-tail-merge-vergelijkingen
Het maximale aantal vergelijkbare bb's om een ​​bb mee te vergelijken. Dit wordt gebruikt om te voorkomen dat
kwadratisch gedrag bij het samenvoegen van boomstaarten. De standaardwaarde is 10.

max-tail-merge-iteraties
Het maximale aantal iteraties van de pass over de functie. Dit wordt gebruikt om
beperk de compilatietijd bij het samenvoegen van boomstaarten. De standaardwaarde is 2.

max-uitgerolde-insns
Het maximum aantal instructies dat een lus mag hebben als die lus er is
uitgerold, en als de lus wordt uitgerold, bepaalt het hoeveel keer de luscode
wordt uitgerold.

max-gemiddelde-uitgerolde-insns
Het maximale aantal instructies, beïnvloed door de waarschijnlijkheid van hun uitvoering, dat:
een lus zou moeten hebben als die lus is uitgerold, en als de lus is uitgerold, het
bepaalt hoe vaak de luscode wordt uitgerold.

max-uitroltijden
Het maximale aantal uitrollen van een enkele lus.

max-peeling-insns
Het maximale aantal instructies dat een lus zou moeten hebben als die lus wordt gepeld,
en als de lus wordt afgepeld, bepaalt het hoe vaak de luscode wordt afgepeld.

max-peeltijden
Het maximale aantal schillen van een enkele lus.

max-volledig-gepelde-insns
Het maximale aantal insns van een volledig gepelde lus.

max-volledig-afpeltijden
Het maximale aantal iteraties van een lus dat geschikt is voor volledige peeling.

max-volledig-peel-loop-nestdiepte
De maximale diepte van een lussennest geschikt voor volledige peeling.

max-unswitch-insns
Het maximale aantal insns van een ongeschakelde lus.

max-unswitch-niveau
Het maximale aantal ongeschakelde takken in een enkele lus.

niet duur
De minimale kosten van een dure uitdrukking in de lusinvariante beweging.

iv-overweeg-alle-kandidaten-gebonden
Gebonden op aantal kandidaten voor inductievariabelen daaronder alle kandidaten
worden overwogen voor elk gebruik in optimalisaties van inductievariabelen. Alleen het meest
relevante kandidaten worden overwogen als er meer kandidaten zijn, om te vermijden
kwadratische tijdscomplexiteit.

iv-max-beschouwd-gebruik
De optimalisaties van de inductievariabele geven lussen op die meer inductie bevatten
variabel gebruik.

iv-altijd-snoeien-cand-set-gebonden
Als het aantal kandidaten in de set kleiner is dan deze waarde, proberen we dat altijd
verwijder onnodige ivs uit de set tijdens de optimalisatie wanneer een nieuwe iv wordt toegevoegd
op de set.

scev-max-expr-grootte
Gebonden aan de grootte van uitdrukkingen die worden gebruikt in de scalaire evolutie-analysator. Groot
uitdrukkingen vertragen de analysator.

scev-max-expr-complexiteit
Gebonden aan de complexiteit van de uitdrukkingen in de scalaire evolutie-analysator.
Complexe uitdrukkingen vertragen de analysator.

omega-max-vars
Het maximale aantal variabelen in een Omega-beperkingssysteem. De standaardwaarde:
is 128.

omega-max-geqs
Het maximale aantal ongelijkheden in een Omega-beperkingssysteem. De standaard
waarde is 256.

omega-max-vergelijkingen
Het maximale aantal gelijkheden in een Omega-beperkingssysteem. De standaardwaarde:
is 128.

omega-max-wildcards
Het maximale aantal jokertekenvariabelen dat de Omega-oplosser kan gebruiken
invoegen. De standaardwaarde is 18.

omega-hash-tafelformaat
De grootte van de hashtabel in de Omega-oplosser. De standaardwaarde is 550.

omega-max-sleutels
Het maximale aantal sleutels dat door de Omega-oplosser wordt gebruikt. De standaardwaarde is 500.

omega-elimineren-overtollige-beperkingen
Gebruik, indien ingesteld op 1, dure methoden om alle overbodige beperkingen te elimineren. De
standaardwaarde is 0.

vect-max-versie-voor-uitlijning-controles
Het maximale aantal runtime-controles dat kan worden uitgevoerd bij het uitvoeren van een lus
versiebeheer voor uitlijning in de vectorizer. Zie optie ftree-vect-loop-versie
voor meer informatie.

vect-max-versie-voor-alias-controles
Het maximale aantal runtime-controles dat kan worden uitgevoerd bij het uitvoeren van een lus
versiebeheer voor alias in de vectorizer. Zie optie ftree-vect-loop-versie voor
meer informatie.

max-iteraties-naar-track
Het maximale aantal iteraties van een lus het brute force-algoritme voor analyse
van # iteraties van de lus probeert te evalueren.

hete-bb-tel-fractie
Selecteer een fractie van het maximale aantal herhalingen van het basisblok in het programma
gegeven basisblok moet als hot worden beschouwd.

hot-bb-frequentie-fractie
Selecteer een fractie van de ingangsblokfrequentie van uitvoeringen van basisblok in
functie gegeven basisblok moet als hot worden beschouwd.

max-voorspelde-iteraties
Het maximale aantal lusiteraties dat we statisch voorspellen. Dit is handig bij
gevallen waarin de functie een enkele lus bevat met een bekende grens en een andere lus met
onbekend. We voorspellen het bekende aantal iteraties correct, terwijl het onbekende
aantal iteraties gemiddeld op ongeveer 10. Dit betekent dat de lus zonder
grenzen zouden kunstmatig koud lijken ten opzichte van de andere.

uitlijnen-drempel
Selecteer een fractie van de maximale uitvoeringsfrequentie van het basisblok in functie
gegeven basisblok wordt uitgelijnd.

align-loop-iteraties
Een lus die naar verwachting itereert, tenzij het geselecteerde aantal iteraties wordt gehaald
uitgelijnd.

tracer-dynamische-dekking
tracer-dynamische-dekking-feedback
Deze waarde wordt gebruikt om de vorming van superblokken te beperken zodra het gegeven percentage van
uitgevoerde instructies is gedekt. Dit beperkt onnodige uitbreiding van de codegrootte.

De tracer-dynamische-dekking-feedback wordt alleen gebruikt wanneer profielfeedback is
beschikbaar. De echte profielen (in tegenstelling tot statisch geschatte) zijn veel
minder gebalanceerd waardoor de drempel groter kan zijn.

tracer-max-code-groei
Stop staartduplicatie zodra de codegroei een bepaald percentage heeft bereikt. Dit is
nogal flauw argument, aangezien de meeste duplicaten later in cross zullen worden geëlimineerd
springen, dus het kan op veel hogere waarden worden ingesteld dan de gewenste codegroei.

tracer-min-tak-verhouding
Stop de omgekeerde groei wanneer de omgekeerde kans op de beste voorsprong kleiner is dan dit
drempel (in procenten).

tracer-min-tak-verhouding
tracer-min-tak-ratio-feedback
Stop voorwaartse groei als de kans op de beste voorsprong lager is dan dit
drempel.

gelijk aan tracer-dynamische-dekking twee waarden zijn aanwezig, één voor compilatie
voor profielfeedback en één voor compilatie zonder. De waarde voor compilatie
met profielfeedback moet conservatiever (hoger) zijn om te maken
tracer effectief.

max-cse-padlengte
Maximum aantal basisblokken op het pad dat cse in overweging neemt. De standaardwaarde is 10.

max-cse-insns
De maximale instructies CSE-proces vóór het spoelen. De standaardwaarde is 1000.

ggc-min-uitbreiden
GCC gebruikt een garbage collector om zijn eigen geheugentoewijzing te beheren. Deze parameter
specificeert het minimumpercentage waarmee de afvalberg moet zijn
toegestaan ​​om uit te breiden tussen collecties. Door dit af te stemmen kan de compilatiesnelheid worden verbeterd;
het heeft geen effect op het genereren van code.

De standaardwaarde is 30% + 70% * (RAM/1GB) met een bovengrens van 100% wanneer RAM >= 1GB.
Als "getrlimit" beschikbaar is, is het begrip "RAM" de kleinste van de werkelijke RAM en
"RLIMIT_DATA" of "RLIMIT_AS". Als GCC niet in staat is om RAM op een bepaald punt te berekenen
platform, wordt de ondergrens van 30% gebruikt. Deze parameter instellen en ggc-min-
hoop grootte tot nul zorgt ervoor dat bij elke gelegenheid een volledige incasso plaatsvindt. Dit is
extreem traag, maar kan handig zijn voor debuggen.

ggc-min-heapsize
Minimale grootte van de hoop van de vuilnisophaler voordat het de moeite begint te nemen om te verzamelen
afval. De eerste verzameling vindt plaats nadat de heap is uitgebreid met ggc-min-uitbreiden%
Verder ggc-min-heapsize. Nogmaals, het afstemmen hiervan kan de compilatiesnelheid verbeteren, en
heeft geen effect op het genereren van code.

De standaardwaarde is de kleinste van RAM/8, RLIMIT_RSS, of een limiet die probeert te verzekeren
dat RLIMIT_DATA of RLIMIT_AS niet worden overschreden, maar met een ondergrens van 4096
(vier megabytes) en een bovengrens van 131072 (128 megabytes). Als GCC niet in staat is:
om RAM op een bepaald platform te berekenen, wordt de ondergrens gebruikt. Dit instellen
parameter very large schakelt het verzamelen van afval effectief uit. Dit instellen
parameter en ggc-min-uitbreiden tot nul zorgt ervoor dat een volledige verzameling plaatsvindt bij elke
kans.

max-reload-zoek-insns
Het maximale aantal herladen van instructies moet achteruit kijken voor equivalent
register. Toenemende waarden betekenen agressievere optimalisatie, waardoor de
de compilatietijd neemt toe met waarschijnlijk iets betere prestaties. De standaard
waarde is 100.

max-cselib-geheugenlocaties
Het maximale aantal geheugenlocaties waar cselib rekening mee moet houden.
Toenemende waarden betekenen agressievere optimalisatie, waardoor de compilatietijd wordt verkort
verhogen met waarschijnlijk iets betere prestaties. De standaardwaarde is 500.

opnieuw ordenen-blokken-dupliceren
opnieuw ordenen-blokken-dupliceren-feedback
Gebruikt door basisblokherschikkingspas om te beslissen of onvoorwaardelijke vertakking moet worden gebruikt
of dupliceer de code op de bestemming. Code wordt gedupliceerd wanneer deze wordt geschat
grootte is kleiner dan deze waarde vermenigvuldigd met de geschatte grootte van onvoorwaardelijk
spring in de hotspots van het programma.

De opnieuw ordenen-blok-duplicate-feedback wordt alleen gebruikt wanneer profielfeedback is
beschikbaar en kan worden ingesteld op hogere waarden dan opnieuw ordenen-blok-dupliceren sinds
informatie over de hotspots is nauwkeuriger.

max-sched-ready-insns
Het maximale aantal instructies dat klaar is om te worden uitgegeven, moet de planner
op elk willekeurig moment tijdens de eerste planningspas overwegen. Waarden verhogen
betekent meer grondige zoekopdrachten, waardoor de compilatietijd toeneemt met waarschijnlijk
weinig voordeel. De standaardwaarde is 100.

max-sched-regio-blokken
Het maximum aantal blokken in een regio dat in aanmerking komt voor interblok
het roosteren. De standaardwaarde is 10.

max-pipeline-regio-blokken
Het maximale aantal blokken in een regio dat in aanmerking komt voor pijplijnen in de
selectieve planner. De standaardwaarde is 15.

max-sched-regio-insns
Het maximale aantal insns in een regio dat in aanmerking komt voor interblock
het roosteren. De standaardwaarde is 100.

max-pipeline-regio-insns
Het maximale aantal insns in een regio dat in aanmerking komt voor pipelining in de
selectieve planner. De standaardwaarde is 200.

min-spec-prob
De minimale kans (in procenten) om een ​​bronblok voor interblok te bereiken
speculatieve planning. De standaardwaarde is 40.

max-sched-exten-regio's-iters
Het maximale aantal iteraties via CFG om regio's uit te breiden. 0 - uitschakelen
regio-uitbreiding, N - doe maximaal N iteraties. De standaardwaarde is 0.

max-sched-insn-conflict-vertraging
De maximale conflictvertraging voor een insn om in aanmerking te komen voor speculatieve beweging.
De standaardwaarde is 3.

schema-specificatie-prob-cutoff
De minimale kans op speculatie succes (in procenten), zodat speculatieve
insn zal worden gepland. De standaardwaarde is 40.

sched-mem-true-dep-kosten
Minimale afstand (in CPU-cycli) tussen opslaan en laden gericht op hetzelfde geheugen
locaties. De standaardwaarde is 1.

selsched-max-vooruitblik
De maximale grootte van het vooruitblikvenster van selectieve planning. Het is een diepte
van zoeken naar beschikbare instructies. De standaardwaarde is 50.

selsched-max-sched-tijden
Het maximum aantal keren dat een instructie wordt ingepland tijdens selectief
het roosteren. Dit is de limiet van het aantal iteraties waarmee de
instructie kan worden gepijplijnd. De standaardwaarde is 2.

selsched-max-insns-om te hernoemen
Het maximale aantal beste instructies in de kant-en-klare lijst die in aanmerking komen voor
hernoemen in de selectieve planner. De standaardwaarde is 2.

sms-min-sc
De minimale waarde van het aantal trappen dat de swing modulo-scheduler zal genereren. De
standaardwaarde is 2.

max-laatste-waarde-rtl
De maximale grootte gemeten als het aantal RTL's dat kan worden vastgelegd in een uitdrukking
in combinator voor een pseudoregister als laatst bekende waarde van dat register. De
standaard is 10000.

integer-share-limiet
Kleine integer-constanten kunnen een gedeelde datastructuur gebruiken, waardoor de compiler
geheugengebruik en het verhogen van de snelheid. Dit stelt de maximale waarde van een gedeelde
geheel getal constante. De standaardwaarde is 256.

min-virtuele mappings
Specificeert het minimale aantal virtuele toewijzingen in de incrementele SSA-updater
die moet worden geregistreerd om de heuristiek voor virtuele toewijzingen te activeren die is gedefinieerd door
virtuele-mappings-ratio. De standaardwaarde is 100.

virtuele-mappings-ratio
Als het aantal virtuele toewijzingen de verhouding virtuele toewijzingen groter is dan het aantal
van virtuele symbolen die moeten worden bijgewerkt, schakelt de incrementele SSA-updater over naar een
volledige update voor die symbolen. De standaardverhouding is 3.

ssp-buffergrootte
De minimale grootte van buffers (maw arrays) die stack smashing zullen ondergaan
bescherming wanneer -fstack-bescherming is gebruikt.

Deze standaard vóór Ubuntu 10.10 was "8". Momenteel is het "4", om de . te vergroten
aantal functies beschermd door de stapelbeschermer.

max-jump-thread-duplicatie-stmts
Maximaal aantal instructies toegestaan ​​in een blok dat moet worden gedupliceerd wanneer:
sprongen inrijgen.

max-velden-voor-veldgevoelig
Maximaal aantal velden in een structuur die we op een veldgevoelige manier zullen behandelen
tijdens pointeranalyse. De standaardwaarde is nul voor -O0, en -O1 en 100 voor -Os,
-O2 en -O3.

prefetch-latentie
Schatting van het gemiddelde aantal instructies dat wordt uitgevoerd vóór prefetch
afwerkingen. De afstand die we vooruit halen is evenredig met deze constante.
Het verhogen van dit aantal kan er ook toe leiden dat minder streams vooraf worden opgehaald (zie
simultaan-prefetches).

simultaan-prefetches
Maximum aantal prefetchingen dat tegelijkertijd kan worden uitgevoerd.

l1-cache-regelgrootte
De grootte van de cacheregel in L1-cache, in bytes.

l1-cache-grootte
De grootte van L1-cache, in kilobytes.

l2-cache-grootte
De grootte van L2-cache, in kilobytes.

min-insn-naar-prefetch-ratio
De minimale verhouding tussen het aantal instructies en het aantal prefetches
om prefetching in een lus in te schakelen.

prefetch-min-insn-naar-mem-ratio
De minimale verhouding tussen het aantal instructies en het aantal geheugen
referenties om prefetching in een lus mogelijk te maken.

gebruik-canonieke-types
Of de compiler het systeem van het "canonieke" type moet gebruiken. Standaard is dit
moet altijd 1 zijn, wat een efficiënter intern mechanisme gebruikt om te vergelijken
typen in C++ en Objective-C++. Als er echter bugs in het canonieke systeem zijn:
compilatiefouten veroorzaakt, stelt u deze waarde in op 0 om canonieke typen uit te schakelen.

switch-conversie-max-branch-ratio
Switch-initialisatieconversie zal weigeren om arrays te maken die groter zijn dan
switch-conversie-max-branch-ratio maal het aantal takken in de switch.

max-gedeeltelijke-antieke-lengte
Maximale lengte van de gedeeltelijke antic set berekend tijdens de gedeeltelijke boom
redundantie eliminatie optimalisatie (-ftree-pre) bij het optimaliseren op -O3 en hoger.
Voor sommige soorten broncode de verbeterde gedeeltelijke eliminatie van redundantie
optimalisatie kan weglopen en al het beschikbare geheugen op de host in beslag nemen
machine. Deze parameter stelt een limiet in voor de lengte van de sets die worden berekend,
wat het wegloopgedrag voorkomt. Het instellen van een waarde van 0 voor deze parameter zal
een onbeperkte ingestelde lengte toestaan.

sccvn-max-scc-grootte
Maximale grootte van een sterk verbonden component (SCC) tijdens SCCVN-verwerking. Indien
deze limiet is bereikt, wordt SCCVN-verwerking voor de hele functie niet uitgevoerd en
optimalisaties die hiervan afhankelijk zijn, worden uitgeschakeld. De standaard maximale SCC-grootte is
10000.

ira-max-loops-aantal
IRA gebruikt standaard regionale registertoewijzing. Als een functie meer bevat
loops dan het aantal dat door deze parameter wordt gegeven, alleen ten hoogste het gegeven aantal
de meest uitgevoerde lussen vormen regio's voor de toewijzing van regionale registers.
De standaardwaarde van de parameter is 100.

ira-max-conflicttabelgrootte
Hoewel IRA een geavanceerd algoritme gebruikt om de conflicttabel te comprimeren,
table kan nog steeds buitensporige hoeveelheden geheugen nodig hebben voor enorme functies. Als de
conflicttabel voor een functie kan groter zijn dan de grootte in MB die hierdoor wordt gegeven
parameter, gebruikt de registertoewijzer in plaats daarvan een snellere, eenvoudigere en lagere
kwaliteitsalgoritme waarvoor geen pseudo-registerconflicttabel hoeft te worden gebouwd.
De standaardwaarde van de parameter is 2000.

ira-loop-gereserveerde-regs
IRA kan worden gebruikt om nauwkeurigere registerdruk in lussen voor beslissingen te evalueren
om lusinvarianten te verplaatsen (zie -O3). Het aantal beschikbare registers gereserveerd voor
sommige andere doeleinden worden gegeven door deze parameter. De standaardwaarde van de
parameter is 2, wat het minimale aantal registers is dat nodig is voor typische
instructies. Deze waarde is de beste gevonden uit talrijke experimenten.

lus-invariant-max-bbs-in-lus
Lusinvariante beweging kan erg duur zijn, zowel in compilatietijd als in
hoeveelheid benodigde compile-time geheugen, met zeer grote lussen. Loops met meer
basisblokken dan deze parameter hebben geen lusinvariante bewegingsoptimalisatie
op hen uitgevoerd. De standaardwaarde van de parameter is 1000 voor -O1 en 10000
voor -O2 en hoger.

loop-max-datarefs-voor-datadeps
Het bouwen van data-afhankelijkheden is duur voor zeer grote lussen. Deze parameter
beperkt het aantal gegevensverwijzingen in lussen die in aanmerking komen voor gegevens
afhankelijkheidsanalyse. Deze grote lussen worden dan niet door de
optimalisaties met behulp van lusgegevensafhankelijkheden. De standaardwaarde is 1000.

max-vartrack-grootte
Stelt een maximum aantal hash-tabelsleuven in om te gebruiken tijdens variabele trackinggegevensstroom
analyse van elke functie. Als deze limiet wordt overschreden met variabele tracking op
toewijzingen ingeschakeld, wordt de analyse voor die functie zonder deze opnieuw geprobeerd, na
alle debug-insns uit de functie verwijderen. Als de limiet wordt overschreden, zelfs zonder
debug insns, var-trackinganalyse is volledig uitgeschakeld voor de functie.
Als u de parameter op nul zet, is deze onbeperkt.

max-vartrack-expr-diepte
Stelt een maximum aantal recursieniveaus in bij pogingen om namen van variabelen toe te wijzen of
tijdelijke fouten debuggen om expressies te waarderen. Dit ruilt compilatietijd in voor meer
volledige debug-informatie. Als dit te laag is ingesteld, waarde-expressies die zijn
beschikbaar en kan worden weergegeven in debug-informatie kan uiteindelijk niet worden gebruikt;
als je dit hoger instelt, kan de compiler complexere foutopsporing vinden
expressies, maar de compileertijd en het geheugengebruik kunnen toenemen. De standaardwaarde is 12.

min-nondebug-insn-uid
Gebruik uids die beginnen bij deze parameter voor non-debug insns. Het bereik onder de
parameter is exclusief gereserveerd voor debug-insns gemaakt door
-fvar-tracking-opdrachten, maar debug-insns kunnen (niet-overlappende) uids hierboven krijgen
het als het gereserveerde bereik is uitgeput.

ipa-sra-ptr-groeifactor
IPA-SRA vervangt een pointer naar een aggregaat door een of meer nieuwe parameters
alleen wanneer hun cumulatieve grootte kleiner of gelijk is aan ipa-sra-ptr-groeifactor
maal de grootte van de oorspronkelijke pointerparameter.

tm-max-aggregaat-grootte
Bij het maken van kopieën van thread-local variabelen in een transactie, is deze parameter
specificeert de grootte in bytes waarna variabelen worden opgeslagen bij het loggen
functies in tegenstelling tot het opslaan/herstellen van codereeksparen. Alleen deze optie
is van toepassing bij gebruik van -fgnu-tm.

grafiet-max-nb-scop-params
Om exponentiële effecten in de Graphite-lustransformaties te voorkomen, moet het aantal
parameters in een Static Control Part (SCoP) is begrensd. De standaardwaarde is 10
parameters. Een variabele waarvan de waarde onbekend is tijdens het compileren en gedefinieerd is
buiten een SCoP is een parameter van de SCoP.

grafiet-max-bbs-per-functie
Om exponentiële effecten bij de detectie van SCoP's te voorkomen, moet de grootte van de functies
geanalyseerd door Graphite is begrensd. De standaardwaarde is 100 basisblokken.

lus-blok-tegelgrootte
Loop blocking of strip mining transformaties, ingeschakeld met -floop-blok or
-floop-strip-mijn, verwijder elke lus in het lusnest met een bepaald aantal
iteraties. De striplengte kan worden gewijzigd met de lus-blok-tegelgrootte
parameter. De standaardwaarde is 51 iteraties.

ipa-cp-waardelijstgrootte
IPA-CP probeert alle mogelijke waarden en typen te volgen die zijn doorgegeven aan de functie's
parameter om ze te verspreiden en devirtualisatie uit te voeren. ipa-cp-waarde-
lijstgrootte is het maximale aantal waarden en typen dat het per één formeel opslaat
parameter van een functie.

lto-partities
Geef het gewenste aantal partities op dat tijdens de WHOPR-compilatie wordt geproduceerd. De
het aantal partities moet groter zijn dan het aantal CPU's dat voor compilatie wordt gebruikt. De
standaardwaarde is 32.

lto-minpartitie
Grootte van minimale partitie voor WHOPR (in geschatte instructies). Dit voorkomt
kosten van het opsplitsen van zeer kleine programma's in te veel partities.

cxx-max-naamruimten-voor-diagnostische-help
Het maximum aantal naamruimten dat moet worden geraadpleegd voor suggesties bij het opzoeken van C++-namen
mislukt voor een identificatie. De standaardwaarde is 1000.

zinken-frequentie-drempel
De maximale relatieve uitvoeringsfrequentie (in procenten) van het doelblok
ten opzichte van het originele blok van een statement om het zinken van een statement van a . mogelijk te maken
uitspraak. Grotere aantallen resulteren in agressiever zinken. De
standaardwaarde is 75. Er wordt een kleine positieve correctie toegepast voor uitspraken met
geheugenoperanden, want die zijn nog winstgevender, dus zinken.

max-winkels-tot-gootsteen
Het maximale aantal voorwaardelijke winkelsparen dat kan worden verzonken. Stel in op 0 als
ofwel vectorisatie (-ftree-vectoriseren) of als-conversie (-ftree-lus-als-omzetten)
is gehandicapt. De standaardwaarde is 2.

sta-load-data-races toe
Sta optimizers toe om nieuwe dataraces over belastingen te introduceren. Stel in op 1 om toe te staan,
anders naar 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door de
-fgeheugenmodel= optie.

sta-store-data-races toe
Sta optimizers toe om nieuwe dataraces in winkels te introduceren. Stel in op 1 om toe te staan,
anders naar 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door de
-fgeheugenmodel= optie.

sta-verpakt-load-data-races toe
Sta optimizers toe om nieuwe dataraces te introduceren op ingepakte dataladingen. Zet op 1 tot
toestaan, anders op 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door
de -fgeheugenmodel= optie.

sta-verpakte-store-data-races toe
Sta optimizers toe om nieuwe dataraces te introduceren op ingepakte datastores. Zet op 1 tot
toestaan, anders op 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door
de -fgeheugenmodel= optie.

hoofdletterwaarden-drempel
Het kleinste aantal verschillende waarden waarvoor je het beste een springtabel kunt gebruiken
in plaats van een boom met voorwaardelijke takken. Als de waarde 0 is, gebruik dan de standaard voor
de machine. De standaardwaarde is 0.

boom-reasoc-breedte
Stel het maximum aantal instructies in dat parallel wordt uitgevoerd in de opnieuw gekoppelde boom.
Deze parameter overschrijft doelafhankelijke heuristieken die standaard worden gebruikt als niet
nul waarde.

Opties Controlling de preprocessor
Deze opties besturen de C-preprocessor, die op elk C-bronbestand wordt uitgevoerd voordat de werkelijke
compilatie.

Als u gebruik maken van de -E optie, wordt er niets gedaan, behalve voorbewerking. Sommige van deze opties
alleen zinvol samen met -E omdat ze ervoor zorgen dat de preprocessor-uitvoer
ongeschikt voor daadwerkelijke compilatie.

-Wp,optie
Je kunt gebruiken -Wp,optie om de compiler-driver te omzeilen en door te geven optie rechtstreeks door
naar de preprocessor. Indien optie bevat komma's, het is opgesplitst in meerdere opties op
de komma's. Veel opties worden echter gewijzigd, vertaald of geïnterpreteerd door de
compiler-stuurprogramma voordat het wordt doorgegeven aan de preprocessor, en -Wp met geweld omzeilt
deze fase. De directe interface van de preprocessor is niet gedocumenteerd en onderhevig aan:
veranderen, dus waar mogelijk moet u het gebruik van . vermijden -Wp en laat de chauffeur de
opties in plaats daarvan.

-Xpreprocessor optie
Passeren optie als een optie voor de preprocessor. Hiermee kunt u systeem-
specifieke preprocessoropties die GCC niet weet te herkennen.

Als u een optie wilt doorgeven waarvoor een argument nodig is, moet u gebruiken -Xpreprocessor
twee keer, een keer voor de optie en een keer voor het argument.

-D naam
Vooraf definiëren naam als macro, met definitie 1.

-D naam=definitie
De inhoud van definitie worden tokenized en verwerkt alsof ze verschenen tijdens
vertaalfase drie in a #define richtlijn. In het bijzonder zal de definitie zijn:
afgekapt door ingesloten newline-tekens.

Als je de preprocessor aanroept vanuit een shell of shell-achtig programma, heb je misschien nodig:
om de quote-syntaxis van de shell te gebruiken om tekens te beschermen, zoals spaties met een
betekenis in de shell-syntaxis.

Als u een functie-achtige macro op de opdrachtregel wilt definiëren, schrijft u het argument ervan
lijst met omringende haakjes vóór het gelijkteken (indien aanwezig). Haakjes zijn
zinvol voor de meeste shells, dus u moet de optie citeren. Met sh en csh,
-NS'naam(argumenten...)=definitie' werkt.

-D en -U opties worden verwerkt in de volgorde waarin ze op de opdrachtregel worden gegeven. Alle
-imacro's filet en omvatten filet opties worden toch verwerkt -D en -U opties.

-U naam
Annuleer een eerdere definitie van naam, ingebouwd of voorzien van een -D optie.

-ondef
Definieer geen systeemspecifieke of GCC-specifieke macro's. De standaard voorgedefinieerde
macro's blijven gedefinieerd.

-I dir
Voeg de map toe dir naar de lijst met directory's waarin gezocht moet worden naar header-bestanden.
Directory's genoemd door -I worden doorzocht voordat het standaardsysteem mappen bevat.
Als de map dir is een standaard systeem inclusief directory, de optie wordt genegeerd om
ervoor zorgen dat de standaard zoekvolgorde voor systeemmappen en de speciale behandeling
van systeemheaders worden niet verslagen. Indien dir begint met "=", dan wordt "="
vervangen door het sysroot-voorvoegsel; zien --sysroot en -isysroot.

-o filet
Schrijf uitvoer naar filet. Dit is hetzelfde als specificeren filet als de tweede niet-optie
argument voor cpp. gcc een andere interpretatie heeft van een tweede non-optie argument,
dus je moet gebruiken -o om het uitvoerbestand op te geven.

-Muur
Schakelt alle optionele waarschuwingen in die wenselijk zijn voor normale code. op dit moment dit
is -Wcommentaar, -Schrijven, -Wmultichar en een waarschuwing over integer-promotie die a . veroorzaakt
verandering van teken in "#if"-expressies. Merk op dat veel van de waarschuwingen van de preprocessor
zijn standaard ingeschakeld en hebben geen opties om ze te bedienen.

-Wcommentaar
-Wopmerkingen
Waarschuwen wanneer een commentaar-startreeks /* verschijnt in a /* commentaar, of wanneer een
backslash-newline verschijnt in a // opmerking. (Beide vormen hebben hetzelfde effect.)

-Schrijven
De meeste trigraphs in opmerkingen hebben geen invloed op de betekenis van het programma. Echter, een
trigraaf die een ontsnapte nieuwe regel zou vormen (??/ aan het einde van een regel) kan, door
wijzigen waar de opmerking begint of eindigt. Daarom, alleen trigraphs die zouden vormen
escaped newlines produceren waarschuwingen in een opmerking.

Deze optie wordt geïmpliceerd door: -Muur. Indien -Muur is niet gegeven, deze optie is nog steeds ingeschakeld
tenzij trigraphs zijn ingeschakeld. Om trigraph-conversie te krijgen zonder waarschuwingen, maar get
de andere -Muur waarschuwingen, gebruik -trigrafieën -Muur -Wno-trigrafieën.

-Wtraditioneel
Waarschuw voor bepaalde constructies die zich anders gedragen in traditioneel en ISO C. Ook
waarschuwen voor ISO C-constructies die geen traditioneel C-equivalent hebben, en problematisch
constructies die vermeden moeten worden.

-Wundef
Waarschuwen wanneer een identifier die geen macro is, wordt aangetroffen in een #als richtlijn,
buiten gedefinieerd. Dergelijke identifiers worden vervangen door nul.

-Wunused-macro's
Waarschuw voor macro's die in het hoofdbestand zijn gedefinieerd en die niet worden gebruikt. Een macro is gebruikt als het is
minstens één keer uitgebreid of getest op bestaan. De preprocessor waarschuwt ook als:
de macro is niet gebruikt op het moment dat deze opnieuw is gedefinieerd of niet is gedefinieerd.

Ingebouwde macro's, macro's gedefinieerd op de opdrachtregel en macro's gedefinieerd in include
bestanden worden niet gewaarschuwd.

Opmerking: Als een macro daadwerkelijk wordt gebruikt, maar alleen wordt gebruikt in overgeslagen voorwaardelijke blokken, dan
CPP rapporteert het als ongebruikt. Om de waarschuwing in een dergelijk geval te vermijden, zou u kunnen verbeteren
de reikwijdte van de definitie van de macro door deze bijvoorbeeld te verplaatsen naar de eerste overgeslagen
blok. Als alternatief kunt u een dummy-gebruik geven met zoiets als:

#if gedefinieerd the_macro_causing_the_warning
#stop als

-Wendif-labels
Waarschuw wanneer een #anders of #stop als worden gevolgd door tekst. Dit gebeurt meestal in
code van het formulier

#als FOO
...
#anders FOO
...
#endif FOO

De tweede en derde "FOO" zouden in opmerkingen moeten staan, maar staan ​​vaak niet in oudere programma's.
Deze waarschuwing is standaard ingeschakeld.

-fout
Maak van alle waarschuwingen harde fouten. Broncode die waarschuwingen activeert, is:
verworpen.

-Wsysteem-headers
Geef waarschuwingen voor code in systeemheaders. Deze zijn normaal gesproken nutteloos bij het vinden van
bugs in je eigen code, daarom onderdrukt. Als u verantwoordelijk bent voor het systeem:
bibliotheek, wil je ze misschien zien.

-w Onderdruk alle waarschuwingen, inclusief de waarschuwingen die GNU CPP standaard afgeeft.

-pedant
Voer alle verplichte diagnoses uit die in de C-norm worden vermeld. Sommigen van hen zijn overgebleven
standaard uitgeschakeld, omdat ze vaak worden geactiveerd op onschadelijke code.

-pedant-fouten
Geef alle verplichte diagnostiek uit en maak van alle verplichte diagnostiek fouten.
Dit omvat verplichte diagnostiek die GCC uitgeeft zonder -pedant maar behandelt als
waarschuwingen.

-M In plaats van het resultaat van de voorbewerking uit te voeren, voert u een regel uit die geschikt is voor: maken
waarin de afhankelijkheden van het hoofdbronbestand worden beschreven. De preprocessor voert één uit:
maken regel met de naam van het objectbestand voor dat bronbestand, een dubbele punt en de namen
van alle opgenomen bestanden, ook die afkomstig van omvatten or -imacro's commando
lijn opties.

Tenzij expliciet aangegeven (met -MT or -MQ), de bestandsnaam van het object bestaat uit de
naam van het bronbestand met een achtervoegsel vervangen door een achtervoegsel van het objectbestand en met willekeurig
leidende directory-onderdelen verwijderd. Als er veel opgenomen bestanden zijn, is de regel:
splitsen in meerdere regels met behulp van \-nieuwe lijn. De regel heeft geen commando's.

Deze optie onderdrukt de foutopsporingsuitvoer van de preprocessor niet, zoals: -dM​ Vermijden
het mengen van dergelijke debug-uitvoer met de afhankelijkheidsregels die u expliciet moet specificeren
afhankelijkheidsuitvoerbestand met -MF, of gebruik een omgevingsvariabele zoals
DEPENDENCIES_OUTPUT. Debug-uitvoer wordt nog steeds naar de reguliere uitvoerstroom verzonden als
Normaal.

Voorbijgaand -M aan de bestuurder impliceert: -Een onderdrukt waarschuwingen met een impliciete -w.

-MM Like -M maar vermeld geen header-bestanden die te vinden zijn in systeemheader-directory's,
noch header-bestanden die direct of indirect uit een dergelijke header zijn opgenomen.

Dit houdt in dat de keuze voor punthaken of dubbele aanhalingstekens in een #include
richtlijn bepaalt op zichzelf niet of die kop zal verschijnen in -MM
afhankelijkheidsoutput. Dit is een kleine wijziging in de semantiek van GCC-versies 3.0 en
eerder.

-MF filet
Bij gebruik bij -M or -MM, specificeert een bestand waarnaar de afhankelijkheden moeten worden geschreven. Als Nee -MF
switch wordt gegeven, de preprocessor stuurt de regels naar dezelfde plaats die hij zou hebben verzonden
voorbewerkte uitvoer.

Bij gebruik met de driveropties -MD or -MMD, -MF overschrijft de standaardafhankelijkheid
uitvoer bestand.

-MG In combinatie met een optie zoals -M het aanvragen van afhankelijkheidsgeneratie, -MG gaat uit van
ontbrekende header-bestanden zijn gegenereerde bestanden en voegt ze toe aan de afhankelijkheidslijst zonder
een fout opwerpen. De bestandsnaam van de afhankelijkheid wordt rechtstreeks overgenomen van de "#include"
richtlijn zonder een pad vooraf te gaan. -MG onderdrukt ook voorbewerkte uitvoer, als a
ontbrekende header-bestand maakt dit nutteloos.

Deze functie wordt gebruikt bij het automatisch bijwerken van makefiles.

- MP Deze optie instrueert CPP om een ​​nep doel toe te voegen voor elke andere afhankelijkheid dan de
main-bestand, waardoor elk van niets afhankelijk is. Deze dummy-regels omzeilen fouten
maken geeft als u headerbestanden verwijdert zonder de . bij te werken Makefile overeenkomen.

Dit is een typische uitvoer:

test.o: test.c test.h

test.h:

-MT doel
Wijzig het doel van de regel die wordt uitgezonden door het genereren van afhankelijkheid. Standaard duurt CPP
de naam van het hoofdinvoerbestand, verwijdert alle directorycomponenten en elk bestandsachtervoegsel
zoals .c, en voegt het gebruikelijke objectachtervoegsel van het platform toe. Het resultaat is het doel.

An -MT optie zal het doel zo instellen dat het exact de tekenreeks is die u opgeeft. Als je wilt
meerdere doelen, kunt u ze als een enkel argument specificeren om -MT, of gebruik meerdere
-MT opties.

Bijvoorbeeld -MT '$(objpfx)foo.o' zou kunnen geven

$(objpfx)foo.o: foo.c

-MQ doel
Hetzelfde als -MT, maar het citeert alle tekens die speciaal zijn om te maken.
-MQ '$(objpfx)foo.o' geeft

$$(objpfx)foo.o: foo.c

Het standaarddoel wordt automatisch aangehaald, alsof het werd gegeven met -MQ.

-MD -MD is gelijk aan -M -MF filet, behalve dat -E wordt niet gesuggereerd. De bestuurder
bepaalt filet op basis van of een -o optie wordt gegeven. Als dat zo is, gebruikt de bestuurder zijn
argument maar met een achtervoegsel van .d, anders krijgt het de naam van het invoerbestand,
verwijdert alle directorycomponenten en suffix, en past a . toe .d achtervoegsel.

If -MD wordt gebruikt in combinatie met -E, ieder -o schakelaar wordt begrepen om de . te specificeren
afhankelijkheidsuitvoerbestand, maar indien gebruikt zonder -EElke -o wordt verstaan ​​om te specificeren a
doelobjectbestand.

Sinds -E wordt niet geïmpliceerd, -MD kan worden gebruikt om een ​​afhankelijkheidsuitvoerbestand te genereren als a
neveneffect van het compilatieproces.

-MMD
Like -MD behalve dat alleen gebruikersheaderbestanden worden vermeld, geen systeemheaderbestanden.

-fpch-deps
Bij gebruik van voorgecompileerde headers, zal deze vlag ervoor zorgen dat de afhankelijkheid-output vlaggen:
vermeld ook de bestanden van de afhankelijkheden van de vooraf gecompileerde header. Alleen indien niet gespecificeerd
de voorgecompileerde koptekst zou worden weergegeven en niet de bestanden die zijn gebruikt om deze te maken
omdat die bestanden niet worden geraadpleegd wanneer een voorgecompileerde header wordt gebruikt.

-fpch-voorverwerking
Deze optie maakt het gebruik van een voorgecompileerde header mogelijk samen met: -E. Het voegt een speciale
"#pragma", "#pragma GCC pch_preprocess"bestandsnaam"" in de uitvoer om de plaats te markeren
waar de vooraf gecompileerde header werd gevonden, en zijn bestandsnaam. Wanneer -fvoorbewerkt in
gebruikt, herkent GCC deze "#pragma" en laadt de PCH.

Deze optie is standaard uitgeschakeld, omdat de resulterende voorbewerkte uitvoer alleen is
echt geschikt als input voor GCC. Het wordt ingeschakeld door -opslaan-temps.

Je moet deze "#pragma" niet in je eigen code schrijven, maar het is veilig om de
bestandsnaam als het PCH-bestand op een andere locatie beschikbaar is. De bestandsnaam kan zijn:
absoluut of het kan relatief zijn ten opzichte van de huidige directory van GCC.

-x c
-x C ++
-x doelstelling C
-x assembler-met-cpp
Geef de brontaal op: C, C++, Objective-C of assembly. Dit heeft niets te maken
met normconformiteit of uitbreidingen; het selecteert alleen welke basissyntaxis moet
verwachten. Als u geen van deze opties geeft, zal cpp de taal afleiden uit de
extensie van het bronbestand: .c, . Cc, .mof .S. Enkele andere veelvoorkomende extensies voor
C++ en assembly worden ook erkend. Als cpp de extensie niet herkent,
zal het bestand behandelen als C; dit is de meest algemene modus.

Opmerking: Eerdere versies van cpp geaccepteerd a -lang optie die zowel de
taal en het conformiteitsniveau van de normen. Deze optie is verwijderd, omdat:
het is in strijd met de -l optie.

-standaard=standaard
-ansi
Specificeer de norm waaraan de code moet voldoen. Momenteel weet CPP over C
en C++-normen; anderen kunnen in de toekomst worden toegevoegd.

standaard kan een van zijn:

"c90"
"c89"
"iso9899:1990"
De ISO C-norm uit 1990. c90 is de gebruikelijke afkorting voor deze versie van
de standaard.

De -ansi optie is gelijk aan -standaard=c90.

"iso9899:199409"
De 1990 C-norm, zoals gewijzigd in 1994.

"iso9899:1999"
"c99"
"iso9899: 199x"
"c9x"
De herziene ISO C-norm, gepubliceerd in december 1999. Vóór publicatie, dit:
stond bekend als C9X.

"iso9899:2011"
"c11"
"c1x"
De herziene ISO C-norm, gepubliceerd in december 2011. Vóór publicatie, dit:
stond bekend als C1X.

"gnu90"
"gnu89"
De 1990 C-standaard plus GNU-extensies. Dit is de standaardinstelling.

"gnu99"
"gnu9x"
De 1999 C-standaard plus GNU-extensies.

"gnu11"
"gnu1x"
De 2011 C-standaard plus GNU-extensies.

"c++98"
De ISO C++-norm uit 1998 plus amendementen.

"gnu++98"
Hetzelfde als -standaard=c++98 plus GNU-extensies. Dit is de standaard voor C++-code.

-IK- Splits het include-pad. Alle mappen gespecificeerd met -I opties voor -IK- zijn
alleen gezocht naar headers gevraagd met "#include"het dossier""; er wordt niet naar gezocht
"#erbij betrekkenbestand>". Als er extra mappen zijn opgegeven met -I opties na de
-IK-, die mappen worden allemaal doorzocht #include richtlijnen.

Daarnaast, -IK- blokkeert het gebruik van de directory van de huidige bestandsdirectory als
de eerste zoekdirectory voor "#include"het dossier"". Deze optie is afgeschaft.

-nostdinc
Zoek niet in de standaard systeemdirectory's naar headerbestanden. Alleen de mappen
je hebt opgegeven met -I opties (en de map van het huidige bestand, als
geschikt) worden doorzocht.

-nostdinc++
Zoek niet naar header-bestanden in de C++-specifieke standaarddirectories, maar doe toch
zoek in de andere standaardmappen. (Deze optie wordt gebruikt bij het bouwen van de C++
bibliotheek.)

omvatten filet
Proces filet alsof "#include "file"" verscheen als de eerste regel van de primaire bron
het dossier. Echter, de eerste directory waarnaar wordt gezocht filet werkt de preprocessor?
directory verkrijgen in plaats daarvan of de map met het hoofdbronbestand. Indien niet gevonden
daar wordt naar gezocht in de rest van de "#include "...""-zoekketen als
Normaal.

Als er meerdere omvatten opties worden gegeven, worden de bestanden opgenomen in de volgorde waarin ze
verschijnen op de opdrachtregel.

-imacro's filet
Precies zoals omvatten, behalve dat alle uitvoer geproduceerd door scannen filet wordt gegooid
weg. Macro's die het definieert, blijven gedefinieerd. Hiermee kunt u alle macro's verkrijgen
uit een header zonder ook de aangiften ervan te verwerken.

Alle bestanden gespecificeerd door -imacro's worden verwerkt voordat alle bestanden gespecificeerd door omvatten.

-idirna dir
Ontdek dir voor header-bestanden, maar doe het na alle mappen gespecificeerd met -I en
standaard systeemdirectory's zijn uitgeput. dir wordt behandeld als een systeem omvatten:
map. Indien dir begint met "=", dan wordt "=" vervangen door de sysroot
voorvoegsel; zien --sysroot en -isysroot.

-ipvoorvoegsel voorvoegsel
Specificeren voorvoegsel als voorvoegsel voor volgende -imetvoorvoegsel opties. Als het voorvoegsel
een map vertegenwoordigt, moet u de laatste . opnemen /.

-imetvoorvoegsel dir
-imetvoorvoegselvoor dir
toevoegen dir naar het voorvoegsel dat eerder is opgegeven met -ipvoorvoegsel, en voeg de resulterende . toe
directory naar het include-zoekpad. -imetvoorvoegselvoor zet het op dezelfde plaats -I
zou; -imetvoorvoegsel zet het waar -idirna zou doen.

-isysroot dir
Deze optie is als de --sysroot optie, maar is alleen van toepassing op header-bestanden (behalve voor
Darwin-doelen, waar het van toepassing is op zowel header-bestanden als bibliotheken). Zie de
--sysroot optie voor meer informatie.

-imultilib dir
Te gebruiken dir als een submap van de map die doelspecifieke C++-headers bevat.

-isysteem dir
Ontdek dir voor header-bestanden, na alle mappen gespecificeerd door -I maar voor de
standaard systeemmappen. Markeer het als een systeemmap, zodat het hetzelfde wordt
speciale behandeling zoals wordt toegepast op de standaard systeemdirectory's. Indien dir begint
met "=", dan wordt "=" vervangen door het voorvoegsel sysroot; zien --sysroot en
-isysroot.

-ikquote dir
Ontdek dir alleen voor header-bestanden die zijn aangevraagd met "#include"het dossier""; zij zijn niet
gezocht naar "#includebestand>", voor alle mappen gespecificeerd door -I en voor de
standaard systeemmappen. Indien dir begint met "=", daarna wordt "=" vervangen door
het sysroot-voorvoegsel; zien --sysroot en -isysroot.

-frichtlijnen-alleen
Hanteer richtlijnen bij voorverwerking, maar breid geen macro's uit.

Het gedrag van de optie hangt af van de -E en -fvoorbewerkt opties.

met -E, is de voorbewerking beperkt tot het afhandelen van richtlijnen zoals "#define",
"#ifdef" en "#error". Andere preprocessor-bewerkingen, zoals macro-uitbreiding en
trigraaf conversie worden niet uitgevoerd. tevens de -dd optie is impliciet
ingeschakeld.

met -fvoorbewerkt, voordefinitie van de opdrachtregel en de meeste ingebouwde macro's is
gehandicapt. Macro's zoals "__LINE__", die contextafhankelijk zijn, worden afgehandeld
normaal gesproken. Dit maakt compilatie mogelijk van bestanden die eerder zijn voorbewerkt met "-E
-fdirectives-only".

Met beide -E en -fvoorbewerkt, de regels voor -fvoorbewerkt voorrang krijgen. Dit
maakt volledige voorverwerking mogelijk van bestanden die eerder zijn voorbewerkt met "-E
-fdirectives-only".

-fdollars-in-ID's
ACCEPTEREN $ in identificatiegegevens.

-fextended-identifiers
Accepteer universele tekennamen in ID's. Deze optie is experimenteel; in een
toekomstige versie van GCC, wordt deze standaard ingeschakeld voor C99 en C++.

-fvoorbewerkt
Geef aan de preprocessor aan dat het invoerbestand al is voorbewerkt. Dit
onderdrukt zaken als macro-uitbreiding, trigraph-conversie, ontsnapte nieuwe regelsplitsing,
en verwerking van de meeste richtlijnen. De preprocessor herkent en verwijdert nog steeds
opmerkingen, zodat u een bestand kunt doorgeven dat is voorbewerkt met -C naar de compiler zonder
problemen. In deze modus is de geïntegreerde preprocessor niet meer dan een tokenizer
voor de front-ends.

-fvoorbewerkt is impliciet als het invoerbestand een van de extensies heeft .i, .ii or .mi.
Dit zijn de extensies die GCC gebruikt voor voorverwerkte bestanden die zijn gemaakt door -opslaan-temps.

-ftabstop=Breedte
Stel de afstand tussen tabstops in. Dit helpt de preprocessor om de juiste kolom te rapporteren
nummers in waarschuwingen of fouten, zelfs als er tabbladen op de regel verschijnen. Als de waarde kleiner is
dan 1 of groter dan 100, wordt de optie genegeerd. De standaardwaarde is 8.

-fdebug-cpp
Deze optie is alleen nuttig voor het opsporen van fouten in GCC. Bij gebruik met -E, dumpt debuggen
informatie over locatiekaarten. Elk token in de uitvoer wordt voorafgegaan door de dump van
de kaart waartoe de locatie behoort. De dump van de kaart met de locatie van een token
zou zijn:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"lok": }

Bij gebruik zonder -E, heeft deze optie geen effect.

-ftrack-macro-uitbreiding[=niveau]
Volg locaties van tokens in macro-uitbreidingen. Hierdoor kan de compiler uitzenden
diagnose over de huidige macro-uitbreidingsstack wanneer een compilatiefout optreedt in
een macro-uitbreiding. Het gebruik van deze optie zorgt ervoor dat de preprocessor en de compiler verbruiken
meer geheugen. De niveau parameter kan worden gebruikt om het precisieniveau van het token te kiezen
locatietracking waardoor het geheugengebruik indien nodig wordt verminderd. Waarde 0 of
niveau deactiveert deze optie net alsof nee -ftrack-macro-uitbreiding was aanwezig op
de opdrachtregel. Waarde 1 volgt tokens-locaties in een gedegradeerde modus omwille van
minimale geheugenoverhead. In deze modus zijn alle tokens die het gevolg zijn van de uitbreiding van een
argument van een functie-achtige macro hebben dezelfde locatie. Waarde 2 volgt tokens
locaties volledig. Deze waarde heeft de meeste geheugenhonger. Wanneer deze optie wordt gegeven
geen argument, de standaard parameterwaarde is 2.

-fexec-tekenset=karakterset
Stel de uitvoeringstekenset in, die wordt gebruikt voor tekenreeks- en tekenconstanten. De standaard
is UTF-8. karakterset kan elke codering zijn die wordt ondersteund door de "iconv" -bibliotheek van het systeem
routine.

-fwide-exec-charset=karakterset
Stel de tekenset voor brede uitvoering in, die wordt gebruikt voor brede tekenreeksen en tekenconstanten.
De standaardwaarde is UTF-32 of UTF-16, afhankelijk van wat overeenkomt met de breedte van "wchar_t". Als
Met -fexec-tekenset, karakterset kan elke codering zijn die wordt ondersteund door de "iconv" van het systeem
bibliotheekroutine; u zult echter problemen krijgen met coderingen die niet passen
precies in "wchar_t".

-finput-tekenset=karakterset
Stel de invoertekenset in, die wordt gebruikt voor vertaling van de tekenset van de invoer
bestand naar de brontekenset die door GCC wordt gebruikt. Als de landinstelling niet specificeert, of GCC
kan deze informatie niet uit de landinstelling halen, de standaardwaarde is UTF-8. Dit kan zijn
overschreven door de landinstelling of deze opdrachtregeloptie. Momenteel is het commando
regeloptie heeft voorrang als er een conflict is. karakterset kan elke codering zijn
ondersteund door de "iconv" bibliotheekroutine van het systeem.

-fworking-map
Activeer het genereren van lijnmarkeringen in de preprocessor-uitvoer waardoor de compiler
ken de huidige werkdirectory op het moment van voorverwerking. Wanneer deze optie is
ingeschakeld, zal de preprocessor, na de eerste lijnmarkering, een tweede lijnmarkering uitzenden
met de huidige werkdirectory gevolgd door twee schuine strepen. GCC zal dit gebruiken
directory, wanneer het aanwezig is in de voorverwerkte invoer, zoals de directory uitgezonden als
de huidige werkdirectory in sommige informatieformaten voor foutopsporing. Deze optie is
impliciet ingeschakeld als foutopsporingsinformatie is ingeschakeld, maar dit kan worden voorkomen met
de ontkende vorm -fno-werkmap. Indien de -P vlag is aanwezig in de opdracht
line, heeft deze optie geen effect, aangezien er geen "#line" instructies worden uitgezonden.

-fno-show-kolom
Druk geen kolomnummers af in diagnostiek. Dit kan nodig zijn als diagnostiek
wordt gescand door een programma dat de kolomnummers niet begrijpt, zoals:
dejagnu.

-A predikaat=beantwoorden
Maak een bewering met het predikaat predikaat en antwoord beantwoorden. Dit formulier is
voorkeur boven de oudere vorm -A predikaat(beantwoorden), die nog steeds wordt ondersteund, omdat het
gebruikt geen speciale shell-tekens.

-A -predikaat=beantwoorden
Annuleer een bewering met het predikaat predikaat en antwoord beantwoorden.

-dCHARS
KOSTEN is een reeks van een of meer van de volgende tekens, en mag niet zijn
voorafgegaan door een spatie. Andere karakters worden geïnterpreteerd door de eigenlijke compiler, of
gereserveerd voor toekomstige versies van GCC, en worden dus stilzwijgend genegeerd. Als u opgeeft:
karakters wiens gedrag conflicteert, het resultaat is ongedefinieerd.

M Genereer in plaats van de normale uitvoer een lijst met: #define richtlijnen voor alle
macro's gedefinieerd tijdens de uitvoering van de preprocessor, inclusief voorgedefinieerde
macro's. Dit geeft u een manier om erachter te komen wat vooraf is gedefinieerd in uw versie van
de preprocessor. Ervan uitgaande dat je geen bestand hebt foo.h, het bevel

raak foo.h aan; cpp -dM foo.h

toont alle vooraf gedefinieerde macro's.

Als u gebruik maken van -dM zonder de -E keuze, -dM wordt geïnterpreteerd als een synoniem voor
-fdump-rtl-mach.

D Like M behalve in twee opzichten: het doet niet de vooraf gedefinieerde macro's opnemen, en het
uitgangen zowel de #define richtlijnen en het resultaat van de voorbewerking. beide soorten
van uitvoer ga naar het standaard uitvoerbestand.

N Like D, maar zend alleen de macronamen uit, niet hun uitbreidingen.

I uitgang #include richtlijnen naast het resultaat van de voorbewerking.

U Like D behalve dat alleen macro's die zijn uitgevouwen of waarvan de definitie is getest
in preprocessor-richtlijnen worden uitgevoerd; de uitvoer wordt vertraagd tot het gebruik of
test van de macro; en #undef richtlijnen worden ook uitgevoerd voor geteste macro's, maar
destijds ongedefinieerd.

-P Verhinder het genereren van lijnmarkeringen in de uitvoer van de preprocessor. Dit zou kunnen zijn
handig bij het uitvoeren van de preprocessor op iets dat geen C-code is, en zal worden verzonden
naar een programma dat kan worden verward door de lijnmarkeringen.

-C Gooi opmerkingen niet weg. Alle opmerkingen worden doorgegeven aan het uitvoerbestand, behalve:
voor opmerkingen in verwerkte richtlijnen, die samen met de richtlijn worden verwijderd.

U moet voorbereid zijn op bijwerkingen bij gebruik -C; het zorgt ervoor dat de preprocessor
behandel opmerkingen als op zichzelf staande tokens. Opmerkingen die bijvoorbeeld verschijnen op de
begin van wat een richtlijn zou zijn, heeft tot gevolg dat die regel verandert in een
gewone bronregel, aangezien het eerste token op de regel niet langer een is #.

-CC Gooi geen opmerkingen weg, ook niet tijdens macro-uitbreiding. Dit is zoals -C, behalve
dat opmerkingen in macro's ook worden doorgegeven aan het uitvoerbestand waar
de macro wordt uitgevouwen.

Naast de bijwerkingen van de -C optie, de -CC optie veroorzaakt alle C++-stijl
opmerkingen in een macro die moeten worden geconverteerd naar opmerkingen in C-stijl. Dit is om later te voorkomen
gebruik van die macro om onbedoeld commentaar te geven op de rest van de bronregel.

De -CC optie wordt over het algemeen gebruikt om lint-opmerkingen te ondersteunen.

-traditionele-cpp
Probeer het gedrag van ouderwetse C-preprocessors te imiteren, in tegenstelling tot ISO C
voorverwerkers.

-trigrafieën
Trigraph-reeksen verwerken. Dit zijn reeksen van drie tekens, die allemaal beginnen met
??, die door ISO C zijn gedefinieerd om te staan ​​voor enkele tekens. Bijvoorbeeld, ??/ staat
For \, dus '??/N' is een karakterconstante voor een nieuwe regel. GCC negeert standaard
trigraphs, maar in standaardconforme modi converteert het ze. Zie de -soa en -ansi
opties.

De negen trigraphs en hun vervangingen zijn

Trigraaf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Vervanging: [ ] { } # \ ^ | ~

-opnieuw toewijzen
Schakel speciale code in om bestandssystemen te omzeilen die alleen zeer korte bestanden toestaan
namen, zoals MS-DOS.

--help
--doel-hulp
Druk tekst af die alle opdrachtregelopties beschrijft in plaats van iets voor te verwerken.

-v Uitgebreide modus. Druk het versienummer van GNU CPP af aan het begin van de uitvoering, en
rapporteer de definitieve vorm van het include-pad.

-H Druk de naam af van elk gebruikt headerbestand, naast andere normale activiteiten. Elk
naam is ingesprongen om aan te geven hoe diep in de #include stapel is het. Voorgecompileerde kop
bestanden worden ook afgedrukt, zelfs als ze ongeldig blijken te zijn; een ongeldige voorgecompileerde
header-bestand wordt afgedrukt met ...X en een geldige met ...! .

-versie
--versie
Print het versienummer van GNU CPP uit. Ga met één streepje door met voorbewerken zoals normaal.
Met twee streepjes, verlaat onmiddellijk.

Voorbijgaand Opties naar de Assembler
U kunt opties doorgeven aan de assembler.

-Wah,optie
Passeren optie als optie voor de monteur. Indien optie bevat komma's, het is gesplitst
in meerdere opties bij de komma's.

-Xmonteur optie
Passeren optie als optie voor de monteur. Hiermee kunt u systeemspecifiek aanleveren
assembler-opties die GCC niet weet te herkennen.

Als u een optie wilt doorgeven waarvoor een argument nodig is, moet u gebruiken -Xmonteur tweemaal,
een keer voor de optie en een keer voor het argument.

Opties For Koppelen
Deze opties komen in het spel wanneer de compiler objectbestanden koppelt aan een uitvoerbaar bestand
uitvoer bestand. Ze zijn zinloos als de compiler geen linkstap uitvoert.

object-bestandsnaam
Een bestandsnaam die niet eindigt op een speciaal herkend achtervoegsel wordt beschouwd als een naam
objectbestand of bibliotheek. (Objectbestanden worden onderscheiden van bibliotheken door de linker
volgens de bestandsinhoud.) Als het koppelen is gedaan, worden deze objectbestanden gebruikt als:
invoer naar de linker.

-c
-S
-E Als een van deze opties wordt gebruikt, wordt de linker niet uitgevoerd en worden objectbestandsnamen
mogen niet als argument worden gebruikt.

-lbibliotheek
-l bibliotheek
Zoek in de bibliotheek met de naam bibliotheek bij het koppelen. (Het tweede alternatief met de
bibliotheek als afzonderlijk argument is alleen voor POSIX-compliance en wordt niet aanbevolen.)

Het maakt verschil waar in het commando je deze optie schrijft; de linker zoekt
en verwerkt bibliotheken en objectbestanden in de volgorde waarin ze zijn opgegeven. Dus, foo.o
-lz bar.o doorzoekt bibliotheek z na bestand foo.o maar voorheen bar.o. Indien bar.o verwijst naar
functies in z, kunnen die functies mogelijk niet worden geladen.

De linker doorzoekt een standaardlijst met mappen voor de bibliotheek, wat eigenlijk is:
een bestand met de naam bibliotheek.a. De linker gebruikt dit bestand dan alsof het gespecificeerd was
precies op naam.

De doorzochte mappen bevatten verschillende standaard systeemmappen plus alle mappen die u
specificeren met -L.

Normaal gesproken zijn de bestanden die op deze manier worden gevonden bibliotheekbestanden --- archiefbestanden waarvan de leden zijn
object bestanden. De linker verwerkt een archiefbestand door er doorheen te scannen op leden
die symbolen definiëren waarnaar tot nu toe is verwezen maar die niet zijn gedefinieerd. Maar als de
bestand dat wordt gevonden een gewoon objectbestand is, is het op de gebruikelijke manier gekoppeld. De
enige verschil tussen het gebruik van een -l optie en het specificeren van een bestandsnaam is dat -l
omringt bibliotheek Met lib en .a en doorzoekt verschillende mappen.

-lobjc
Je hebt dit speciale geval van de -l optie om een ​​Objective-C of . te koppelen
Objective-C++ programma.

-nostartbestanden
Gebruik bij het koppelen niet de standaard opstartbestanden van het systeem. Het standaard systeem
bibliotheken worden normaal gebruikt, tenzij -nostlib or -nodefaultlibs is gebruikt.

-nodefaultlibs
Gebruik bij het koppelen niet de standaard systeembibliotheken. Alleen de bibliotheken die u opgeeft
worden doorgegeven aan de linker, opties die de koppeling van de systeembibliotheken specificeren, zoals
als "-static-libgcc" of "-shared-libgcc", wordt genegeerd. De standaard opstartbestanden
worden normaal gebruikt, tenzij -nostartbestanden is gebruikt. De compiler kan oproepen genereren naar
"memcmp", "memset", "memcpy" en "memmove". Deze vermeldingen worden meestal opgelost door
vermeldingen in libc. Deze toegangspunten moeten via een ander mechanisme worden geleverd
wanneer deze optie is opgegeven.

-nostlib
Gebruik bij het koppelen niet de standaard opstartbestanden of bibliotheken van het systeem. Geen opstart
bestanden en alleen de bibliotheken die u opgeeft, worden doorgegeven aan de linker, options
specificeren van de koppeling van de systeembibliotheken, zoals "-static-libgcc" of
"-shared-libgcc", wordt genegeerd. De compiler kan oproepen genereren naar "memcmp",
"memset", "memcpy" en "memmove". Deze vermeldingen worden meestal opgelost door vermeldingen in
libc. Deze ingangspunten moeten via een ander mechanisme worden geleverd wanneer dit
optie is opgegeven.

Een van de standaardbibliotheken omzeild door -nostlib en -nodefaultlibs is libgcc.a, een
bibliotheek van interne subroutines die GCC gebruikt om tekortkomingen van bepaalde
machines, of speciale behoeften voor sommige talen.

In de meeste gevallen heb je nodig: libgcc.a zelfs als u andere standaardbibliotheken wilt vermijden.
Met andere woorden, wanneer u specificeert -nostlib or -nodefaultlibs normaal gesproken zou je
specificeren -lgcc ook. Dit zorgt ervoor dat u geen onopgeloste verwijzingen heeft naar:
interne subroutines van de GCC-bibliotheek. (Bijvoorbeeld, __hoofd, gebruikt om C++ te garanderen
constructors worden genoemd.)

-taart
Produceer een positie-onafhankelijk uitvoerbaar bestand op doelen die dit ondersteunen. Voor voorspelbaar
resultaten, moet u ook dezelfde set opties opgeven die werden gebruikt om code te genereren
(-fpie, -fPIE, of modelsubopties) wanneer u deze optie opgeeft.

-rdynamisch
Geef de vlag door -export-dynamisch naar de ELF-linker, op doelen die dit ondersteunen. Dit
instrueert de linker om alle symbolen, niet alleen gebruikte, toe te voegen aan het dynamische symbool
tafel. Deze optie is nodig voor sommige toepassingen van "dlopen" of om het verkrijgen van
backtraces vanuit een programma.

-s Verwijder alle symbooltabel en verplaatsingsinformatie uit het uitvoerbare bestand.

-statisch
Op systemen die dynamische koppeling ondersteunen, voorkomt dit koppeling met de gedeelde
bibliotheken. Op andere systemen heeft deze optie geen effect.

-gedeeld
Produceer een gedeeld object dat vervolgens kan worden gekoppeld aan andere objecten om een
uitvoerbaar. Niet alle systemen ondersteunen deze optie. Voor voorspelbare resultaten moet u:
specificeer ook dezelfde set opties die werden gebruikt om code te genereren (-fpic, -fPICof
model subopties) wanneer u deze optie opgeeft.[1]

-gedeelde-libgcc
-statisch-libgcc
Op systemen die: libgcc als een gedeelde bibliotheek dwingen deze opties het gebruik van
respectievelijk de gedeelde of statische versie. Als er geen gedeelde versie van libgcc was
gebouwd toen de compiler werd geconfigureerd, hebben deze opties geen effect.

Er zijn verschillende situaties waarin een toepassing de gedeelde libgcc
in plaats van de statische versie. De meest voorkomende hiervan is wanneer de toepassing
uitzonderingen wil gooien en vangen in verschillende gedeelde bibliotheken. In dat geval,
elk van de bibliotheken en de toepassing zelf zouden de gedeelde libgcc.

Daarom worden de G++- en GCJ-stuurprogramma's automatisch toegevoegd -gedeelde-libgcc wanneer je bouwt
een gedeelde bibliotheek of een uitvoerbaar hoofdbestand, omdat C++- en Java-programma's doorgaans gebruik maken van
uitzonderingen, dus dit is het juiste om te doen.

Als u in plaats daarvan het GCC-stuurprogramma gebruikt om gedeelde bibliotheken te maken, kan het zijn dat ze
zal niet altijd gekoppeld zijn aan het gedeelde libgcc. Als GCC vindt, in zijn configuratie
keer dat je een niet-GNU-linker hebt of een GNU-linker die de optie niet ondersteunt
--eh-frame-hdr, zal het de gedeelde versie van koppelen libgcc in gedeelde bibliotheken door
standaard. Anders profiteert het van de linker en optimaliseert het de
linken met de gedeelde versie van libgcc, gekoppeld aan de statische versie van libgcc
standaard. Hierdoor kunnen uitzonderingen zich verspreiden via dergelijke gedeelde bibliotheken,
zonder verhuiskosten tijdens het laden van de bibliotheek.

Als een bibliotheek of hoofduitvoerbaar bestand echter uitzonderingen moet genereren of opvangen, moet u
moet het koppelen met behulp van het G++- of GCJ-stuurprogramma, afhankelijk van de talen die worden gebruikt in de
programma, of gebruik de optie -gedeelde-libgcc, zodat het is gekoppeld aan de gedeelde
libgcc.

-statische-libstdc++
Wanneer de g ++ programma wordt gebruikt om een ​​C++-programma te koppelen, gebeurt dit normaal gesproken automatisch
koppeling tegen libstdc++. Indien libstdc++ is beschikbaar als een gedeelde bibliotheek, en de
-statisch optie niet wordt gebruikt, dan wordt deze gekoppeld aan de gedeelde versie van
libstdc++. Dat is normaal gesproken prima. Het is echter soms handig om de
versie libstdc++ gebruikt door het programma zonder helemaal naar een volledig statisch te gaan
koppeling. De -statische-libstdc++ optie stuurt de g ++ stuurprogramma om te linken libstdc++
statisch, zonder noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-symbolisch
Bind verwijzingen naar globale symbolen bij het bouwen van een gedeeld object. Waarschuw voor eventuele
onopgeloste verwijzingen (tenzij overschreven door de optie van de linkeditor) -Xlinker -z
-Xlinker defs). Slechts enkele systemen ondersteunen deze optie.

-T script
Te gebruiken script als het linkerscript. Deze optie wordt ondersteund door de meeste systemen die gebruikmaken van de
GNU-linker. Op sommige doelen, zoals bare-board doelen zonder besturingssysteem,
de -T optie kan nodig zijn bij het koppelen om verwijzingen naar ongedefinieerde symbolen te voorkomen.

-Xlinker optie
Passeren optie als een optie voor de linker. Hiermee kunt u systeemspecifiek aanleveren
linker-opties die GCC niet herkent.

Als u een optie wilt doorgeven waarvoor een apart argument nodig is, moet u gebruiken -Xlinker
twee keer, een keer voor de optie en een keer voor het argument. Om bijvoorbeeld te slagen -beweren
definities, je moet schrijven -Xlinker -beweren -Xlinker definities. Het werkt niet
schrijven -Xlinker "-beweren definities", omdat dit de hele string doorgeeft als a
enkel argument, wat niet is wat de linker verwacht.

Bij gebruik van de GNU-linker is het meestal handiger om argumenten door te geven aan linker
opties met behulp van de optie=waarde syntaxis dan als afzonderlijke argumenten. Bijvoorbeeld, jij
kan specificeren -Xlinker -Map=uitvoer.map dan -Xlinker -Kaart -Xlinker uitvoer.map.
Andere linkers ondersteunen deze syntaxis mogelijk niet voor opdrachtregelopties.

-Wl,optie
Passeren optie als een optie voor de linker. Indien optie bevat komma's, het is opgesplitst in
meerdere opties bij de komma's. U kunt deze syntaxis gebruiken om een ​​argument door te geven aan de
keuze. Bijvoorbeeld, -Wl, -Map,output.map passes -Kaart uitvoer.map naar de koppelaar. Wanneer
met behulp van de GNU-linker kun je hetzelfde effect krijgen met: -Wl,-Map=uitvoer.kaart.

OPMERKING: In Ubuntu 8.10 en latere versies, voor LDFLAGS, is de optie: -Wl,-z,relro is gebruikt.
Gebruik . om uit te schakelen -Wl,-z,norelro.

-u symbool
Doe alsof het symbool symbool is ongedefinieerd, om het koppelen van bibliotheekmodules te forceren om te definiëren
het. Je kunt gebruiken -u meerdere keren met verschillende symbolen om het laden van . te forceren
extra bibliotheekmodules.

Opties For Directory Ontdek
Deze opties specificeren mappen om te zoeken naar header-bestanden, naar bibliotheken en naar onderdelen
van de compiler:

-Idir
Voeg de map toe dir naar de kop van de lijst met mappen waarnaar moet worden gezocht header
bestanden. Dit kan worden gebruikt om een ​​systeemkoptekstbestand te overschrijven, ter vervanging van uw eigen bestand
versie, aangezien deze mappen worden doorzocht vóór het systeemkopbestand
mappen. Gebruik deze optie echter niet om mappen toe te voegen die:
door de leverancier geleverde systeemkopbestanden (gebruik -isysteem daarom). Als u er meer dan één gebruikt
-I optie, de mappen worden in de volgorde van links naar rechts gescand; het standaard systeem
mappen komen erna.

Als een standaardsysteem een ​​directory bevat, of een directory gespecificeerd met -isysteemIs
ook gespecificeerd met -I -I optie wordt genegeerd. De directory zal nog steeds zijn
doorzocht maar als een systeemdirectory op zijn normale positie in de systeemketen.
Dit is om ervoor te zorgen dat GCC's procedure om buggy-systeemheaders en de bestelling op te lossen
voor de include_next richtlijn worden niet per ongeluk gewijzigd. Als het echt nodig is
verander de zoekvolgorde voor systeemmappen, gebruik de -nostdinc en / of -isysteem
opties.

-iplugindir=dir
Stel de map in om te zoeken naar plug-ins die worden doorgegeven -fplugin=naam in plaats van
-fplugin=pad/naam.zo. Deze optie is niet bedoeld om door de gebruiker te worden gebruikt, maar alleen
voorbij de chauffeur.

-ikquotedir
Voeg de map toe dir naar de kop van de lijst met mappen waarnaar moet worden gezocht header
bestanden alleen voor het geval van #include "filet"; er wordt niet naar gezocht #include <filet>,
anders gewoon leuk -I.

-Ldir
Directory toevoegen dir naar de lijst met te zoeken mappen -l.

-Bvoorvoegsel
Deze optie geeft aan waar de uitvoerbare bestanden, bibliotheken, include-bestanden en
gegevensbestanden van de compiler zelf.

Het compilerstuurprogramma voert een of meer van de subprogramma's uit cpp, cc1, as en ld.
Het probeert voorvoegsel als een prefix voor elk programma dat het probeert uit te voeren, zowel met als zonder
machine/versie/.

Voor elk subprogramma dat moet worden uitgevoerd, probeert het compilerstuurprogramma eerst de -B voorvoegsel, indien aanwezig.
Als die naam niet wordt gevonden, of als -B niet is opgegeven, probeert de bestuurder twee standaard
voorvoegsels, /usr/lib/gcc/ en /usr/local/lib/gcc/. Als geen van beide resulteert in een
bestandsnaam die wordt gevonden, wordt gezocht naar de ongewijzigde programmanaam met behulp van de
mappen gespecificeerd in uw PATH variabele omgeving.

De compiler controleert of het pad dat door de -B verwijst naar een map,
en indien nodig zal het een mapscheidingsteken toevoegen aan het einde van het pad.

-B voorvoegsels die effectief directorynamen specificeren, zijn ook van toepassing op bibliotheken in de
linker, omdat de compiler deze opties vertaalt naar: -L opties voor de linker.
Ze zijn ook van toepassing op het opnemen van bestanden in de preprocessor, omdat de compiler vertaalt
deze opties in -isysteem opties voor de preprocessor. In dit geval is de compiler
voegt omvatten naar het voorvoegsel.

Het runtime-ondersteuningsbestand libgcc.a kan ook worden gezocht met behulp van de -B voorvoegsel, als
nodig zijn. Als het daar niet wordt gevonden, worden de twee standaardvoorvoegsels hierboven geprobeerd, en dat
is alles. Het bestand wordt weggelaten uit de link als het niet op die manier wordt gevonden.

Een andere manier om een ​​voorvoegsel op te geven dat veel lijkt op de -B voorvoegsel is om de omgeving te gebruiken
variabele GCC_EXEC_PREFIX.

Als een speciale kludge, als het pad voorzien door -B is [dir/]podiumN/, Waar N is een nummer
in het bereik van 0 tot 9, dan wordt het vervangen door [dir/]inclusief. Dit is om mee te helpen
boot-strapping van de compiler.

-specificaties=filet
Proces filet nadat de compiler de standaard heeft ingelezen bril bestand, om te overschrijven
de standaardinstellingen die de gcc driverprogramma gebruikt bij het bepalen welke schakelaars moeten worden doorgegeven
naar cc1, cc1plus, as, ld, enz. Meer dan één -specificaties=filet kan worden opgegeven op de
opdrachtregel, en ze worden in volgorde van links naar rechts verwerkt.

--sysroot=dir
Te gebruiken dir als de logische hoofdmap voor headers en bibliotheken. Als bijvoorbeeld de
compiler zou normaal gesproken zoeken naar headers in / Usr / include en bibliotheken in / Usr / lib,
het zal in plaats daarvan zoeken dir/usr/include en dir/usr/lib.

Als u zowel deze optie als de -isysroot optie, dan de --sysroot optie zal
gelden voor bibliotheken, maar de -isysroot optie is van toepassing op headerbestanden.

De GNU-linker (vanaf versie 2.16) heeft hiervoor de nodige ondersteuning
optie. Als uw linker deze optie niet ondersteunt, is het headerbestandsaspect van
--sysroot zal nog steeds werken, maar het bibliotheekaspect niet.

-IK- Deze optie is afgeschaft. Gebruik alstublieft -ikquote inplaats van -I mappen voor
de -IK- en verwijder het -IK-. Alle mappen die u opgeeft met -I opties voor de
-IK- optie worden alleen gezocht in het geval van #include "filet"; ze worden niet gezocht
For #include <filet>.

Als er extra mappen zijn opgegeven met -I opties na de -IK-Deze
mappen worden doorzocht op alle #include richtlijnen. (Gewoonlijk allen -I directories
worden op deze manier gebruikt.)

Bovendien, de -IK- optie verbiedt het gebruik van de huidige map (waar de
huidige invoerbestand vandaan kwam) als de eerste zoekdirectory voor #include "filet".
Er is geen manier om dit effect van -IK-. Met -IK. u kunt zoeken specificeren
de map die actueel was toen de compiler werd aangeroepen. Dat is niet precies de
hetzelfde als wat de preprocessor standaard doet, maar het is vaak bevredigend.

-IK- belet het gebruik van de standaard systeemdirectory's voor headerbestanden niet.
Aldus -IK- en -nostdinc zijn onafhankelijk.

opgeven doelwit Machine en Compiler Versie
De gebruikelijke manier om GCC uit te voeren is door het uitvoerbare bestand genaamd gccof machine-gcc wanneer kruis-
compileren, of machine-gcc-versie om een ​​andere versie uit te voeren dan degene die is geïnstalleerd
laatste.

Hardware Modellen en Configuraties
Elk type doelmachine kan zijn eigen speciale opties hebben, te beginnen met -m, kiezen
tussen verschillende hardwaremodellen of configuraties --- bijvoorbeeld 68010 vs 68020, zwevend
coprocessor of geen. Een enkele geïnstalleerde versie van de compiler kan voor elk model compileren
of configuratie, volgens de gespecificeerde opties.

Sommige configuraties van de compiler ondersteunen ook extra speciale opties, meestal voor:
compatibiliteit met andere compilers op hetzelfde platform.

Adapteva Driekoningen Opties

Deze -m opties zijn gedefinieerd voor Adapteva Epiphany:

-mhalf-reg-bestand
Wijs geen enkel register toe in het bereik "r32"..."r63". Waardoor code kan draaien
hardwarevarianten die deze registers niet hebben.

-mprefer-short-insn-regs
Wijs bij voorkeur registers toe die het genereren van korte instructies mogelijk maken. Dit kan
resulteren in een groter aantal instructies, dus als dit de codegrootte verkleint of vergroot
kan van geval tot geval verschillen.

-mbranch-kosten=num
Stel de kosten van filialen in op ongeveer num "eenvoudige" instructies. Deze kosten zijn slechts een
heuristiek en levert niet gegarandeerd consistente resultaten op voor alle releases.

-mcverplaatsen
Schakel het genereren van voorwaardelijke zetten in.

-mnops=num
Uitzenden num nops voor elke andere gegenereerde instructie.

-mno-zacht-cmpsf
Voor single-precision floating-point vergelijkingen, zendt u een fsub-instructie uit en test u de
vlaggen. Dit is sneller dan een softwarevergelijking, maar kan onjuiste resultaten opleveren
de aanwezigheid van NaN's, of wanneer twee verschillende kleine getallen zodanig worden vergeleken dat hun
verschil wordt berekend als nul. De standaardwaarde is -msoft-cmpsf, die langzamer gebruikt, maar
IEEE-compatibel, softwarevergelijkingen.

-mstack-offset=num
Stel de offset in tussen de bovenkant van de stapel en de stapelaanwijzer. Bijv. een waarde van 8
betekent dat de acht bytes in het bereik sp+0...sp+7 kunnen worden gebruikt door bladfuncties
zonder stapeltoewijzing. Andere waarden dan 8 or 16 zijn niet getest en het is onwaarschijnlijk dat
werk. Merk ook op dat deze optie de ABI verandert door een programma samen te stellen met een
een andere stapeloffset dan waarmee de bibliotheken zijn gecompileerd, is dat over het algemeen niet
werk. Deze optie kan handig zijn als u wilt evalueren of een andere stapel-offset
zou je betere code geven, maar om daadwerkelijk een andere stack-offset te gebruiken om te bouwen
werkende programma's, wordt aanbevolen om de toolchain te configureren met de juiste
--met-stack-offset=num optie.

-mno-ronde-dichtstbijzijnde
Laat de planner aannemen dat de afrondingsmodus is ingesteld op afkappen. De
standaard is -mround-dichtstbijzijnde.

-mlong-oproepen
Als niet anders gespecificeerd door een attribuut, neem aan dat alle aanroepen mogelijk buiten de vallen
offsetbereik van de b/bl-instructies en laad daarom het functieadres in
een register voordat u een (anderszins directe) oproep uitvoert. Dit is de standaardinstelling.

-mkorte-oproepen
Indien niet anders gespecificeerd door een attribuut, neem aan dat alle directe oproepen binnen het bereik vallen
van de b/bl instructies, dus gebruik deze instructies voor directe oproepen. De standaard
is -mlong-oproepen.

-mklein16
Neem aan dat adressen kunnen worden geladen als 16-bits waarden zonder teken. Dit geldt niet voor
functie adressen waarvoor -mlong-oproepen semantiek is van kracht.

-mfp-modus=mode
Stel de heersende modus van de drijvende-kommaeenheid in. Dit bepaalt de drijvende-
puntmodus die wordt verstrekt en verwacht bij functieaanroep en terugkeertijd. Maken
deze modus komt overeen met de modus die u voornamelijk nodig hebt bij het starten van de functie, kan uw
programma's kleiner en sneller door onnodige modusschakelaars te vermijden.

mode kan worden ingesteld op een van de volgende waarden:

bezoeker
Elke modus bij het invoeren van een functie is geldig en wordt behouden of hersteld wanneer de functie
retourneert en wanneer het andere functies aanroept. Deze modus is handig voor het compileren
bibliotheken of andere compilatie-eenheden die u misschien in verschillende
programma's met verschillende heersende FPU-modi, en het gemak van het kunnen:
gebruik een enkel objectbestand weegt zwaarder dan de grootte en snelheid overhead voor elke extra modus
schakelen die nodig zou kunnen zijn, vergeleken met wat nodig zou zijn met een meer
specifieke keuze van de heersende FPU-modus.

afkappen
Dit is de modus die wordt gebruikt voor berekeningen met drijvende komma met afkappen (dwz rond
richting nul) afrondingsmodus. Dat omvat conversie van drijvende komma naar
geheel getal.

rond-dichtstbijzijnde
Dit is de modus die wordt gebruikt voor berekeningen met drijvende komma met afronding naar dichtstbijzijnde of
zelfs afrondingsmodus.

int Dit is de modus die wordt gebruikt om integer-berekeningen uit te voeren in de FPU, bijv. integer
vermenigvuldigen, of integer vermenigvuldigen-en-accumuleren.

De standaard is -mfp-mode=beller

-mnosplit-lohi
-mno-postinc
-mno-postmodify
Tweaks voor het genereren van codes die respectievelijk het splitsen van 32-bits belastingen uitschakelen,
generatie van post-increment adressen, en generatie van post-modify adressen. De
standaardinstellingen zijn msplit-lohi, -mpost-inc en -mpost-wijzigen.

-mnovect-dubbel
Wijzig de gewenste SIMD-modus in SI-modus. De standaard is -mvect-dubbel, Die gebruikt
DImode als voorkeur SIMD-modus.

-max-vect-align=num
De maximale uitlijning voor SIMD-vectormodustypen. num kan 4 of 8 zijn. De standaard is
8. Houd er rekening mee dat dit een ABI-wijziging is, hoewel veel bibliotheekfunctie-interfaces dat wel zullen doen
worden niet beïnvloed als ze geen SIMD-vectormodi gebruiken op plaatsen waar ze de grootte beïnvloeden
en/of afstemming van relevante typen.

-msplit-vecmove-vroeg
Splits vectorbewegingen in bewegingen van één woord voordat ze opnieuw worden geladen. In theorie zou dit kunnen geven
betere registerallocatie, maar tot dusver lijkt het omgekeerde het geval te zijn.

-m1reg-reg
Specificeer een register om de constante -1 vast te houden, waardoor het laden klein negatief wordt
constanten en bepaalde bitmaskers sneller. Toegestane waarden voor reg zijn r43 en r63,
die specificeren om dat register als een vast register te gebruiken, en geen, wat betekent dat nee
Hiervoor wordt gebruik gemaakt van register. De standaard is -m1reg-geen.

Arch64 Opties

Deze opties zijn gedefinieerd voor AArch64-implementaties:

-mbig-endian
Genereer big-endian-code. Dit is de standaard wanneer GCC is geconfigureerd voor een
aarch64_be-*-* doelwit.

-mgeneral-regs-only
Genereer code die alleen de algemene registers gebruikt.

-mlittle-endian
Genereer little-endian-code. Dit is de standaard wanneer GCC is geconfigureerd voor een
aarch64-*-* maar niet een aarch64_be-*-* doelwit.

-mcmodel=klein
Genereer code voor het kleine codemodel. Het programma en de statisch gedefinieerde symbolen
moeten binnen 1 GB van elkaar liggen. Pointers zijn 64 bits. Programma's kunnen statisch zijn
of dynamisch gekoppeld. Dit model is niet volledig geïmplementeerd en wordt meestal behandeld als:
"klein".

-mcmodel=klein
Genereer code voor het kleine codemodel. Het programma en zijn statisch gedefinieerde
symbolen moeten zich binnen 4 GB van elkaar bevinden. Pointers zijn 64 bits. Programma's kunnen
statisch of dynamisch gekoppeld. Dit is het standaard codemodel.

-mcmodel=groot
Genereer code voor het grote codemodel. Dit maakt geen aannames over adressen en
maten van secties. Pointers zijn 64 bits. Programma's kunnen alleen statisch worden gekoppeld.

-mstrict-uitlijnen
Ga er niet vanuit dat niet-uitgelijnde geheugenreferenties door het systeem worden verwerkt.

-momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer
Laat de frame-aanwijzer weg of bewaar deze in bladfuncties. Het eerste gedrag is de
standaard.

-mtls-dialect=besch
Gebruik TLS-descriptors als het thread-local opslagmechanisme voor dynamische toegang tot TLS
variabelen. Dit is de standaardinstelling.

-mtls-dialect=traditioneel
Gebruik traditionele TLS als het thread-local opslagmechanisme voor dynamische toegang tot TLS
variabelen.

-maart=naam
Specificeer de naam van de doelarchitectuur, eventueel achtervoegsel met een of meer
functie modifiers. Deze optie heeft de vorm -maart=boog{+[geen]kenmerken}*, waar de
enige waarde voor boog is armv8-a. De mogelijke waarden voor kenmerken zijn gedocumenteerd in de
subsectie hieronder.

Waar conflicterende feature modifiers zijn gespecificeerd, wordt de meest rechtse feature gebruikt.

GCC gebruikt deze naam om te bepalen wat voor soort instructies het kan uitzenden bij het genereren
montagecode. Deze optie kan worden gebruikt in combinatie met of in plaats van de -mcpu=
optie.

-mcpu=naam
Specificeer de naam van de doelprocessor, eventueel aangevuld met een of meer functies
modificatoren. Deze optie heeft de vorm -mcpu=cpu{+[geen]kenmerken}*, waar mogelijk
waarden voor cpu zijn algemeen, Groot. De mogelijke waarden voor kenmerken zijn gedocumenteerd in
onderstaande subsectie.

Waar conflicterende feature modifiers zijn gespecificeerd, wordt de meest rechtse feature gebruikt.

GCC gebruikt deze naam om te bepalen wat voor soort instructies het kan uitzenden bij het genereren
montagecode.

-mtune=naam
Geef de naam op van de processor waarop u de prestaties wilt afstemmen. De code wordt afgestemd
alsof de doelprocessor van het type is dat in deze optie is gespecificeerd, maar nog steeds gebruik maakt van
instructies die compatibel zijn met de doelprocessor gespecificeerd door a -mcpu= optie. Deze
optie kan niet worden achtervoegd door functiemodifiers.

-maart en -mcpu functie modifiers

Functiemodifiers gebruikt met -maart en -mcpu kan een van de volgende zijn:

crypto
Schakel de Crypto-extensie in. Dit houdt in dat Advanced SIMD is ingeschakeld.

fp Instructies met drijvende komma inschakelen.

simd
Geavanceerde SIMD-instructies inschakelen. Dit houdt in dat drijvende-komma-instructies zijn
ingeschakeld. Dit is de standaard voor alle huidige mogelijke waarden voor opties -maart en
-mcpu=.

ARM Opties

Deze -m opties zijn gedefinieerd voor Advanced RISC Machines (ARM)-architecturen:

-mabi=naam
Genereer code voor de opgegeven ABI. Toegestane waarden zijn: apcs-gnu, bij stuks, aapc's,
aapcs-linux en iwmmxt.

-maps-frame
Genereer een stapelframe dat voldoet aan de ARM Procedure Call Standard voor iedereen
functies, ook als dit niet strikt noodzakelijk is voor een correcte uitvoering van de code.
opgeven -fomit-frame-aanwijzer met deze optie zullen de stapelframes dat niet zijn
gegenereerd voor bladfuncties. De standaard is -mno-apcs-frame.

-kaarten
Dit is een synoniem voor -maps-frame.

-mthumb-interactie
Genereer code die het bellen tussen de ARM- en Thumb-instructiesets ondersteunt.
Zonder deze optie kunnen de twee instructiesets op pre-v5-architecturen niet worden
betrouwbaar gebruikt binnen één programma. De standaard is -mno-duim-interwork, sinds een beetje
grotere code wordt gegenereerd wanneer: -mthumb-interactie is gespecificeerd. In AAPCS-configuraties
deze optie is zinloos.

-mno-sched-proloog
Voorkom het opnieuw ordenen van instructies in de functie-proloog, of het samenvoegen van
die instructie met de instructies in de body van de functie. Dit betekent dat alle
functies beginnen met een herkenbare set instructies (of in feite een van een
keuze uit een kleine set van verschillende functieprologen), en deze informatie kan zijn
gebruikt om de start if-functies in een uitvoerbaar stuk code te lokaliseren. De standaard
is -msched-proloog.

-mfloat-abi=naam
Specificeert welke ABI met drijvende komma moet worden gebruikt. Toegestane waarden zijn: zacht, zachtfp en
hard.

opgeven zacht zorgt ervoor dat GCC uitvoer genereert met bibliotheekaanroepen voor zwevende-
punt operaties. zachtfp maakt het genereren van code mogelijk met behulp van hardware floating-point
instructies, maar gebruikt nog steeds de soft-float-aanroepconventies. hard toestaat
het genereren van drijvende-komma-instructies en maakt gebruik van FPU-specifieke aanroepconventies.

De standaard is afhankelijk van de specifieke doelconfiguratie. Merk op dat de hard-float
en soft-float ABI's zijn niet link-compatibel; je moet je hele programma compileren met
dezelfde ABI en link met een compatibele set bibliotheken.

-mlittle-endian
Genereer code voor een processor die in de little-endian-modus draait. Dit is de standaard voor
alle standaardconfiguraties.

-mbig-endian
Genereer code voor een processor die in big-endian-modus draait; de standaard is om te compileren
code voor een little-endian processor.

-mwords-little-endian
Deze optie is alleen van toepassing bij het genereren van code voor big-endian processors. genereren
code voor een little-endian woordvolgorde maar een big-endian bytevolgorde. Dat wil zeggen, een byte
volgorde van het formulier 32107654. Opmerking: deze optie mag alleen worden gebruikt als u dat nodig heeft:
compatibiliteit met code voor big-endian ARM-processors gegenereerd door versies van de
compiler voor 2.8. Deze optie is nu verouderd.

-maart=naam
Dit specificeert de naam van de doel-ARM-architectuur. GCC gebruikt deze naam om
bepalen wat voor soort instructies het kan uitzenden bij het genereren van assemblagecode. Dit
optie kan worden gebruikt in combinatie met of in plaats van de -mcpu= optie. toegestaan
namen zijn: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, iwmmxt, iwmmxt2, ep9312.

-maart=inheems zorgt ervoor dat de compiler de architectuur van de build automatisch detecteert
computer. Op dit moment wordt deze functie alleen ondersteund op Linux, en niet op alle
architecturen worden herkend. Als de automatische detectie niet is gelukt, heeft de optie geen
effect.

-mtune=naam
Deze optie specificeert de naam van de doel-ARM-processor waarop GCC moet afstemmen
de prestaties van de code. Voor sommige ARM-implementaties kunnen betere prestaties zijn:
verkregen door deze optie te gebruiken. Toegestane namen zijn: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, sterke arm, sterke arm110, sterke arm1100,
sterke arm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8, cortex-a9,
cortex-a15, cortex-r4, cortex-r4f, cortex-r5, cortex-m4, cortex-m3, cortex-m1,
cortex-m0, xschaal, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=generiek-boog specificeert dat GCC de prestaties moet afstemmen op een mix van:
processors binnen architectuur boog. Het doel is om code te genereren die goed draait op de
huidige meest populaire processors, balancerend tussen optimalisaties die sommigen ten goede komen
CPU's in het bereik, en het vermijden van prestatievalkuilen van andere CPU's. De effecten van
deze optie kan in toekomstige GCC-versies veranderen naarmate CPU-modellen komen en gaan.

-mtune=native zorgt ervoor dat de compiler de CPU van de buildcomputer automatisch detecteert. Bij
aanwezig, wordt deze functie alleen ondersteund op Linux en niet op alle architecturen
erkend. Als de automatische detectie niet is gelukt, heeft de optie geen effect.

-mcpu=naam
Dit specificeert de naam van de doel-ARM-processor. GCC gebruikt deze naam om de . af te leiden
naam van de doel-ARM-architectuur (alsof gespecificeerd door -maart) en de ARM-processor
type waarop moet worden afgestemd voor uitvoering (alsof gespecificeerd door -mtune). Waar deze optie
wordt gebruikt in combinatie met -maart or -mtune, hebben die opties voorrang op de
geschikt onderdeel van deze optie.

Toegestane namen voor deze optie zijn dezelfde als die voor -mtune.

-mcpu=generiek-boog is ook toegestaan, en is gelijk aan -maart=boog
-mtune=generiek-boog. Zien -mtune voor meer informatie.

-mcpu=natief zorgt ervoor dat de compiler de CPU van de buildcomputer automatisch detecteert. Bij
aanwezig, wordt deze functie alleen ondersteund op Linux en niet op alle architecturen
erkend. Als de automatische detectie niet is gelukt, heeft de optie geen effect.

-mfpu=naam
-mfpe=aantal
-mfp=aantal
Dit specificeert op welke drijvende-komma-hardware (of hardware-emulatie) beschikbaar is
het doelwit. Toegestane namen zijn: fpa, fpe2, fpe3, non-conformist, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon-, neon-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 en neon-vfpv4. -mfp en -mfpe zijn synoniemen voor -mfpu=fpeaantalvoor
compatibiliteit met oudere versies van GCC.

If -msoft-zweven is opgegeven, specificeert dit het formaat van drijvende-kommawaarden.

Als de geselecteerde drijvende-komma-hardware de NEON-extensie bevat (bijv -mfpu=neon-),
merk op dat drijvende-kommabewerkingen niet worden gebruikt door GCC's automatische vectorisatiepas
tenzij -funsafe-math-optimalisaties staat ook vermeld. Dit komt omdat NEON-hardware
implementeert de IEEE 754-standaard voor rekenkunde met drijvende komma niet volledig (in
bepaalde denormale waarden worden behandeld als nul), dus het gebruik van NEON-instructies kan:
leiden tot een verlies van precisie.

-mfp16-formaat=naam
Geef het formaat op van het type "__fp16" met halve precisie met drijvende komma. toegestaan
namen zijn geen, ieee en alternatief; de standaard is geen, in welk geval de "__fp16"
soort is niet gedefinieerd.

-mstructuur-grootte-grens=n
De grootte van alle structuren en vakbonden wordt naar boven afgerond op een veelvoud van het getal
aantal bits ingesteld door deze optie. Toegestane waarden zijn 8, 32 en 64. De standaardwaarde
varieert voor verschillende gereedschapsketens. Voor de COFF-gerichte toolchain is de standaardwaarde:
8. Een waarde van 64 is alleen toegestaan ​​als de onderliggende ABI dit ondersteunt.

Het specificeren van het grotere aantal kan snellere, efficiëntere code produceren, maar kan ook
vergroot de omvang van het programma. Verschillende waarden zijn mogelijk onverenigbaar.
Code die met één waarde is gecompileerd, kan niet per se verwachten dat deze met code of bibliotheken werkt
samengesteld met een andere waarde, als ze informatie uitwisselen via structuren of vakbonden.

-mabort-op-noreturn
Genereer een aanroep naar de functie "abort" aan het einde van een "noreturn"-functie. Het zal
worden uitgevoerd als de functie probeert terug te keren.

-mlong-oproepen
-mno-lange gesprekken
Vertelt de compiler om functieaanroepen uit te voeren door eerst het adres van de te laden
functie in een register en voert vervolgens een subroutine-aanroep uit op dit register. Dit
switch is nodig als de doelfunctie buiten de adressering van 64 megabyte ligt
bereik van de op offset gebaseerde versie van subroutineaanroepinstructie.

Zelfs als deze schakelaar is ingeschakeld, worden niet alle functieoproepen omgezet in lange oproepen.
De heuristiek is dat statische functies, functies met de kort gesprek attribuut,
functies die binnen het bereik van a . vallen #pragma geen_lange_gesprekken richtlijn en functies
waarvan de definities al zijn samengesteld binnen de huidige compilatie-eenheid
niet worden omgezet in lange gesprekken. De uitzondering op deze regel is die zwakke functie
definities, functies met de lang gesprek attribuut of de sectie attribuut, en
functies die vallen onder a #pragma lange_oproepen richtlijn, zal dat altijd zijn
veranderd in lange gesprekken.

Deze functie is standaard niet ingeschakeld. Specificeren -mno-lange gesprekken zal herstellen
standaardgedrag, evenals het plaatsen van de functieaanroepen binnen het bereik van a #pragma
lange_gesprekken_uit richtlijn. Merk op dat deze schakelaars geen effect hebben op de manier waarop de compiler
genereert code voor het afhandelen van functieaanroepen via functiewijzers.

-msingle-pic-basis
Behandel het register dat wordt gebruikt voor PIC-adressering als alleen-lezen, in plaats van het te laden in de
proloog voor elke functie. Het runtime-systeem is verantwoordelijk voor het initialiseren hiervan
registreer met een geschikte waarde voordat de uitvoering begint.

-mpic-register=reg
Geef het register op dat moet worden gebruikt voor PIC-adressering. De standaardwaarde is R10, tenzij
controleren is ingeschakeld, wanneer R9 wordt gebruikt.

-mcirrus-fix-ongeldige-insns
Voeg NOP's in de instructiestroom in om problemen met te omzeilen
ongeldige Maverick-instructiecombinaties. Deze optie is alleen geldig als de
-mcpu=ep9312 optie is gebruikt om het genereren van instructies voor de Cirrus mogelijk te maken
Maverick floating-point co-processor. Deze optie is standaard niet ingeschakeld, aangezien
het probleem is alleen aanwezig in oudere Maverick-implementaties. De standaard kan opnieuw
mogelijk gemaakt door gebruik te maken van de -mno-cirrus-fix-ongeldige-insns schakelaar.

-mpoke-functie-naam
Schrijf de naam van elke functie in de tekstsectie, direct voorafgaand aan de functie
proloog. De gegenereerde code is vergelijkbaar met deze:

t0
.ascii "arm_poke_function_name", 0
.uitlijnen
t1
.woord 0xff000000 + (t1 - t0)
arm_poke_function_name
beweeg ip, sp
stmfd sp!, {fp, ip, lr, pc}
subfp, ip, #4

Bij het uitvoeren van een stack-backtrace kan de code de waarde van "pc" inspecteren die is opgeslagen op "fp +
0". Als de traceerfunctie dan kijkt naar locatie "pc - 12" en de bovenste 8 bits zijn
set, dan weten we dat er een functienaam direct hieraan voorafgaat
locatie en heeft de lengte "((pc[-3]) & 0xff000000)".

-duim
-marme
Kies tussen het genereren van code die wordt uitgevoerd in ARM- en Thumb-statussen. De standaard voor
de meeste configuraties zijn om code te genereren die wordt uitgevoerd in de ARM-status, maar de standaard
kan worden gewijzigd door GCC te configureren met de --met-modus=staat optie configureren.

-mtpcs-frame
Genereer een stapelframe dat voldoet aan de Thumb Procedure Call Standard voor:
alle niet-bladfuncties. (Een bladfunctie is er een die geen andere aanroept)
functies.) De standaardinstelling is -mno-tpcs-frame.

-mtpcs-blad-frame
Genereer een stapelframe dat voldoet aan de Thumb Procedure Call Standard voor:
alle bladfuncties. (Een bladfunctie is er een die geen andere functies aanroept.)
De standaard is -mno-apcs-blad-frame.

-mcallee-super-interworking
Geeft alle extern zichtbare functies in het bestand dat wordt gecompileerd een ARM-instructie
set header die overschakelt naar de Thumb-modus voordat de rest van de functie wordt uitgevoerd.
Hierdoor kunnen deze functies worden aangeroepen vanuit niet-interworking code. Deze optie is
niet geldig in AAPCS-configuraties omdat interworking standaard is ingeschakeld.

-mcaller-super-interworking
Hiermee kunnen oproepen via functieaanwijzers (inclusief virtuele functies) correct worden uitgevoerd
ongeacht of de doelcode is gecompileerd voor interworking of niet.
Er is een kleine overhead in de kosten van het uitvoeren van een functieaanwijzer als deze optie
is ingeschakeld. Deze optie is niet geldig in AAPCS-configuraties omdat interworking is
standaard ingeschakeld.

-mtp=naam
Geef het toegangsmodel op voor de lokale opslagaanwijzer van de thread. De geldige modellen zijn:
zacht, die oproepen genereert naar "__aeabi_read_tp", cp15, die de draad ophaalt
pointer rechtstreeks van "cp15" (ondersteund in de arm6k-architectuur), en auto, welke
gebruikt de best beschikbare methode voor de geselecteerde processor. De standaardinstelling is
auto.

-mtls-dialect=tongval
Geef het dialect op dat moet worden gebruikt voor toegang tot de lokale thread-opslag. Twee dialecten zijn
ondersteund --- gnoe en gnu2. De gnoe dialect selecteert het originele GNU-schema voor
ondersteuning van lokale en wereldwijde dynamische TLS-modellen. De gnu2 dialect selecteert de GNU
descriptorschema, dat betere prestaties biedt voor gedeelde bibliotheken. de GNU
descriptorschema is compatibel met het oorspronkelijke schema, maar vereist wel nieuwe
assembler, linker en bibliotheekondersteuning. Initiële en lokale exec TLS-modellen zijn:
onaangetast door deze optie en gebruik altijd het oorspronkelijke schema.

-mword-verhuizingen
Genereer alleen absolute verplaatsingen op woordgrote waarden (dwz R_ARM_ABS32). Dit is
standaard ingeschakeld op doelen (uClinux, SymbianOS) waar de runtime loader oplegt
deze beperking, en wanneer? -fpic or -fPIC is gespecificeerd.

-mfix-cortex-m3-ldrd
Sommige Cortex-M3-kernen kunnen gegevenscorruptie veroorzaken wanneer "ldrd"-instructies met:
overlappende bestemmings- en basisregisters worden gebruikt. Deze optie vermijdt het genereren
deze instructies. Deze optie is standaard ingeschakeld wanneer: -mcpu=cortex-m3 is
gespecificeerd.

-munaligned-toegang
-mno-niet-uitgelijnde toegang
Schakelt het lezen en schrijven van 16- en 32-bits waarden van adressen in (of uit)
die niet 16- of 32-bits zijn uitgelijnd. Standaard is niet-uitgelijnde toegang voor iedereen uitgeschakeld
pre-ARMv6 en alle ARMv6-M-architecturen, en ingeschakeld voor alle andere architecturen. Indien
niet-uitgelijnde toegang is niet ingeschakeld, dan zal toegang worden verkregen tot woorden in ingepakte gegevensstructuren
een byte tegelijk.

Het ARM-attribuut "Tag_CPU_unaligned_access" wordt ingesteld in het gegenereerde objectbestand
naar waar of onwaar, afhankelijk van de instelling van deze optie. Indien niet uitgelijnd
toegang is ingeschakeld, zal het preprocessor-symbool "__ARM_FEATURE_UNALIGNED" ook zijn
gedefinieerd.

-mneon-voor-64bits
Maakt het gebruik van Neon mogelijk om scalaire 64-bits bewerkingen af ​​te handelen. Dit is standaard uitgeschakeld
omdat de kosten voor het verplaatsen van gegevens van kernregisters naar Neon hoog zijn.

AVR Opties

-mmcu=MCU
Specificeer Atmel AVR-instructiesetarchitecturen (ISA) of MCU-type.

De standaard voor deze optie is@tie{}"avr2".

GCC ondersteunt de volgende AVR-apparaten en ISA's:

"avr2"
"Klassieke" apparaten met maximaal 8@tie{}KiB programmageheugen. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Klassieke" apparaten met maximaal 8@tie{}KiB programmageheugen en met de "MOVW"
instructie. MCU@tie{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
"Klassieke" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "at43usb355", "at76c711".

"avr31"
"Klassieke" apparaten met 128@tie{}KiB aan programmageheugen. MCU@tie{}= "atmega103",
"at43usb320".

"avr35"
"Klassieke" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen en met
de instructie "MOVW". MCU@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
"Verbeterde" apparaten met maximaal 8@tie{}KiB aan programmageheugen. MCU@tie{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
"Verbeterde" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
"Verbeterde" apparaten met 128@tie{}KiB aan programmageheugen. MCU@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
"Verbeterde" apparaten met 3-byte pc, dwz met meer dan 128@tie{}KiB aan programma
geheugen. MCU@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
"XMEGA"-apparaten met meer dan 8@tie{}KiB en maximaal 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
"XMEGA"-apparaten met meer dan 64@tie{}KiB en maximaal 128@tie{}KiB aan programma
geheugen. MCU@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
"XMEGA"-apparaten met meer dan 64@tie{}KiB en maximaal 128@tie{}KiB aan programma
geheugen en meer dan 64@tie{}KiB RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
"XMEGA"-apparaten met meer dan 128@tie{}KiB aan programmageheugen. MCU@tie{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
"XMEGA"-apparaten met meer dan 128@tie{}KiB aan programmageheugen en meer dan
64@tie{}KiB RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
Deze ISA wordt geïmplementeerd door de minimale AVR-kern en wordt alleen ondersteund voor assembler.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumuleren-args
Verzamel uitgaande functieargumenten en verkrijg / geef de benodigde stapelruimte vrij voor:
uitgaande functieargumenten eenmaal in functieproloog/epiloog. Zonder deze optie,
uitgaande argumenten worden gepusht voordat een functie wordt aangeroepen en daarna gepopt.

Het opduiken van de argumenten na de functie-aanroep kan duur zijn op AVR, zodat:
het accumuleren van de stapelruimte kan leiden tot kleinere uitvoerbare bestanden omdat argumenten nodig zijn:
niet van de stapel worden verwijderd na zo'n functieaanroep.

Deze optie kan leiden tot een kleinere codegrootte voor functies die meerdere aanroepen uitvoeren naar:
functies die hun argumenten op de stapel krijgen, zoals aanroepen van printf-achtige functies.

-mbranch-kosten=kosten
Stel de filiaalkosten voor voorwaardelijke filiaalinstructies in op: kosten. Redelijke waarden
For kosten zijn kleine, niet-negatieve gehele getallen. De standaard filiaalkosten zijn 0.

-mcall-prologen
Functies prologen/epilogen worden uitgebreid als oproepen naar geschikte subroutines. Code
maat valt kleiner.

-mint8
Neem aan dat "int" een 8-bits geheel getal is. Dit heeft invloed op de maten van alle typen: een "char" is 1
byte, een "int" is 1 byte, een "long" is 2 bytes en "long long" is 4 bytes. Alsjeblieft
merk op dat deze optie niet voldoet aan de C-normen, maar resulteert in kleinere
code grootte.

-mno-onderbreekt
Gegenereerde code is niet compatibel met hardware-interrupts. De codegrootte is kleiner.

-montspan
Probeer "CALL" resp. "JMP" instructie door de kortere "RCALL" resp. "RJMP"
instructie indien van toepassing. Als u "-mrelax" instelt, voegt u gewoon de optie "--relax" toe aan de
linker-opdrachtregel wanneer de linker wordt aangeroepen.

Sprong-relaxatie wordt uitgevoerd door de linker omdat sprong-offsets niet eerder bekend zijn
code staat. Daarom is de assembler-code die door de compiler wordt gegenereerd hetzelfde,
maar de instructies in het uitvoerbare bestand kunnen verschillen van de instructies in de assembler
code.

Relaxen moet worden ingeschakeld als linkerstubs nodig zijn, zie de sectie over "EIND" en
linkerstompjes hieronder.

-mkorte-oproepen
Deze optie is verouderd en wordt verwijderd in GCC 4.8. Zie "-mrelax" voor een
vervanging.

Gebruik "RCALL"/"RJMP"-instructies, zelfs op apparaten met 16@tie{}KiB of meer van het programma
geheugen, dwz op apparaten die de instructies "CALL" en "JMP" hebben.

-msp8
Behandel het stackpointerregister als een 8-bits register, dwz neem aan dat de hoge byte van
de stapelaanwijzer is nul. Over het algemeen hoeft u deze optie niet handmatig in te stellen.

Deze optie wordt intern door de compiler gebruikt om multilibs te selecteren en te bouwen voor
architecturen "avr2" en "avr25". Deze architecturen combineren apparaten met en zonder
"SPF". Voor elke andere instelling dan "-mmcu=avr2" of "-mmcu=avr25" het compilerstuurprogramma
zal deze optie toevoegen aan of verwijderen uit de eigenlijke opdrachtregel van de compiler, omdat de
compiler weet dan of het apparaat of de architectuur een 8-bits stackpointer heeft en dus
geen "SPH" register of niet.

-mstrict-X
Gebruik adresregister "X" op een manier die door de hardware wordt voorgesteld. Dit betekent dat "X" is
alleen gebruikt in indirecte, post-increment of pre-decrement adressering.

Zonder deze optie kan het "X"-register op dezelfde manier worden gebruikt als "Y" of "Z", wat:
dan wordt geëmuleerd door aanvullende instructies. Bijvoorbeeld, een waarde laden met
"X+const" adressering met een kleine niet-negatieve "const < 64" naar een register Rn is
uitgevoerd als

adiw r26, const; X += constant
ld , X ; = *X
sbiw r26, const; X -= constant

-mtiny-stapel
Verander alleen de onderste 8@tie{}bits van de stackpointer.

"EIND" en apparaten met meer dan 128 Ki Bytes Flash

Pointers in de implementatie zijn 16@tie{}bits breed. Het adres van een functie of label
wordt weergegeven als woordadres, zodat indirecte sprongen en oproepen elke code kunnen targeten
adres in het bereik van 64@tie{}Ki-woorden.

Om indirect springen op apparaten met meer dan 128@tie{}Ki bytes van
programmageheugenruimte, is er een speciaal functieregister genaamd "EIND" dat dient als:
meest significante deel van het doeladres wanneer "EICALL" of "EIJMP" instructies zijn
gebruikt.

Indirecte sprongen en oproepen op deze apparaten worden als volgt afgehandeld door de compiler en zijn:
onderhevig aan enkele beperkingen:

· De compiler stelt nooit "EIND" in.

· De compiler gebruikt "EIND" impliciet in "EICALL"/"EIJMP"-instructies of leest
"EIND" direct om een ​​indirecte oproep/sprong na te bootsen door middel van een "RET"
instructie.

· De compiler gaat ervan uit dat "EIND" nooit verandert tijdens de opstartcode of tijdens de
sollicitatie. In het bijzonder wordt "EIND" niet opgeslagen/hersteld in functie of onderbreking
service routine proloog/epiloog.

· Voor indirecte aanroepen van functies en berekende goto genereert de linker stompjes. stompjes
worden ook wel springkussens genoemd trampolines. De indirecte oproep/sprong springt dus naar
zo'n stompje. De stub bevat een directe sprong naar het gewenste adres.

· Linker-relaxatie moet zijn ingeschakeld zodat de linker de stubs zal genereren
correct een alle situatie. Zie de compiler-optie "-mrelax" en de linler-optie
"--ontspannen". Er zijn hoekgevallen waarbij de linker stubs zou moeten genereren, maar
afgebroken zonder ontspanning en zonder een nuttige foutmelding.

· Het standaard linkerscript is gerangschikt voor code met "EIND = 0". Als code wordt verondersteld
om te werken voor een setup met "EIND != 0", moet een aangepast linkerscript worden gebruikt om
om de secties waarvan de naam begint met ".trampolines" in het segment te plaatsen waar
"EIND" wijst naar.

· De opstartcode van libgcc stelt nooit "EIND" in. Merk op dat de opstartcode een blend is
van code van libgcc en AVR-LibC. Voor de impact van AVR-LibC op "EIND", zie de AVR-
LibC-gebruikershandleiding ("http://nongnu.org/avr-libc/user-manual/").

· Het is legitiem voor gebruikersspecifieke opstartcode om "EIND" vroeg in te stellen, bijvoorbeeld door:
middel van initialisatiecode in sectie ".init3". Dergelijke code wordt uitgevoerd voorafgaand aan:
algemene opstartcode die RAM initialiseert en constructors aanroept, maar na het stukje
opstartcode van AVR-LibC die "EIND" instelt op het segment waar de vectortabel zich bevindt
bevindt.

#erbij betrekken

statische leegte
__attribute__((sectie(".init3"),naked,used,no_instrument_function))
init3_set_eind (ongeldig)
{
__asm ​​vluchtig ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","geheugen");
}

Het symbool "__trampolines_start" wordt gedefinieerd in het linkerscript.

· Stubs worden automatisch gegenereerd door de linker als aan de volgende twee voorwaarden is voldaan:
leerde kennen:

-
(kort voor voortbrengen stompjes) graag zo:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
buiten het segment waar de stompen zich bevinden.

· De compiler zendt dergelijke "gs"-modifiers uit voor codelabels in de volgende situaties:

-
-
- -mcall-prologen>
opdrachtregeloptie.

-
tabellen kunt u de . specificeren -fno-jump-tafels opdrachtregeloptie.

-
-
· Springen naar niet-symbolische adressen zoals so is niet ondersteund:

int hoofd (void)
{
/* Oproepfunctie op woordadres 0x2 */
retourneren ((int(*)(ongeldig)) 0x2)();
}

In plaats daarvan moet een stub worden ingesteld, dwz de functie moet worden aangeroepen via een symbool
("func_4" in het voorbeeld):

int hoofd (void)
{
extern int func_4 (ongeldig);

/* Oproepfunctie op byte-adres 0x4 */
retourneer func_4();
}

en de applicatie wordt gelinkt met "-Wl,--defsym,func_4=0x4". Als alternatief, "func_4"
kan worden gedefinieerd in het linkerscript.

Behandeling van de "RAMPD", "RAMPX", "RAMPY" en "RAMPZ" speciale functieregisters

Sommige AVR-apparaten ondersteunen geheugens die groter zijn dan de 64@tie{}KiB-reeks die toegankelijk is
met 16-bits aanwijzers. Om toegang te krijgen tot geheugenlocaties buiten dit 64@tie{}KiB-bereik, moet de
inhoud van een "RAMP" register wordt gebruikt als hoog deel van het adres: De "X", "Y", "Z"
adresregister is aaneengeschakeld met de speciale functie "RAMPX", "RAMPY", "RAMPZ"
registreren, respectievelijk, om een ​​breed adres te krijgen. Evenzo wordt "RAMPD" gebruikt in combinatie met:
directe adressering.

· De opstartcode initialiseert de speciale functieregisters "RAMP" met nul.

· Als een AVR Genoemd Adres Spaties, genaamd adres ruimte anders dan generiek of "__flash" is
gebruikt, dan wordt "RAMPZ" ingesteld zoals nodig voor de operatie.

· Als het apparaat RAM groter dan 64@tie{KiB} ondersteunt en de compiler moet veranderen
"RAMPZ" om een ​​bewerking uit te voeren, wordt "RAMPZ" na de bewerking op nul teruggezet.

· Als het apparaat wordt geleverd met een specifiek "RAMP"-register, wordt de ISR-proloog/epiloog
bewaart/herstelt die SFR en initialiseert deze met nul in het geval dat de ISR-code zou kunnen
(impliciet) gebruik het.

· RAM groter dan 64@tie{KiB} wordt niet ondersteund door GCC voor AVR-doelen. Als je gebruikt
inline assembler om te lezen van locaties buiten het 16-bits adresbereik en te wijzigen
een van de "RAMP"-registers, moet u deze na de toegang op nul resetten.

Ingebouwde AVR-macro's

GCC definieert verschillende ingebouwde macro's zodat de gebruikerscode kan testen op aanwezigheid of
afwezigheid van kenmerken. Bijna alle van de volgende ingebouwde macro's zijn afgeleid van het apparaat
mogelijkheden en dus geactiveerd door de "-mmcu=" opdrachtregeloptie.

Voor nog meer AVR-specifieke ingebouwde macro's zie AVR Genoemd Adres Ruimtes en AVR Ingebouwd
Functies.

"__AVR_ARCH__"
Ingebouwde macro die wordt omgezet in een decimaal getal dat de architectuur identificeert en
hangt af van de "-mmcu=mcu" optie. Mogelijke waarden zijn:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

For MCU= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7". Indien MCU
een apparaat specificeert, wordt deze ingebouwde macro dienovereenkomstig ingesteld. Bijvoorbeeld met
"-mmcu=atmega8" de macro wordt gedefinieerd als 4.

"__AVR_Apparaat__"
Instelling "-mmcu=apparaat" definieert deze ingebouwde macro die de naam van het apparaat weerspiegelt.
Bijvoorbeeld, "-mmcu=atmega8" definieert de ingebouwde macro "__AVR_ATmega8__",
"-mmcu=attiny261a" definieert "__AVR_ATtiny261A__", enz.

De namen van de ingebouwde macro's volgen het schema "__AVR_Apparaat__" WAAR Apparaat is de
apparaatnaam zoals in de gebruikershandleiding van de AVR. Het verschil tussen Apparaat in de ingebouwde
macro en apparaat in "-mmcu=apparaat" is dat de laatste altijd kleine letters zijn.

If apparaat is geen apparaat maar slechts een kernarchitectuur zoals "avr51", deze macro zal
niet worden gedefinieerd.

"__AVR_XMEGA__"
Het apparaat/de architectuur behoort tot de XMEGA-familie van apparaten.

"__AVR_HAVE_ELPM__"
Het apparaat heeft de instructie "ELPM".

"__AVR_HAVE_ELPMX__"
Het apparaat heeft de "ELPM Rn,Z" en "ELPM Rn,Z+" instructies.

"__AVR_HAVE_MOVW__"
Het apparaat heeft de "MOVW"-instructie om 16-bits register-registerbewegingen uit te voeren.

"__AVR_HAVE_LPMX__"
Het apparaat heeft de "LPM Rn,Z" en "LPM Rn,Z+" instructies.

"__AVR_HAVE_MUL__"
Het apparaat heeft een hardwaremultiplier.

"__AVR_HAVE_JMP_CALL__"
Het apparaat heeft de instructies "JMP" en "CALL". Dit is het geval voor apparaten met:
ten minste 16@tie{}KiB programmageheugen en als "-mshort-calls" niet is ingesteld.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Het apparaat heeft de instructies "EIJMP" en "EICALL". Dit is het geval voor apparaten
met meer dan 128@tie{}KiB aan programmageheugen. Dit betekent ook dat het programma
teller (PC) is 3@tie{}bytes breed.

"__AVR_2_BYTE_PC__"
De programmateller (PC) is 2@tie{}bytes breed. Dit is het geval voor apparaten met maximaal
128@tie{}KiB van programmageheugen.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Het stack pointer (SP) register wordt behandeld als 8-bits respectievelijk 16-bits register door
de compiler. De definitie van deze macro's wordt beïnvloed door "-mtiny-stack".

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Het apparaat heeft het speciale functieregister SPH (high part of stack pointer) of heeft
respectievelijk een 8-bits stackpointer. De definitie van deze macro's wordt beïnvloed door:
"-mmcu=" en in het geval van "-mmcu=avr2" en "-mmcu=avr25" ook door "-msp8".

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Het apparaat heeft het speciale functieregister "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectievelijk.

"__NO_INTERRUPTS__"
Deze macro weerspiegelt de opdrachtregeloptie "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Sommige AVR-apparaten (AT90S8515, ATmega103) mogen 32-bits instructies niet overslaan vanwege a
hardwarefout. Instructies voor het overslaan zijn "SBRS", "SBRC", "SBIS", "SBIC" en "CPSE".
De tweede macro wordt alleen gedefinieerd als "__AVR_HAVE_JMP_CALL__" ook is ingesteld.

"__AVR_SFR_OFFSET__=compenseren"
Instructies die I/O-registers voor speciale functies rechtstreeks kunnen adresseren, zoals "IN",
"OUT", "SBI", enz. kunnen een ander adres gebruiken alsof het wordt geadresseerd door een instructie aan
toegang krijgen tot RAM zoals "LD" of "STS". Deze offset is afhankelijk van de apparaatarchitectuur en heeft
af te trekken van het RAM-adres om het respectievelijke I/O@tie{}adres te krijgen.

"__WITH_AVRLIBC__"
De compiler is geconfigureerd om samen met AVR-Libc te worden gebruikt. Zie de
"--with-avrlibc" configuratieoptie.

Zwartvintonijn Opties

-mcpu=cpu[-sirene]
Specificeert de naam van de doel-Blackfin-processor. Momenteel, cpu kan een van zijn
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. de optionele sirene specificeert de
siliciumrevisie van de beoogde Blackfin-processor. Eventuele tijdelijke oplossingen voor de
gerichte siliciumrevisie wordt ingeschakeld. Als sirene is geen, er zijn geen tijdelijke oplossingen
ingeschakeld. Als sirene is elke, zullen alle tijdelijke oplossingen voor de beoogde processor zijn
ingeschakeld. De macro "__SILICON_REVISION__" is gedefinieerd in twee hexadecimale cijfers
die de hoofd- en ondergetallen in de siliciumrevisie vertegenwoordigen. Als sirene is
geen, is de "__SILICON_REVISION__" niet gedefinieerd. Als sirene is elke
"__SILICON_REVISION__" is gedefinieerd als 0xffff. Als dit optioneel is sirene is niet
gebruikt, gaat GCC uit van de laatst bekende siliciumrevisie van de beoogde Blackfin
processor.

Ondersteuning bf561 is onvolledig. Voor bf561, Alleen de processormacro is gedefinieerd.
Zonder deze optie, bf532 wordt standaard als processor gebruikt. De corresponderende
vooraf gedefinieerde processormacro's voor cpu valt te definiëren. En voor bfin-elf gereedschapsketting,
dit zorgt ervoor dat de hardware-BSP die door libgloss wordt geleverd, wordt gekoppeld aan if -msim is niet
gegeven.

-msim
Specificeert dat het programma op de simulator wordt uitgevoerd. Dit zorgt ervoor dat de simulator
BSP geleverd door libgloss om in te linken. Deze optie heeft alleen effect voor: bfin-elf
gereedschapsketting. Bepaalde andere opties, zoals: -midden-gedeelde-bibliotheek en -mfdpic, impliceren
-msim.

-momit-blad-frame-aanwijzer
Bewaar de framepointer niet in een register voor bladfuncties. Dit vermijdt de
instructies om framepointers op te slaan, in te stellen en te herstellen en maakt een extra register aan
beschikbaar in bladfuncties. De optie -fomit-frame-aanwijzer verwijdert het frame
aanwijzer voor alle functies, wat het debuggen moeilijker kan maken.

-mspecld-anomalie
Indien ingeschakeld, zorgt de compiler ervoor dat de gegenereerde code geen bevat
speculatieve belastingen na springinstructies. Als deze optie wordt gebruikt,
"__WORKAROUND_SPECULATIVE_LOADS" is gedefinieerd.

-mno-specld-anomalie
Genereer geen extra code om speculatieve belastingen te voorkomen.

-mcsync-afwijking
Indien ingeschakeld, zorgt de compiler ervoor dat de gegenereerde code geen CSYNC bevat
of SSYNC-instructies te snel na voorwaardelijke vertakkingen. Als deze optie wordt gebruikt,
"__WORKAROUND_SPECULATIVE_SYNCS" is gedefinieerd.

-mno-csync-anomalie
Genereer geen extra code om te voorkomen dat er ook CSYNC- of SSYNC-instructies optreden
kort na een voorwaardelijke vertakking.

-mlow-64k
Indien ingeschakeld, is de compiler vrij om te profiteren van de wetenschap dat de hele
programma past in de lage 64k geheugen.

-mno-laag-64k
Neem aan dat het programma willekeurig groot is. Dit is de standaardinstelling.

-mstack-check-l1
Voer stapelcontrole uit met behulp van informatie die door de uClinux . in het L1-kladblokgeheugen is geplaatst
kernel.

-midden-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode. Dit maakt het mogelijk
voor uitvoering ter plaatse en gedeelde bibliotheken in een omgeving zonder virtueel geheugen
beheer. Deze optie houdt in: -fPIC. Met een bfin-elf doel, deze optie houdt in:
-msim.

-mno-id-gedeelde-bibliotheek
Genereer code die er niet van uitgaat dat op ID gebaseerde gedeelde bibliotheken worden gebruikt. Dit is
de standaard.

-mleaf-id-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode, maar veronderstelt:
dat deze bibliotheek of het uitvoerbare bestand niet wordt gekoppeld aan andere gedeelde ID-bibliotheken.
Hierdoor kan de compiler snellere code gebruiken voor sprongen en oproepen.

-mno-blad-id-gedeelde-bibliotheek
Ga er niet vanuit dat de code die wordt gecompileerd niet zal linken naar gedeelde ID-bibliotheken.
Voor jump- en call-insns wordt langzamere code gegenereerd.

-mshared-bibliotheek-id=n
Specificeerde het identificatienummer van de op ID gebaseerde gedeelde bibliotheek die wordt gecompileerd.
Het specificeren van een waarde van 0 zal compactere code genereren, het specificeren van andere waarden zal dat doen
forceer de toewijzing van dat nummer aan de huidige bibliotheek, maar er is geen ruimte meer of
tijdbesparend dan het weglaten van deze optie.

-msep-gegevens
Genereer code waarmee het gegevenssegment zich in een ander geheugengebied kan bevinden
uit het tekstsegment. Dit maakt het mogelijk om op zijn plaats uit te voeren in een omgeving zonder
virtueel geheugenbeheer door verplaatsingen tegen de tekstsectie te elimineren.

-mno-sep-gegevens
Genereer code die ervan uitgaat dat het gegevenssegment het tekstsegment volgt. Dit is
de standaard.

-mlong-oproepen
-mno-lange gesprekken
Vertelt de compiler om functieaanroepen uit te voeren door eerst het adres van de te laden
functie in een register en voert vervolgens een subroutine-aanroep uit op dit register. Dit
schakelaar is nodig als de doelfunctie buiten het 24-bits adresbereik van ligt
de op offset gebaseerde versie van subroutine-oproepinstructie.

Deze functie is standaard niet ingeschakeld. Specificeren -mno-lange gesprekken zal herstellen
standaard gedrag. Merk op dat deze schakelaars geen effect hebben op hoe de compiler genereert
code om functieaanroepen af ​​te handelen via functiewijzers.

-mfast-fp
Koppeling met de snelle drijvende-kommabibliotheek. Deze bibliotheek versoepelt een deel van de IEEE
regels voor drijvende-kommastandaard voor het controleren van invoer tegen Not-a-Number (NAN), in de
belang van prestatie.

-minline-plt
Inline inschakelen van PLT-vermeldingen in functieaanroepen naar functies waarvan niet bekend is dat ze
lokaal binden. Het heeft geen effect zonder -mfdpic.

-mmulticore
Bouw een zelfstandige applicatie voor multicore Blackfin-processor. Juiste startbestanden en
linkscripts worden gebruikt om multicore te ondersteunen. Deze optie definieert
"__BFIN_MULTICORE". Het kan alleen gebruikt worden met -mcpu=bf561[-sirene]. Het kan gebruikt worden
Met -mcore or -mcoreb. Als het zonder wordt gebruikt -mcore or -mcoreb, enkelvoudige
applicatie/dual core programmeermodel wordt gebruikt. In dit model de belangrijkste functie van
Core B moet worden genoemd als coreb_main. Als het wordt gebruikt met -mcore or -mcoreb, een
toepassing per kernprogrammeermodel wordt gebruikt. Als deze optie niet wordt gebruikt, single
het kernmodel voor applicatieprogrammering wordt gebruikt.

-mcore
Bouw een zelfstandige applicatie voor Core A van BF561 bij gebruik van één applicatie per core
programmeermodel. De juiste startbestanden en linkscripts zullen worden gebruikt om Core A te ondersteunen.
Deze optie definieert "__BFIN_COREA". Het moet gebruikt worden met -mmulticore.

-mcoreb
Bouw een zelfstandige applicatie voor Core B van BF561 bij gebruik van één applicatie per core
programmeermodel. De juiste startbestanden en linkscripts zullen worden gebruikt om Core B te ondersteunen.
Deze optie definieert "__BFIN_COREB". Wanneer deze optie wordt gebruikt, zou coreb_main moeten zijn
gebruikt in plaats van hoofd. Het moet gebruikt worden met -mmulticore.

-msdram
Bouw een zelfstandige applicatie voor SDRAM. Correcte startbestanden en linkscripts zullen zijn
gebruikt om de applicatie in SDRAM te plaatsen. Loader moet SDRAM initialiseren voordat het wordt geladen
de toepassing in SDRAM. Deze optie definieert "__BFIN_SDRAM".

-micplb
Stel dat ICPLB's tijdens runtime zijn ingeschakeld. Dit heeft effect op bepaalde anomalie
tijdelijke oplossingen. Voor Linux-doelen wordt standaard aangenomen dat ICPLB's zijn ingeschakeld; voor
standalone toepassingen is de standaard uitgeschakeld.

C6X Opties

-maart=naam
Dit specificeert de naam van de doelarchitectuur. GCC gebruikt deze naam om te bepalen:
wat voor soort instructies het kan uitzenden bij het genereren van assemblagecode. toegestaan
namen zijn: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
Genereer code voor een big-endian doelwit.

-mlittle-endian
Genereer code voor een klein endian doelwit. Dit is de standaardinstelling.

-msim
Kies opstartbestanden en linkerscript die geschikt zijn voor de simulator.

-msdata=standaard
Zet kleine globale en statische gegevens in de .nauwelijks sectie, waarnaar wordt verwezen door
registreer "B14". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de .bss sectie,
die grenst aan de .nauwelijks sectie. Zet kleine alleen-lezen gegevens in de .rodata
sectie. De overeenkomstige secties die worden gebruikt voor grote hoeveelheden gegevens zijn: .fardata, .far
en .const.

-msdata=alles
Plaats alle gegevens, niet alleen kleine objecten, in de secties die zijn gereserveerd voor kleine gegevens, en
gebruik adressering ten opzichte van het "B14"-register om ze te openen.

-msdata=geen
Maak geen gebruik van de secties die zijn gereserveerd voor kleine gegevens en gebruik absolute adressen om
toegang tot alle gegevens. Zet alle geïnitialiseerde globale en statische gegevens in de .fardata sectie,
en alle niet-geïnitialiseerde gegevens in de .far sectie. Zet alle constante gegevens in de .const
pagina.

CRIS Opties

Deze opties zijn specifiek gedefinieerd voor de CRIS-poorten.

-maart=architectuur-type
-mcpu=architectuur-type
Genereer code voor de opgegeven architectuur. De keuzes voor architectuur-type zijn
v3, v8 en v10 voor respectievelijk ETRAX 4, ETRAX 100 en ETRAX 100 LX. Standaard is v0
behalve voor cris-axis-linux-gnu, waar de standaard is v10.

-mtune=architectuur-type
Stem af op architectuur-type alles wat van toepassing is over de gegenereerde code, behalve:
de ABI en de set beschikbare instructies. De keuzes voor architectuur-type zijn
hetzelfde als voor -maart=architectuur-type.

-mmax-stackframe=n
Waarschuwen wanneer het stapelframe van een functie groter is dan n bytes.

-metrax4
-metrax100
De opties -metrax4 en -metrax100 zijn synoniemen voor -maart=v3 en -maart=v8
respectievelijk.

-mmul-bug-oplossing
-mno-mul-bug-oplossing
Omzeil een bug in de instructies "muls" en "mulu" voor CPU-modellen waar het
is van toepassing. Deze optie is standaard actief.

-mpdebug
Schakel CRIS-specifieke uitgebreide debug-gerelateerde informatie in de assembly-code in. Dit
optie heeft ook het effect om de #NO_APP geformatteerde code-indicator naar de
assembler aan het begin van het montagebestand.

-mcc-init
Gebruik geen conditiecoderesultaten van eerdere instructies; altijd uitzenden vergelijken en
testinstructies voor gebruik van conditiecodes.

-mno-bijwerkingen
Geef geen instructies met bijwerkingen in andere adresseringsmodi dan post-
toename.

-mstack-uitlijnen
-mno-stack-uitlijnen
-mdata-uitlijnen
-mno-gegevens-uitlijnen
-mconst-uitlijnen
-mno-const-uitlijnen
Deze opties (geen opties) rangschikken (elimineren arrangementen) voor het stapelframe,
individuele gegevens en constanten die moeten worden uitgelijnd voor de maximale grootte van enkele gegevenstoegang
voor het gekozen CPU-model. De standaardinstelling is om 32-bits uitlijning te regelen. ABI
details zoals structuurlay-out worden niet beïnvloed door deze opties.

-m32-bit
-m16-bit
-m8-bit
Net als bij de stack-data- en const-align-opties hierboven, zorgen deze opties voor:
stack-frame, beschrijfbare gegevens en constanten moeten allemaal 32-bits, 16-bits of 8-bits uitgelijnd zijn.
De standaardinstelling is 32-bits uitlijning.

-mno-proloog-epiloog
-mproloog-epiloog
met -mno-proloog-epiloog, de normale functie proloog en epiloog die zijn opgezet
de stapelframes worden weggelaten en er zijn geen retourinstructies of retourreeksen
gegenereerd in de code. Gebruik deze optie alleen in combinatie met visuele inspectie van de
gecompileerde code: er worden geen waarschuwingen of fouten gegenereerd wanneer aanroep opgeslagen registers moeten worden
opgeslagen, of opslag voor lokale variabele moet worden toegewezen.

-mno-gotplt
-mgotplt
met -fpic en -fPIC, genereer (genereer) geen instructiereeksen die worden geladen
adressen voor functies uit het PLT-gedeelte van de GOT in plaats van (traditioneel op andere)
architecturen) oproepen naar de PLT. De standaard is -mgotplt.

-melf
Legacy no-op optie alleen herkend met de cris-axis-elf en cris-axis-linux-gnu
targets.

-mlinux
Legacy no-op optie alleen herkend met het cris-axis-linux-gnu doel.

-sim
Deze optie, herkend voor de cris-axis-elf, zorgt voor koppeling met input-output
functies uit een simulatorbibliotheek. Code, geïnitialiseerde gegevens en nul geïnitialiseerde gegevens
worden achtereenvolgens toegewezen.

-sim2
Like -sim, maar geef linkeropties door om geïnitialiseerde gegevens te lokaliseren op 0x40000000 en nul-
geïnitialiseerde gegevens op 0x80000000.

CR16 Opties

Deze opties zijn specifiek gedefinieerd voor de CR16-poorten.

-mmac
Schakel het gebruik van instructies voor meervoudig accumuleren in. Standaard uitgeschakeld.

-mcr16cplus
-mcr16c
Genereer code voor CR16C- of CR16C+-architectuur. CR16C+-architectuur is standaard.

-msim
Koppelt de bibliotheek libsim.a die compatibel is met simulator. Van toepassing op elf
alleen compiler.

-mint32
Kies integer type als 32-bits breed.

-mbit-ops
Genereert sbit/cbit-instructies voor bitmanipulaties.

-mdata-model=model
Kies een datamodel. De keuzes voor model zijn in de buurt, ver or Medium. Medium is standaard.
Echter, ver is niet geldig wanneer de optie -mcr16c is gekozen omdat de CR16C-architectuur dat niet doet
ondersteuning ver datamodel.

Darwin Opties

Deze opties zijn gedefinieerd voor alle architecturen met het Darwin-besturingssysteem.

FSF GCC op Darwin maakt geen "dikke" objectbestanden aan; het zal een objectbestand voor maken
de enige architectuur waarop het is gebouwd. Apple's GCC op Darwin creëert wel
"dikke" bestanden indien meerdere -boog opties worden gebruikt; het doet dit door de compiler of uit te voeren
linker meerdere keren en voeg de resultaten samen met lipo.

Het subtype van het aangemaakte bestand (zoals ppc7400 or ppc970 or i686) wordt bepaald door de
vlaggen die de ISA specificeren waarop GCC zich richt, zoals -mcpu or -maart. De
-force_cpusubtype_ALL optie kan worden gebruikt om dit te overschrijven.

De Darwin-tools variëren in hun gedrag wanneer ze worden gepresenteerd met een ISA-mismatch. De
assembler, as, staat alleen het gebruik van instructies toe die geldig zijn voor het subtype van
het bestand dat het genereert, dus u kunt geen 64-bits instructies in een ppc750 object-bestand.
De linker voor gedeelde bibliotheken, /usr/bin/libtool, mislukt en drukt desgevraagd een fout af
om een ​​gedeelde bibliotheek te maken met een minder beperkend subtype dan de invoerbestanden (voor
bijvoorbeeld, proberen om een ppc970 objectbestand in a ppc7400 bibliotheek). De linker voor
uitvoerbare bestanden, ld, geeft het uitvoerbare bestand stilletjes het meest beperkende subtype van alle
zijn invoerbestanden.

-Fdir
Voeg de framework-directory toe dir naar het hoofd van de lijst met te doorzoeken mappen
voor header-bestanden. Deze mappen zijn verweven met die gespecificeerd door: -I
opties en worden gescand in een volgorde van links naar rechts.

Een framework directory is een directory met frameworks erin. Een raamwerk is een
map met a "Kopteksten" en / of "Privékoppen" directory die er rechtstreeks in staat
dat eindigt op ".kader". De naam van een framework is de naam van deze directory
exclusief de ".kader". Kopteksten die aan het raamwerk zijn gekoppeld, zijn te vinden in een van de
die twee mappen, met "Kopteksten" wordt eerst gezocht. Een subframe is een
framework-directory die zich in een framework-map bevindt "Kaders" map. Omvat van
subframework-headers kunnen alleen verschijnen in een header van een framework dat de
subframework, of in de header van een subframework van een broer of zus. Twee subframeworks zijn broers en zussen als
ze komen in hetzelfde kader voor. Een subframework mag niet dezelfde naam hebben als een
kader, zal een waarschuwing worden gegeven als dit wordt geschonden. Momenteel een subframe
geen subframeworks kunnen hebben, kan het mechanisme in de toekomst worden uitgebreid om te ondersteunen
dit. De normenkaders zijn te vinden in "/Systeem/Bibliotheek/Frameworks" en
"/Bibliotheek/Frameworks". Een voorbeeld van include ziet eruit als "#include ",
WAAR Achtergrond geeft de naam van het framework aan en header.h is te vinden in de
"Privékoppen" or "Kopteksten" directory.

-iframeworkdir
Like -F behalve dat de directory wordt behandeld als een systeemdirectory. Het grootste verschil
tussen dit -iframework en -F is dat met? -iframework de compiler waarschuwt niet
over constructies in header-bestanden gevonden via dir. Deze optie is geldig
alleen voor de C-talenfamilie.

-gespuugd
Zend foutopsporingsinformatie uit voor symbolen die worden gebruikt. Voor het STABS-foutopsporingsformaat,
dit maakt het mogelijk -feliminate-ongebruikte-debug-symbolen. Dit is standaard AAN.

-vol
Verzend foutopsporingsinformatie voor alle symbolen en typen.

-mmacosx-versie-min=versie
De vroegste versie van MacOS X waarop dit uitvoerbare bestand zal draaien, is: versie. Typisch
waarden van versie omvatten 10.1, 10.2 en 10.3.9.

Als de compiler is gebouwd om standaard de systeemheaders te gebruiken, dan is de standaard voor
deze optie is de systeemversie waarop de compiler draait, anders is de
standaard is om keuzes te maken die compatibel zijn met zoveel systemen en codebases als
mogelijk.

-mkernel
Schakel de kernelontwikkelingsmodus in. De -mkernel optiesets -statisch, -fno-gemeenschappelijk,
-fno-cxa-atexit, -fno-uitzonderingen, -fno-niet-oproep-uitzonderingen, -fapple-kext, -fno-zwak
en -fno-rtti waar van toepassing. Deze modus stelt ook in -mno-altivec, -msoft-zweven,
-fno-ingebouwd en -mlong-tak voor PowerPC-doelen.

-moon-byte-bool
Overschrijf de standaardinstellingen voor bool zodat groottevan(bool)==1. Standaard groottevan(bool) is 4
bij het compileren voor Darwin/PowerPC en 1 bij het compileren voor Darwin/x86, dus deze optie
heeft geen effect op x86.

Waarschuwing: De -moon-byte-bool switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Het gebruik van deze schakelaar vereist mogelijk:
hercompileren van alle andere modules in een programma, inclusief systeembibliotheken. Gebruik dit
switch om te voldoen aan een niet-standaard datamodel.

-mfix-en-continue
-ffix-en-continue
-findirect-gegevens
Genereer code die geschikt is voor snelle ontwikkeling. Nodig om gdb in te schakelen
laad dynamisch ".o"-bestanden in reeds lopende programma's. -findirect-gegevens en
-ffix-en-continue zijn bedoeld voor achterwaartse compatibiliteit.

-alle_laden
Laadt alle leden van statische archiefbibliotheken. zie man ld(1) voor meer informatie.

-arch_errors_fataal
Zorg ervoor dat de fouten die te maken hebben met bestanden met de verkeerde architectuur fataal zijn.

-bind_at_load
Zorgt ervoor dat het uitvoerbestand zodanig wordt gemarkeerd dat de dynamische linker alles bindt
ongedefinieerde verwijzingen wanneer het bestand wordt geladen of gestart.

-bundel
Produceer een Mach-o-bundelformaatbestand. zie man ld(1) voor meer informatie.

-bundel_lader uitvoerbaar
Deze optie specificeert de uitvoerbaar dat zal het build-uitvoerbestand laden
gekoppeld. zie man ld(1) voor meer informatie.

-dynamische lib
Wanneer deze optie wordt doorgegeven, produceert GCC een dynamische bibliotheek in plaats van een uitvoerbaar bestand
bij het koppelen, met behulp van de Darwin libtool opdracht.

-force_cpusubtype_ALL
Dit zorgt ervoor dat het uitvoerbestand van GCC de ALLE subtype, in plaats van een gecontroleerd door
de -mcpu or -maart optie.

-allowable_client klantnaam
-klantnaam
-compatibiliteit_versie
-huidige versie
-dode_strip
-afhankelijkheidsbestand
-dylib_bestand
-dylinker_installatienaam
-dynamisch
-geëxporteerde_symbols_list
-bestandslijst
-flat_naamruimte
-force_flat_naamruimte
-headerpad_max_install_names
-afbeelding_basis
-in het
-installatienaam
-keep_private_externs
-multi_module
-vermenigvuldig_gedefinieerd
-vermenigvuldig_gedefinieerd_ongebruikt
-noall_load
-no_dead_strip_inits_and_terms
-nofixvoorbinding
-geenmultidefs
-niet voorbinden
-neuslinkedit
-pagezero_size
-voorbinden
-prebind_all_twolevel_modules
-private_bundel
-read_only_relocs
-seks uitlijnen
-sectieobjectsymbolen
-waarom?
-seg1adr
-secreteren
-sectieobjectsymbolen
-sectorder
-segadr
-segs_read_only_adr
-segs_read_write_adr
-seg_addr_tabel
-seg_addr_tabel_bestandsnaam
-seglinkedit
-segrot
-segs_read_only_adr
-segs_read_write_adr
-enkele_module
-statisch
-sub_bibliotheek
-sub_paraplu
-tweeniveau_naamruimte
-paraplu
-onbepaald
-niet-geëxporteerde_symbolen_lijst
-zwakke_referentie_mismatches
-wat is geladen
Deze opties worden doorgegeven aan de Darwin-linker. De Darwin linker man-pagina beschrijft:
ze in detail.

December Alpha Opties

Deze -m opties zijn gedefinieerd voor de DEC Alpha-implementaties:

-mno-soft-float
-msoft-zweven
Gebruik (niet gebruiken) de hardware drijvende-komma-instructies voor drijvende-komma
activiteiten. Wanneer -msoft-zweven is gespecificeerd, functioneert in libgcc.a zal gewend zijn
drijvende-kommabewerkingen uitvoeren. Tenzij ze worden vervangen door routines die emuleren
de drijvende-kommabewerkingen, of zo gecompileerd dat dergelijke emulaties worden genoemd
routines, zullen deze routines drijvende-kommabewerkingen uitvoeren. Als je aan het compileren bent
voor een alfa zonder drijvende-kommabewerkingen moet u ervoor zorgen dat de bibliotheek dat is
gebouwd om ze niet te bellen.

Merk op dat Alpha-implementaties zonder drijvende-kommabewerkingen moeten hebben:
drijvende-kommaregisters.

-mfp-reg
-mno-fp-regs
Genereer code die gebruikmaakt (niet gebruikt) van de registerset met drijvende komma. -mno-fp-regs
impliceert -msoft-zweven. Als de registerset met drijvende komma niet wordt gebruikt, wordt drijvende komma
operanden worden doorgegeven in gehele registers alsof het gehele getallen en drijvende komma's zijn
resultaten worden doorgegeven in $0 in plaats van $f0. Dit is een niet-standaard belvolgorde, dus
elke functie met een drijvende-kommaargument of retourwaarde aangeroepen door gecompileerde code
Met -mno-fp-regs moet ook met die optie worden gecompileerd.

Een typisch gebruik van deze optie is het bouwen van een kernel die geen gebruik maakt van, en dus
niet opslaan en herstellen, eventuele drijvende-kommaregisters.

-mieeee
De Alpha-architectuur implementeert drijvende-komma-hardware die is geoptimaliseerd voor maximale
uitvoering. Het is grotendeels compatibel met de IEEE floating-point-standaard. Echter,
voor volledige naleving is software-assistentie vereist. Deze optie genereert code
volledig IEEE-conforme code behalve dat de onnauwkeurige vlag wordt niet onderhouden (zie hieronder).
Als deze optie is ingeschakeld, wordt de preprocessor-macro "_IEEE_FP" gedefinieerd tijdens:
compilatie. De resulterende code is minder efficiënt, maar kan correct ondersteunen
gedenormaliseerde getallen en uitzonderlijke IEEE-waarden zoals niet-een-nummer en plus/minus
oneindigheid. Andere Alpha-compilers noemen deze optie -ieee_with_no_inexact.

-mieee-met-onnauwkeurig
Dit is zoals -mieeee behalve dat de gegenereerde code ook de IEEE . handhaaft onnauwkeurige vlag.
Als u deze optie inschakelt, wordt de gegenereerde code volledig conform IEEE . geïmplementeerd
wiskunde. Naast "_IEEE_FP" wordt "_IEEE_FP_EXACT" gedefinieerd als een preprocessormacro.
Bij sommige Alpha-implementaties kan de resulterende code aanzienlijk langzamer worden uitgevoerd dan
de code die standaard wordt gegenereerd. Omdat er maar heel weinig code is die afhangt van de
onnauwkeurige vlag, zou u deze optie normaal gesproken niet moeten specificeren. Andere Alpha-compilers noemen
deze optie -ieee_met_onnauwkeurig.

-mfp-trap-modus=val-modus
Deze optie bepaalt welke drijvende-komma-gerelateerde traps zijn ingeschakeld. andere alfa
compilers noemen deze optie -fptm val-modus. De valmodus kan worden ingesteld op een van de vier
waarden:

n Dit is de standaard (normale) instelling. De enige vallen die zijn ingeschakeld, zijn de
die niet in de software kunnen worden uitgeschakeld (bijv. deling door nul trap).

u Naast de vallen die zijn ingeschakeld door n, zijn ook onderstroomvangers ingeschakeld.

su Like u, maar de instructies zijn gemarkeerd om veilig te zijn voor het voltooien van de software (zie
Alpha-architectuurhandleiding voor details).

op Like su, maar onnauwkeurige vallen zijn ook ingeschakeld.

-mfp-afrondingsmodus=afrondingsmodus
Selecteert de IEEE-afrondingsmodus. Andere Alpha-compilers noemen deze optie -vrm
afrondingsmodus. De afrondingsmodus kan een van zijn:

n Normale IEEE-afrondingsmodus. Drijvende-kommagetallen worden afgerond naar het dichtstbijzijnde
machinenummer of naar het even machinenummer in geval van gelijkspel.

m Rond af naar min oneindig.

c Gehakte afrondingsmodus. Drijvende-kommagetallen worden naar nul afgerond.

d Dynamische afrondingsmodus. Een veld in het drijvende-kommabesturingsregister (fpcr, Zie
Alpha-architectuur referentiehandleiding) regelt de afrondingsmodus die van kracht is. de C
bibliotheek initialiseert dit register voor afronding naar plus oneindig. Dus,
tenzij uw programma de wijzigt fpcr, d komt overeen met rond naar plus
oneindigheid.

-mtrap-precisie=trap-precisie
In de Alpha-architectuur zijn floating-point traps onnauwkeurig. Dit betekent zonder
software-assistentie het is onmogelijk om te herstellen van een zwevende val en programma
uitvoering moet normaal gesproken worden beëindigd. GCC kan code genereren die kan helpen
besturingssysteem trap handlers bij het bepalen van de exacte locatie die een
drijvende-kommaval. Afhankelijk van de vereisten van een toepassing, kunnen verschillende
nauwkeurigheidsniveaus kunnen worden geselecteerd:

p Precisie van het programma. Deze optie is de standaardoptie en betekent dat een traphandler alleen:
identificeren welk programma een drijvende-komma-uitzondering heeft veroorzaakt.

f Functie precisie. De trap-handler kan de functie bepalen die een
drijvende-komma uitzondering.

i Precisie van de instructie. De trap-handler kan de exacte instructie bepalen die:
veroorzaakte een drijvende-komma-uitzondering.

Andere Alpha-compilers bieden de equivalente opties genaamd -scope_veilig en
-hervatting_veilig.

-mieee-conform
Deze optie markeert de gegenereerde code als IEEE-conform. U mag deze optie niet gebruiken
tenzij u ook specificeert -mtrap-precisie=i en ook -mfp-trap-modus=su or
-mfp-trap-modus=sui. Het enige effect is dat de lijn wordt uitgezonden .vlag 48 in de functie
proloog van het gegenereerde montagebestand. Onder DEC Unix heeft dit tot gevolg dat
IEEE-conforme wiskundige bibliotheekroutines zullen worden gekoppeld.

-mbuild-constanten
Normaal gesproken onderzoekt GCC een 32- of 64-bits integer-constante om te zien of het deze kan construeren
van kleinere constanten in twee of drie instructies. Als dit niet het geval is, zal het de
constant als een letterlijke waarde en genereer code om deze tijdens runtime uit het gegevenssegment te laden.

Gebruik deze optie om te vereisen dat GCC construeert allen integer constanten met behulp van code, zelfs als
er zijn meer instructies voor nodig (het maximum is zes).

U zou deze optie normaal gesproken gebruiken om een ​​dynamische lader voor een gedeelde bibliotheek te bouwen. Zelf
een gedeelde bibliotheek, moet deze zich verplaatsen in het geheugen voordat hij de variabelen kan vinden
en constanten in zijn eigen gegevenssegment.

-malpha-as
-mg
Selecteer of u code wilt genereren die moet worden samengesteld door de door de leverancier geleverde assembler
(-malpha-as) of door de GNU-assembler -mg.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-m max
-mno-max
Geef aan of GCC code moet genereren om de optionele BWX, CIX, FIX en MAX . te gebruiken
instructie sets. De standaard is om de instructiesets te gebruiken die door de CPU worden ondersteund
type opgegeven via -mcpu= optie of die van de CPU waarop GCC is gebouwd als er geen was
gespecificeerd.

-mfloat-vax
-mfloat-ieee
Genereer code die in plaats daarvan VAX F en G drijvende-kommaberekeningen gebruikt (niet gebruikt)
van IEEE enkele en dubbele precisie.

-mexpliciete-relocs
-mno-expliciete-relocs
Oudere Alpha-assembleurs boden geen manier om symboolverplaatsingen te genereren, behalve via
assembler macro's. Het gebruik van deze macro's staat geen optimale instructieplanning toe.
GNU binutils vanaf versie 2.12 ondersteunt een nieuwe syntaxis waarmee de compiler:
expliciet aangeven welke verhuizingen voor welke opdracht moeten gelden. Deze optie is
vooral handig voor debuggen, omdat GCC de mogelijkheden van de assembler detecteert wanneer het
is gebouwd en stelt de standaard dienovereenkomstig in.

-msmall-gegevens
-mgrote-gegevens
. -mexpliciete-relocs is van kracht, statische gegevens zijn toegankelijk via gp-relatief
verhuizingen. Wanneer -msmall-gegevens wordt gebruikt, worden objecten van 8 bytes lang of kleiner geplaatst in
a Klein gegevens gebied (de secties ".sdata" en ".sbss") en zijn toegankelijk via 16-bit
verhuizingen van het $gp-register. Dit beperkt de grootte van het kleine gegevensgebied tot:
64 KB, maar maakt het mogelijk om de variabelen direct te benaderen via een enkele instructie.

De standaard is -mgrote-gegevens. Met deze optie is het gegevensgebied beperkt tot net onder
2 GB. Programma's die meer dan 2 GB aan gegevens nodig hebben, moeten "malloc" of "mmap" gebruiken om
wijs de gegevens toe in de heap in plaats van in het gegevenssegment van het programma.

Bij het genereren van code voor gedeelde bibliotheken, -fpic impliceert -msmall-gegevens en -fPIC
impliceert -mgrote-gegevens.

-msmall-tekst
-mgrote-tekst
. -msmall-tekst wordt gebruikt, gaat de compiler ervan uit dat de code van het hele programma
(of gedeelde bibliotheek) past in 4MB, en is dus bereikbaar met een branch-instructie.
. -msmall-gegevens wordt gebruikt, kan de compiler aannemen dat alle lokale symbolen de delen
dezelfde $gp-waarde, en dus het aantal instructies dat nodig is voor een functie verminderen
bel van 4 naar 1.

De standaard is -mgrote-tekst.

-mcpu=cpu_type
Stel de instructieset en instructieplanningsparameters in voor het machinetype
cpu_type. U kunt ofwel de EV stijlnaam of het bijbehorende chipnummer.
GCC ondersteunt planningsparameters voor de EV4-, EV5- en EV6-familie van processors en
kiest de standaardwaarden voor de instructieset van de processor die u opgeeft.
Als u geen processortype opgeeft, gebruikt GCC standaard de processor waarop het
compiler is gebouwd.

Ondersteunde waarden voor cpu_type zijn

ev4
ev45
21064
Schema's als een EV4 en heeft geen instructieset-uitbreidingen.

ev5
21164
Schema's als een EV5 en heeft geen instructieset-uitbreidingen.

ev56
21164
Schema's als een EV5 en ondersteunt de BWX-extensie.

pca56
21164pc
21164PC
Schema's als een EV5 en ondersteunt de BWX- en MAX-extensies.

ev6
21264
Schema's als een EV6 en ondersteunt de BWX-, FIX- en MAX-extensies.

ev67
21264
Schema's als een EV6 en ondersteunt de BWX-, CIX-, FIX- en MAX-extensies.

Native toolchains ondersteunen ook de waarde inheemse, die de beste architectuur selecteert
optie voor de hostprocessor. -mcpu=natief heeft geen effect als GCC niet herkent
de verwerker.

-mtune=cpu_type
Stel alleen de instructieplanningsparameters in voor het machinetype cpu_type. De
instructieset wordt niet gewijzigd.

Native toolchains ondersteunen ook de waarde inheemse, die de beste architectuur selecteert
optie voor de hostprocessor. -mtune=native heeft geen effect als GCC niet herkent
de verwerker.

-geheugen-latentie=niet de tijd of
Stelt de latentie in die de planner moet aannemen voor typische geheugenreferenties zoals gezien door
de applicatie. Dit aantal is sterk afhankelijk van de gebruikte geheugentoegangspatronen
door de toepassing en de grootte van de externe cache op de machine.

Geldige opties voor niet de tijd of zijn

aantal
Een decimaal getal dat klokcycli weergeeft.

L1
L2
L3
hoofd-
De compiler bevat schattingen van het aantal klokcycli voor "typische" EV4 &
EV5-hardware voor de Level 1, 2 & 3 caches (ook wel Dcache, Scache en . genoemd)
Bcache), evenals naar het hoofdgeheugen. Merk op dat L3 alleen geldig is voor EV5.

December Alfa/VMS Opties

Deze -m opties zijn gedefinieerd voor de DEC Alpha/VMS-implementaties:

-mvms-retourcodes
Retourneer VMS-conditiecodes van main. De standaard is om POSIX-stijlvoorwaarde te retourneren
(bijv. fout)codes.

-mdebug-main=voorvoegsel
Markeer de eerste routine waarvan de naam begint met voorvoegsel als de belangrijkste routine voor de
debugger.

-mmalloc64
Standaard ingesteld op 64-bits geheugentoewijzingsroutines.

FR30 Opties

Deze opties zijn specifiek gedefinieerd voor de FR30-poort.

-mklein-model
Gebruik het kleine adresruimtemodel. Dit kan kleinere code produceren, maar het gaat ervan uit:
dat alle symbolische waarden en adressen in een bereik van 20 bits passen.

-mno-lsim
Neem aan dat runtime-ondersteuning is geleverd en dat het dus niet nodig is om de
simulatorbibliotheek (libsim.a) op de linker-opdrachtregel.

FRV Opties

-mgpr-32
Gebruik alleen de eerste 32 algemene registers.

-mgpr-64
Gebruik alle 64 algemene registers.

-mfpr-32
Gebruik alleen de eerste 32 drijvende-kommaregisters.

-mfpr-64
Gebruik alle 64 drijvende-kommaregisters.

-mhard-zweven
Gebruik hardware-instructies voor drijvende-kommabewerkingen.

-msoft-zweven
Gebruik bibliotheekroutines voor drijvende-kommabewerkingen.

-malloc-cc
Dynamisch toewijzen van conditiecoderegisters.

-mfixed-cc
Probeer niet om conditiecoderegisters dynamisch toe te wijzen, gebruik alleen "icc0" en
"fcc0".

-mdwoord
Wijzig ABI om dubbele woord-insns te gebruiken.

-mno-dword
Gebruik geen dubbele woordinstructies.

-mdubbel
Gebruik dubbele instructies met drijvende komma.

-mno-dubbel
Gebruik geen dubbele instructies met drijvende komma.

-media
Gebruik media-instructies.

-mno-media
Gebruik geen media-instructies.

-mmuladd
Gebruik instructies voor vermenigvuldigen en optellen/aftrekken.

-mno-muladd
Gebruik geen instructies voor vermenigvuldigen en optellen/aftrekken.

-mfdpic
Selecteer de FDPIC ABI, die functiedescriptors gebruikt om verwijzingen naar . weer te geven
functies. Zonder enige PIC/PIE-gerelateerde opties, impliceert dit: -fPIE. Met -fpic or
-fpie, gaat ervan uit dat GOT-items en kleine gegevens binnen een bereik van 12 bits van de GOT . liggen
basisadres; met -fPIC or -fPIE, GOT-offsets worden berekend met 32 ​​bits. Met een
bfin-elf doel, deze optie houdt in: -msim.

-minline-plt
Inline inschakelen van PLT-vermeldingen in functieaanroepen naar functies waarvan niet bekend is dat ze
lokaal binden. Het heeft geen effect zonder -mfdpic. Het is standaard ingeschakeld als
optimaliseren voor snelheid en compileren voor gedeelde bibliotheken (dwz -fPIC or -fpic), of
wanneer een optimalisatieoptie zoals: -O3 of hoger is aanwezig in de opdrachtregel.

-mTLS
Ga uit van een groot TLS-segment bij het genereren van thread-lokale code.

-mtls
Ga niet uit van een groot TLS-segment bij het genereren van thread-lokale code.

-mgprel-ro
Schakel het gebruik van "GPREL"-verhuizingen in de FDPIC ABI in voor gegevens waarvan bekend is dat ze
alleen-lezen secties. Het is standaard ingeschakeld, behalve voor -fpic or -fpie: ondanks dat
het kan helpen om de globale offset-tabel kleiner te maken, het verhandelt 1 instructie voor 4. Met
-fPIC or -fPIE, het verhandelt 3 instructies voor 4, waarvan er één kan worden gedeeld door meerdere
symbolen, en het vermijdt de noodzaak van een GOT-invoer voor het symbool waarnaar wordt verwezen, dus het is
meer kans op een overwinning. Als het niet is, -mno-gprel-ro kan worden gebruikt om het uit te schakelen.

-multilib-bibliotheek-foto
Link met de (bibliotheek, niet FD) fotobibliotheken. Het wordt geïmpliceerd door -mlibrary-foto, ook
als door -fPIC en -fpic zonder -mfdpic. Je zou het nooit expliciet moeten gebruiken.

-mlinked-fp
Volg de EABI-vereiste om altijd een frame-aanwijzer te maken wanneer een stapelframe
wordt toegewezen. Deze optie is standaard ingeschakeld en kan worden uitgeschakeld met
-mno-gekoppelde-fp.

-mlong-oproepen
Gebruik indirecte adressering om functies buiten de huidige compilatie-eenheid aan te roepen. Dit
maakt het mogelijk om de functies overal binnen de 32-bits adresruimte te plaatsen.

-kwaadaardige-labels
Probeer labels uit te lijnen op een grens van 8 bytes door nops in het vorige pakket in te voegen.
Deze optie heeft alleen effect als VLIW-packing is ingeschakeld. Het maakt geen nieuwe
pakketten; het voegt alleen nops toe aan bestaande.

-mlibrary-foto
Genereer positie-onafhankelijke EABI-code.

-macc-4
Gebruik alleen de eerste vier media-accumulatorregisters.

-macc-8
Gebruik alle acht media-accumulatorregisters.

-mpak
Pak VLIW-instructies in.

-mno-pakket
Verpak geen VLIW-instructies.

-mno-vlaggen
Markeer geen ABI-switches in e_flags.

-mcond-zet
Schakel het gebruik van voorwaardelijke verplaatsingsinstructies in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-cond-zet
Schakel het gebruik van voorwaardelijke verplaatsingsinstructies uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mscc
Schakel het gebruik van voorwaardelijke set-instructies in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-scc
Schakel het gebruik van voorwaardelijke set-instructies uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mcond-exec
Schakel het gebruik van voorwaardelijke uitvoering in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-cond-exec
Schakel het gebruik van voorwaardelijke uitvoering uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mvliw-tak
Voer een pas uit om takken in VLIW-instructies in te pakken (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-vliw-tak
Voer geen pas uit om takken in VLIW-instructies in te pakken.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mmulti-cond-exec
Optimalisatie van "&&" en "||" inschakelen in voorwaardelijke uitvoering (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-multi-cond-exec
Schakel optimalisatie van "&&" en "||" uit in voorwaardelijke uitvoering.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mnested-cond-exec
Geneste optimalisaties voor voorwaardelijke uitvoering inschakelen (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-geneste-cond-exec
Schakel geneste optimalisaties voor voorwaardelijke uitvoering uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-moptimize-lid
Deze schakeloptie verwijdert overbodige "membar"-instructies uit de door de compiler gegenereerde code.
Het is standaard ingeschakeld.

-mno-optimaliseer-membar
Deze schakelaar schakelt de automatische verwijdering van overbodige "membar"-instructies uit de
gegenereerde code.

-mtomcat-statistieken
Laat gas katerstatistieken afdrukken.

-mcpu=cpu
Selecteer het processortype waarvoor u code wilt genereren. Mogelijke waarden zijn frv, fr550,
kater, fr500, fr450, fr405, fr400, fr300 en simpel.

GNU / Linux Opties

Deze -m opties zijn gedefinieerd voor GNU/Linux-doelen:

-mglibc
Gebruik de GNU C-bibliotheek. Dit is de standaard behalve aan *-*-linux-*uclibc* en
*-*-linux-*android* targets.

-muclib
Gebruik de uClibc C-bibliotheek. Dit is standaard ingeschakeld *-*-linux-*uclibc* targets.

-mbionisch
Gebruik de Bionic C-bibliotheek. Dit is standaard ingeschakeld *-*-linux-*android* targets.

-mandroïde
Compileer code die compatibel is met het Android-platform. Dit is standaard ingeschakeld
*-*-linux-*android* targets.

Bij het compileren schakelt deze optie: -mbionisch, -fPIC, -fno-uitzonderingen en -fno-rtti by
standaard. Bij het koppelen zorgt deze optie ervoor dat het GCC-stuurprogramma Android-specifieke opties doorgeeft
naar de koppelaar. Ten slotte zorgt deze optie ervoor dat de preprocessor-macro "__ANDROID__" wordt
gedefinieerd.

-tno-android-cc
Compilatie-effecten van . uitschakelen -mandroïde, dwz niet inschakelen -mbionisch, -fPIC,
-fno-uitzonderingen en -fno-rtti standaard.

-tno-android-ld
Schakel koppelingseffecten van . uit -mandroïde, dat wil zeggen, geef standaard Linux-koppelingsopties door aan de
koppelaar.

H8 / 300 Opties

Deze -m opties zijn gedefinieerd voor de H8/300 implementaties:

-montspan
Kort sommige adresverwijzingen in tijdens de koppelingstijd, indien mogelijk; gebruikt de linker-optie
-kom tot rust.

-mh Genereer code voor de H8/300H.

-Mevrouw Genereer code voor de H8S.

- mn Genereer code voor de H8S en H8/300H in de normale modus. Deze schakelaar moet worden gebruikt
ofwel met -mh or -Mevrouw.

-ms2600
Genereer code voor de H8S/2600. Deze schakelaar moet worden gebruikt met: -Mevrouw.

-mint32
Maak standaard "int" data 32 bits.

-kwaadaardig-300
Gebruik op de H8/300H en H8S dezelfde uitlijningsregels als voor de H8/300. De standaard
voor de H8/300H en H8S is het uitlijnen van longs en floats op 4-byte-grenzen.
-kwaadaardig-300 zorgt ervoor dat ze worden uitgelijnd op 2-byte grenzen. Deze optie heeft geen effect
op de H8/300.

HPPA Opties

Deze -m opties zijn gedefinieerd voor de HPPA-familie van computers:

-maart=architectuur-type
Genereer code voor de opgegeven architectuur. De keuzes voor architectuur-type zijn
1.0 voor PA 1.0, 1.1 voor PA 1.1, en 2.0 voor PA 2.0-processors. Verwijzen naar
/usr/lib/sched.models op een HP-UX-systeem om de juiste architectuuroptie te bepalen
voor uw automaat. Code die is gecompileerd voor architecturen met een lager nummer, wordt uitgevoerd op hogere
genummerde architecturen, maar niet andersom.

-mpa-risico-1-0
-mpa-risico-1-1
-mpa-risico-2-0
Synoniemen voor -maart=1.0, -maart=1.1 en -maart=2.0 respectievelijk.

-mbig-schakelaar
Genereer code die geschikt is voor grote schakeltabellen. Gebruik deze optie alleen als de
assembler/linker klagen over vertakkingen die buiten het bereik vallen binnen een schakeltabel.

-mjump-in-vertraging
Vul vertragingsslots van functieaanroepen met onvoorwaardelijke springinstructies door te wijzigen
de retouraanwijzer voor de functieaanroep om het doel van de voorwaardelijke sprong te zijn.

-mdisable-fpregs
Voorkom dat drijvende-kommaregisters op enigerlei wijze worden gebruikt. Dit is nodig voor
het compileren van kernels die luie contextwisselingen van drijvende-kommaregisters uitvoeren. Indien
u deze optie gebruikt en probeert om drijvende-kommabewerkingen uit te voeren, de compiler
breekt af.

-mdisable-indexering
Voorkom dat de compiler indexeringsadresmodi gebruikt. Dit vermijdt nogal wat
obscure problemen bij het compileren van door MIG gegenereerde code onder MACH.

-mno-space-regs
Genereer code die ervan uitgaat dat het doel geen spatieregisters heeft. Hierdoor kan GCC
genereer snellere indirecte oproepen en gebruik ongeschaalde indexadresmodi.

Dergelijke code is geschikt voor PA-systemen en kernels van niveau 0.

-mfast-indirecte-oproepen
Genereer code die ervan uitgaat dat oproepen nooit de ruimtegrenzen overschrijden. Hierdoor kan GCC
code uitzenden die snellere indirecte oproepen uitvoert.

Deze optie werkt niet in aanwezigheid van gedeelde bibliotheken of geneste functies.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-mlong-load-store
Genereer laad- en bewaarsequenties van 3 instructies zoals soms vereist door de HP-UX 10
koppelaar. Dit is gelijk aan de +k optie voor de HP-compilers.

-mportable-runtime
Gebruik de door HP voorgestelde conventies voor mobiel bellen voor ELF-systemen.

-mg
Schakel het gebruik van assembler-richtlijnen in die alleen GAS begrijpt.

-mschema=CPU-type
Schemacode volgens de beperkingen voor het machinetype CPU-type. De keuzes
For CPU-type zijn 700 7100, 7100LC, 7200, 7300 en 8000. Verwijzen naar
/usr/lib/sched.models op een HP-UX-systeem om de juiste planningsoptie te bepalen voor:
uw automaat. De standaard planning is 8000.

-mlinker-opt
Schakel de optimalisatiepas in de HP-UX-linker in. Merk op dat dit symbolische foutopsporing maakt
onmogelijk. Het activeert ook een bug in de HP-UX 8 en HP-UX 9 linkers waarin ze
geven valse foutmeldingen bij het koppelen van sommige programma's.

-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma. Waarschuwing: het vereiste
bibliotheken zijn niet voor alle HPPA-doelen beschikbaar. Normaal gesproken zijn de faciliteiten van de
de gebruikelijke C-compiler van de machine worden gebruikt, maar dit kan niet rechtstreeks in cross-
compilatie. U moet uw eigen regelingen treffen om voor een geschikte bibliotheek te zorgen
functies voor cross-compilatie.

-msoft-zweven verandert de aanroepconventie in het uitvoerbestand; daarom is het alleen
handig als je compileert allen van een programma met deze optie. In het bijzonder moet u:
compileren libgcc.a, de bibliotheek die bij GCC wordt geleverd, met -msoft-zweven hiervoor
werken.

-msio
Genereer de predefine, "_SIO", voor server IO. De standaard is -mwsio. Dit genereert
de predefinities, "__hp9000s700", "__hp9000s700__" en "_WSIO", voor werkstation IO.
Deze opties zijn beschikbaar onder HP-UX en HI-UX.

-mgnu-ld
Gebruik GNU ld specifieke opties. Dit gaat voorbij -gedeeld to ld bij het bouwen van een gedeeld
bibliotheek. Het is de standaardinstelling wanneer GCC, expliciet of impliciet, is geconfigureerd met de
GNU-linker. Deze optie heeft geen invloed op welke ld wordt aangeroepen, alleen
verandert welke parameters worden doorgegeven aan dat ld. De ld die wordt aangeroepen wordt bepaald door
de --met-ld configuratieoptie, het zoekpad van het GCC-programma en ten slotte door de gebruikers
PATH. De linker die door GCC wordt gebruikt, kan worden afgedrukt met: welke `gcc` -print-prog-naam=ld`.
Deze optie is alleen beschikbaar op de 64-bits HP-UX GCC, dwz geconfigureerd met
hppa*64*-*-hpux*.

-mhp-ld
Gebruik HP ld specifieke opties. Dit gaat voorbij -b tot ld bij het bouwen van een gedeelde bibliotheek en
passes +Accepteren Type komt niet overeen naar ld op alle links. Het is de standaard wanneer GCC is
expliciet of impliciet geconfigureerd met de HP linker. Deze optie heeft niet
welk effect dan ook waarop ld wordt aangeroepen, het verandert alleen welke parameters daaraan worden doorgegeven
ld. De ld die wordt aangeroepen wordt bepaald door de --met-ld configuratieoptie, GCC's
programma zoekpad, en ten slotte door de gebruiker PATH. De door GCC gebruikte linker kan zijn
afgedrukt met behulp van welke `gcc` -print-prog-naam=ld`. Deze optie is alleen beschikbaar op de
64-bits HP-UX GCC, dwz geconfigureerd met hppa*64*-*-hpux*.

-mlong-oproepen
Genereer code die lange oproepreeksen gebruikt. Dit zorgt ervoor dat een oproep altijd kan
om linker gegenereerde stubs te bereiken. De standaardinstelling is om alleen lange gesprekken te genereren wanneer de
afstand van de oproeplocatie tot het begin van de functie of vertaaleenheid, zoals
het geval kan zijn, een vooraf gedefinieerde limiet overschrijdt die is ingesteld door het gebruikte vertakkingstype. De
limieten voor normale oproepen zijn respectievelijk 7,600,000 en 240,000 bytes voor de PA 2.0
en PA 1.X-architecturen. Sibcalls zijn altijd beperkt tot 240,000 bytes.

Afstanden worden gemeten vanaf het begin van functies bij gebruik van de
-ffunctie-secties optie, of bij gebruik van de -mg en -mno-draagbare-runtime opties
samen onder HP-UX met de SOM-linker.

Het is normaal gesproken niet wenselijk om deze optie te gebruiken, omdat dit de prestaties zal verminderen.
Het kan echter nuttig zijn in grote toepassingen, vooral wanneer er sprake is van gedeeltelijke koppeling
gebruikt om de applicatie te bouwen.

De soorten lange oproepen die worden gebruikt, zijn afhankelijk van de mogelijkheden van de assembler en linker,
en het type code dat wordt gegenereerd. De impact op systemen die lang
absolute oproepen, en lange pic symbol-differentie of pc-relatieve oproepen zouden moeten zijn
relatief klein. Een indirecte oproep wordt echter gebruikt op 32-bits ELF-systemen in pic-code
en het is vrij lang.

-munix=unix-standaard
Genereer vooraf gedefinieerde compiler en selecteer een startbestand voor de opgegeven UNIX-standaard.
De keuzes voor unix-standaard zijn 93, 95 en 98. 93 wordt ondersteund op alle HP-UX-versies.
95 is beschikbaar op HP-UX 10.10 en later. 98 is beschikbaar op HP-UX 11.11 en later.
De standaardwaarden zijn 93 voor HP-UX 10.00, 95 voor HP-UX 10.10 tot 11.00 uur, en 98
voor HP-UX 11.11 en hoger.

-munix=93 biedt dezelfde predefinities als GCC 3.3 en 3.4. -munix=95 biedt
aanvullende predefinities voor "XOPEN_UNIX" en "_XOPEN_SOURCE_EXTENDED", en het startbestand
unix95.o. -munix=98 biedt aanvullende predefinities voor "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" en "_INCLUDE_XOPEN_SOURCE_500",
en het startbestand unix98.o.

Het is belangrijk om op te merken dat deze optie de interfaces voor verschillende bibliotheken verandert
routines. Het beïnvloedt ook het operationele gedrag van de C-bibliotheek. Dus, extreem
voorzichtigheid is geboden bij het gebruik van deze optie.

Bibliotheekcode die bedoeld is om met meer dan één UNIX-standaard te werken, moet worden getest,
de variabele instellen en herstellen __xpg4_extended_mask zoals gepast. De meeste GNU-software
biedt deze mogelijkheid niet.

-nolibld
Onderdruk het genereren van koppelingsopties om libdld.sl te doorzoeken wanneer de -statisch Optie is
gespecificeerd op HP-UX 10 en later.

-statisch
De HP-UX implementatie van setlocale in libc is afhankelijk van libdld.sl. Daar
is geen archiefversie van libdld.sl. Dus, wanneer de -statisch optie is opgegeven,
speciale koppelingsopties zijn nodig om deze afhankelijkheid op te lossen.

Op HP-UX 10 en later voegt het GCC-stuurprogramma de nodige opties toe om te koppelen met
libdld.sl wanneer de -statisch optie is opgegeven. Dit zorgt ervoor dat de resulterende binaire
dynamisch zijn. Op de 64-bits poort genereren de linkers standaard dynamische binaire bestanden in
elk geval. De -nolibld optie kan worden gebruikt om te voorkomen dat het GCC-stuurprogramma wordt toegevoegd
deze koppelingsopties.

-draden
Ondersteuning voor multithreading toevoegen met de dce draad bibliotheek onder HP-UX. Deze optie
stelt vlaggen in voor zowel de preprocessor als de linker.

Intel 386 en AMD x86-64 Opties

Deze -m opties zijn gedefinieerd voor de i386- en x86-64-familie van computers:

-mtune=CPU-type
Stem af op CPU-type alles wat van toepassing is over de gegenereerde code, behalve de ABI
en de reeks beschikbare instructies. De keuzes voor CPU-type zijn:

algemeen
Produceer code die is geoptimaliseerd voor de meest voorkomende IA32/AMD64/EM64T-processors. als jij
weet op welke CPU uw code wordt uitgevoerd, dan moet u de bijbehorende . gebruiken
-mtune optie in plaats van -mtune=generiek. Maar als u niet precies weet welke CPU
gebruikers van uw applicatie zullen hebben, dan moet u deze optie gebruiken.

Naarmate nieuwe processors op de markt worden geïmplementeerd, is het gedrag van deze optie
zal veranderen. Daarom, als u een upgrade uitvoert naar een nieuwere versie van GCC, wordt de code
gegenereerde optie verandert om de processors weer te geven die toen het meest werden gebruikt
die versie van GCC is uitgebracht.

Er is geen -maart=generiek optie omdat -maart geeft de instructieset de . aan
compiler kan gebruiken, en er is geen generieke instructieset die voor iedereen van toepassing is
verwerkers. In tegenstelling tot, -mtune geeft de processor aan (of, in dit geval,
verzameling processors) waarvoor de code is geoptimaliseerd.

inheemse
Dit selecteert de CPU waarop moet worden afgestemd tijdens het compileren door de processor te bepalen
type compileermachine. Gebruik makend van -mtune=native zal geoptimaliseerde code produceren
voor de lokale machine onder de beperkingen van de geselecteerde instructieset.
gebruik -maart=inheems zal alle subsets van instructies inschakelen die worden ondersteund door de local
machine (vandaar dat het resultaat mogelijk niet op verschillende machines kan worden uitgevoerd).

i386
Originele Intel i386 CPU.

i486
De i486-CPU van Intel. (Er is geen planning geïmplementeerd voor deze chip.)

i586, pentium
Intel Pentium CPU zonder MMX-ondersteuning.

pentium-mmx
Intel PentiumMMX CPU gebaseerd op Pentium-kern met ondersteuning voor MMX-instructieset.

pentiumpro
Intel PentiumPro-CPU.

i686
Zelfde als "algemeen", maar bij gebruik als "mars" optie, PentiumPro instructieset
zal worden gebruikt, dus de code zal op alle i686-familiechips worden uitgevoerd.

pentium2
Intel Pentium2 CPU gebaseerd op PentiumPro-kern met ondersteuning voor MMX-instructieset.

pentium3, pentium3m
Intel Pentium3 CPU gebaseerd op PentiumPro-kern met MMX- en SSE-instructieset
Ondersteunen.

pentium-m
Energiezuinige versie van Intel Pentium3 CPU met MMX-, SSE- en SSE2-instructieset
steun. Gebruikt door Centrino-notebooks.

pentium4, pentium4m
Intel Pentium4 CPU met ondersteuning voor MMX, SSE en SSE2 instructieset.

prescott
Verbeterde versie van Intel Pentium4 CPU met MMX-, SSE-, SSE2- en SSE3-instructies
ondersteuning instellen.

geen
Verbeterde versie van Intel Pentium4 CPU met 64-bits extensies, MMX, SSE, SSE2 en
Ondersteuning voor SSE3-instructieset.

core2
Intel Core2 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3 en SSSE3 instructie
ondersteuning instellen.

kerni7
Intel Core i7 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 en
Ondersteuning voor SSE4.2-instructieset.

corei7-avx
Intel Core i7 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2, AVX, AES en PCLMUL instructieset.

kern-avx-i
Intel Core CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND en F16C instructieset.

atoom
Intel Atom CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3 en SSSE3 instructie
ondersteuning instellen.

k6 AMD K6 CPU met ondersteuning voor MMX-instructieset.

k6-2, k6-3
Verbeterde versies van AMD K6 CPU met MMX en 3DNow! instructieset ondersteuning.

atlon, atlon-tbird
AMD Athlon CPU met MMX, 3dNOW!, verbeterde 3DNow! en SSE prefetch instructies
Ondersteunen.

atletiek-4, atletiek-xp, atlon-mp
Verbeterde AMD Athlon CPU met MMX, 3DNow!, verbeterde 3DNow! en volledige SSE instructie
ondersteuning instellen.

k8, opteron, atletiek64, athlon-fx
Op AMD K8 core gebaseerde CPU's met ondersteuning voor x86-64-instructieset. (Dit vervangt MMX,
SSE, SSE2, 3DNow!, verbeterde 3DNow! en 64-bits instructieset-extensies.)

k8-sse3, opteron-sse3, atlon64-sse3
Verbeterde versies van k8, opteron en athlon64 met ondersteuning voor SSE3-instructieset.

amdfam10, Barcelona
AMD Family 10h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, verbeterde 3DNow!, ABM en 64-bit
instructieset-extensies.)

bdver1
AMD Family 15h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructieset-extensies.)

bdver2
AMD Family 15h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructieset-extensies.)

btver1
AMD Family 14h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM en 64-bit instructieset
extensies.)

lier-c6
IDT Winchip C6 CPU, behandeld op dezelfde manier als i486 met extra MMX-instructieset
Ondersteunen.

lier2
IDT Winchip2 CPU, behandeld op dezelfde manier als i486 met extra MMX en 3DNow!
instructieset ondersteuning.

c3 Via C3 CPU met MMX en 3DNow! instructieset ondersteuning. (Geen planning is
geïmplementeerd voor deze chip.)

c3-2
Via C3-2 CPU met ondersteuning voor MMX- en SSE-instructieset. (Geen planning is
geïmplementeerd voor deze chip.)

geode
Geïntegreerde AMD CPU met MMX en 3DNow! instructieset ondersteuning.

Bij het kiezen van een specifiek CPU-type zal daar de zaken op de juiste manier voor inplannen
bepaalde chip, zal de compiler geen code genereren die niet draait op de
standaard machinetype zonder de -maart=CPU-type optie wordt gebruikt. Als bijvoorbeeld
GCC is dan geconfigureerd voor i686-pc-linux-gnu -mtune=pentium4 zal code genereren die
is afgestemd op Pentium4, maar zal nog steeds op i686-machines draaien.

-maart=CPU-type
Genereer instructies voor het machinetype CPU-type. De keuzes voor CPU-type de
hetzelfde als voor -mtune. Bovendien specificeren -maart=CPU-type impliceert -mtune=CPU-type.

-mcpu=CPU-type
Een verouderd synoniem voor -mtune.

-mfpmath=eenheid
Genereer drijvende-kommaberekeningen voor geselecteerde eenheid eenheid. De keuzes voor eenheid zijn:

387 Gebruik de standaard 387 floating-point coprocessor die aanwezig is op de meeste chips
en anders geëmuleerd. Code die met deze optie is gecompileerd, wordt bijna overal uitgevoerd.
De tijdelijke resultaten worden berekend in 80-bits precisie in plaats van de precisie
gespecificeerd door het type, wat resulteert in iets andere resultaten in vergelijking met de meeste
andere chips. Zien -float-winkel voor een meer gedetailleerde beschrijving.

Dit is de standaardkeuze voor de i386-compiler.

sse Gebruik scalaire drijvende-komma-instructies die aanwezig zijn in de SSE-instructieset. Dit
instructieset wordt ondersteund door Pentium3 en nieuwere chips, in de AMD lijn door
Athlon-4, Athlon-xp en Athlon-mp-chips. De eerdere versie van SSE-instructie
set ondersteunt alleen rekenen met enkele precisie, dus de dubbele en uitgebreide
precisieberekeningen worden nog steeds gedaan met 387. Een latere versie, alleen aanwezig in
Pentium4 en de toekomstige AMD x86-64-chips ondersteunen rekenkunde met dubbele precisie
ook.

Voor de i386-compiler moet u gebruiken -maart=CPU-type, -ms or -msse2 schakelaars
om SSE-extensies in te schakelen en deze optie effectief te maken. Voor de x86-64-compiler,
deze extensies zijn standaard ingeschakeld.

De resulterende code zou in de meeste gevallen aanzienlijk sneller moeten zijn en
vermijd de numerieke instabiliteitsproblemen van 387-code, maar kan sommige bestaande breken
code die verwacht dat tijdelijke 80 bits zijn.

Dit is de standaardkeuze voor de x86-64-compiler.

zo,387
sse+387
zowel
Probeer beide instructiesets tegelijk te gebruiken. Dit verdubbelt effectief
hoeveelheid beschikbare registers en op chips met afzonderlijke uitvoeringseenheden voor 387
en SSE ook de uitvoeringsmiddelen. Gebruik deze optie met zorg, want het is nog steeds
experimenteel, omdat de GCC-registertoewijzer niet afzonderlijk model
functionele eenheden goed resulterend in instabiele prestaties.

-masm=tongval
Voer asm-instructies uit met geselecteerd tongval. Ondersteunde keuzes zijn: intel or naar
(de standaard). Darwin ondersteunt niet intel.

-mieee-fp
-mno-ieee-fp
Bepaal of de compiler wel of niet IEEE-drijvende-kommavergelijkingen gebruikt. Deze
correct omgaan met het geval waarin het resultaat van een vergelijking ongeordend is.

-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma. Waarschuwing: het vereiste
bibliotheken maken geen deel uit van GCC. Normaal gesproken zijn de faciliteiten van de gebruikelijke C
compiler worden gebruikt, maar dit kan niet rechtstreeks in cross-compilatie worden gedaan. Je moet
maak uw eigen arrangementen om geschikte bibliotheekfuncties te bieden voor cross-
compilatie.

Op machines waar een functie drijvende-kommaresultaten retourneert in het 80387-register
stack, kunnen sommige drijvende-komma-opcodes worden uitgezonden, zelfs als: -msoft-zweven is gebruikt.

-mno-fp-ret-in-387
Gebruik de FPU-registers niet voor retourwaarden van functies.

De gebruikelijke aanroepconventie heeft functies die waarden van de typen "float" en "double" retourneren
in een FPU-register, ook als er geen FPU is. Het idee is dat het besturingssysteem
zou een FPU moeten emuleren.

De optie -mno-fp-ret-in-387 zorgt ervoor dat dergelijke waarden worden geretourneerd in de gewone CPU
in plaats daarvan registreert.

-mno-fancy-wiskunde-387
Sommige 387-emulators ondersteunen de instructies "sin", "cos" en "sqrt" niet voor de
387. Specificeer deze optie om te voorkomen dat deze instructies worden gegenereerd. Deze optie is de
standaard op FreeBSD, OpenBSD en NetBSD. Deze optie wordt overschreven wanneer: -maart
geeft aan dat de doel-CPU altijd een FPU zal hebben en de instructie dus niet
emulatie nodig. Vanaf revisie 2.6.1 worden deze instructies alleen gegenereerd als u
gebruik ook de -funsafe-math-optimalisaties schakelaar.

-kwaadaardig-dubbel
-mno-uitlijnen-dubbel
Bepaal of GCC de variabelen "double", "long double" en "long long" uitlijnt op a
grens van twee woorden of een grens van één woord. Uitlijnen van "dubbele" variabelen op een twee-woord
border produceert code die iets sneller draait op een Pentium ten koste van meer
geheugen.

Op x86-64, -kwaadaardig-dubbel is standaard ingeschakeld.

Waarschuwing: als u de -kwaadaardig-dubbel switch, structuren die de bovenstaande typen bevatten
zal anders worden uitgelijnd dan de gepubliceerde binaire interface van de toepassing
specificaties voor de 386 en zal niet binair compatibel zijn met structuren in code
gecompileerd zonder die schakelaar.

-m96bit-lang-dubbel
-m128bit-lang-dubbel
Deze schakelaars regelen de grootte van het "lange dubbele" type. De binaire toepassing van i386
interface specificeert de grootte als 96 bits, dus -m96bit-lang-dubbel is de standaard in
32-bits modus.

Moderne architecturen (Pentium en nieuwer) geven er de voorkeur aan dat "lange dubbele" wordt uitgelijnd op een 8-
of 16-byte grens. In arrays of structuren die voldoen aan de ABI is dit niet:
mogelijk. Dus specificeren -m128bit-lang-dubbel lijnt "long double" uit op een 16-byte
grens door de "lange dubbele" op te vullen met een extra 32-bits nul.

In de x86-64-compiler, -m128bit-lang-dubbel is de standaardkeuze als zijn ABI
geeft aan dat "long double" moet worden uitgelijnd op een grens van 16 bytes.

Merk op dat geen van deze opties extra precisie mogelijk maakt ten opzichte van de x87-standaard
van 80 bits voor een "long double".

Waarschuwing: als u de standaardwaarde voor uw doel-ABI overschrijft, worden de structuren en
arrays die "lange dubbele" variabelen bevatten, zullen zowel hun grootte als hun functie veranderen
aanroepconventie voor het nemen van functies "long double" zal worden gewijzigd. Vandaar zij
zal niet binair compatibel zijn met arrays of structuren in code die zonder dat is gecompileerd
schakelaar.

-mlarge-data-drempel=aantal
. -mcmodel=gemiddeld is opgegeven, de gegevens groter dan drempel worden in het groot geplaatst
gegevens sectie. Deze waarde moet hetzelfde zijn voor alle objecten die aan het binaire bestand zijn gekoppeld
en standaard ingesteld op 65535.

-mrtd
Gebruik een andere conventie voor het aanroepen van functies, waarin functies waarvoor een vaste
aantal argumenten komt terug met de "ret" num instructie, die hun argumenten laat zien
tijdens het terugkeren. Dit bespaart één instructie in de beller, aangezien dit niet nodig is
zet de argumenten daar neer.

U kunt specificeren dat een individuele functie wordt aangeroepen met deze aanroepreeks met
het functieattribuut STDCALL. U kunt ook de -mrtd optie met behulp van de
functie attribuut cdcl.

Waarschuwing: deze oproepconventie is incompatibel met degene die normaal op Unix wordt gebruikt,
dus je kunt het niet gebruiken als je bibliotheken moet aanroepen die zijn gecompileerd met de Unix-compiler.

U moet ook functieprototypes leveren voor alle functies waarvoor variabele
aantal argumenten (inclusief "printf"); anders wordt er een onjuiste code gegenereerd
voor oproepen naar die functies.

Bovendien zal ernstig onjuiste code het resultaat zijn als u een functie met te veel aanroept
argumenten. (Normaal gesproken worden extra argumenten onschadelijk genegeerd.)

-mregparm=num
Bepaal hoeveel registers worden gebruikt om integer-argumenten door te geven. Standaard, nee
registers worden gebruikt om argumenten door te geven en er kunnen maximaal 3 registers worden gebruikt. Jij kan
controleer dit gedrag voor een specifieke functie met behulp van het functiekenmerk regparm.

Waarschuwing: als u deze schakelaar gebruikt, en num is niet nul, dan moet je alle modules bouwen
met dezelfde waarde, inclusief eventuele bibliotheken. Dit omvat de systeembibliotheken en
opstartmodules.

-msseregparm
Gebruik conventies voor het doorgeven van SSE-registers voor float- en dubbele argumenten en retourwaarden.
U kunt dit gedrag voor een specifieke functie regelen met behulp van het functiekenmerk
seregparm.

Waarschuwing: als je deze switch gebruikt, moet je alle modules met dezelfde waarde bouwen,
inclusief eventuele bibliotheken. Dit omvat de systeembibliotheken en opstartmodules.

-mvect8-ret-in-mem
Retourneer 8-byte vectoren in het geheugen in plaats van MMX-registers. Dit is de standaard aan
Solaris@tie{}8 en 9 en VxWorks om overeen te komen met de ABI van de Sun Studio-compilers tot
versie 12. Latere compilerversies (te beginnen met Studio 12 Update@tie{}1) volgen
de ABI die wordt gebruikt door andere x86-doelen, wat de standaard is op Solaris@tie{}10 ​​en hoger.
Alleen gebruik deze optie als u compatibel moet blijven met de bestaande code die is geproduceerd door
die eerdere compilerversies of oudere versies van GCC.

-mpc32
-mpc64
-mpc80
Stel 80387 floating-point precisie in op 32, 64 of 80 bits. Wanneer -mpc32 is gespecificeerd,
de significanties van resultaten van drijvende-kommabewerkingen worden afgerond op 24 bits
(enkele precisie); -mpc64 rondt de significanties van resultaten van drijvende-komma af
bewerkingen tot 53 bits (dubbele precisie) en -mpc80 rondt de significanties van resultaten af
van drijvende-kommabewerkingen tot 64 bits (uitgebreide dubbele precisie), wat de
standaard. Wanneer deze optie wordt gebruikt, zijn bewerkingen met drijvende komma met hogere precisie
niet beschikbaar voor de programmeur zonder expliciet het FPU-stuurwoord in te stellen.

De afronding van drijvende-kommabewerkingen instellen op minder dan de standaard 80 bits kan
snelheid van sommige programma's met 2% of meer. Merk op dat sommige wiskundige bibliotheken aannemen dat:
uitgebreide precisie (80-bits) drijvende-kommabewerkingen zijn standaard ingeschakeld; routines
in dergelijke bibliotheken aanzienlijk verlies aan nauwkeurigheid kunnen lijden, meestal door zo-
"catastrofale annulering" genoemd, wanneer deze optie wordt gebruikt om de precisie in te stellen op
minder dan uitgebreide precisie.

-mstack opnieuw uitlijnen
Lijn de stapel opnieuw uit bij binnenkomst. Op de Intel x86, de -mstack opnieuw uitlijnen optie zal genereren
een alternatieve proloog en epiloog die de runtime-stack indien nodig opnieuw uitlijnt.
Dit ondersteunt het mixen van verouderde codes die een uitgelijnde stapel van 4 bytes behouden met moderne codes
die een stapel van 16 bytes behouden voor SSE-compatibiliteit. Zie ook het attribuut
"force_align_arg_pointer", van toepassing op individuele functies.

-mpreferred-stack-grens=num
Poging om de stapelgrens uitgelijnd te houden met een 2 verhoogd tot num byte grens. Indien
-mpreferred-stack-grens niet is opgegeven, is de standaardwaarde 4 (16 bytes of 128 bits).

Waarschuwing: Bij het genereren van code voor de x86-64-architectuur met SSE-extensies
gehandicapt, -mppreferred-stack-grens=3 kan worden gebruikt om de stapelgrens uitgelijnd te houden
tot 8 bytegrens. U moet alle modules bouwen met -mppreferred-stack-grens=3,
inclusief eventuele bibliotheken. Dit omvat de systeembibliotheken en opstartmodules.

-mincoming-stack-grens=num
Neem aan dat de inkomende stapel is uitgelijnd met een 2 die is verhoogd tot num byte grens. Indien
-minkomende-stapelgrens is niet gespecificeerd, degene gespecificeerd door
-mpreferred-stack-grens gebruikt.

Op Pentium en PentiumPro moeten "dubbele" en "lange dubbele" waarden worden uitgelijnd op een
8-byte grens (zie -kwaadaardig-dubbel) of lijden aan aanzienlijke runtime-prestaties
boetes. Op Pentium III kan het Streaming SIMD Extension (SSE) gegevenstype "__m128" mogelijk
werkt niet goed als het niet 16-byte is uitgelijnd.

Om een ​​juiste uitlijning van deze waarden op de stapel te garanderen, moet de stapelgrens zo zijn:
uitgelijnd zoals vereist door elke waarde die op de stapel is opgeslagen. Verder, elke functie
moet zodanig worden gegenereerd dat de stapel uitgelijnd blijft. Dus een functie aanroepen
gecompileerd met een hogere geprefereerde stapelgrens van een functie gecompileerd met een lagere
geprefereerde stapelgrens zal hoogstwaarschijnlijk de stapel verkeerd uitlijnen. Het is aanbevolen dat
bibliotheken die callbacks gebruiken, gebruiken altijd de standaardinstelling.

Deze extra uitlijning verbruikt extra stapelruimte en verhoogt in het algemeen de code
maat. Code die gevoelig is voor het gebruik van stackruimte, zoals embedded systemen en
besturingssysteemkernels, wilt u misschien de voorkeursuitlijning verminderen tot:
-mppreferred-stack-grens=2.

- mmmx
-mno-mmx
-ms
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-maes
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnu
-mno-3dnu
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzct
-mno-lzcnt
-MTB
-mno-tbm
Deze schakelaars schakelen het gebruik van instructies in de MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT of 3DNow!
uitgebreide instructiesets. Deze uitbreidingen zijn ook beschikbaar als inbouw
functies: zie X86 Ingebouwd Functies, voor meer informatie over de ingeschakelde functies en
uitgeschakeld door deze schakelaars.

Om SSE/SSE2-instructies automatisch te laten genereren op basis van drijvende-kommacode (zoals
in tegenstelling tot 387 instructies), zie -mfpmath=sse.

GCC drukt SSEx-instructies in wanneer: -mavx is gebruikt. In plaats daarvan genereert het nieuwe AVX
instructies of AVX-equivalentie voor alle SSEx-instructies indien nodig.

Met deze opties kan GCC deze uitgebreide instructies gebruiken in gegenereerde code,
zelfs zonder -mfpmath=sse. Toepassingen die runtime CPU-detectie uitvoeren, moeten
compileer afzonderlijke bestanden voor elke ondersteunde architectuur, met behulp van de juiste vlaggen.
In het bijzonder moet het bestand met de CPU-detectiecode worden gecompileerd zonder
deze opties.

-mcld
Deze optie instrueert GCC om een ​​"cld"-instructie uit te zenden in de proloog van functies
die tekenreeksinstructies gebruiken. Tekenreeksinstructies zijn afhankelijk van de te selecteren DF-vlag
tussen de modus automatisch verhogen of automatisch verlagen. Terwijl de ABI de DF-vlag specificeert om
worden gewist bij het invoeren van een functie, sommige besturingssystemen schenden deze specificatie door niet
het wissen van de DF-vlag in hun exception-dispatchers. De uitzonderingshandler kan zijn:
aangeroepen met de DF-vlagset, wat leidt tot de verkeerde richtingsmodus bij string
instructies worden gebruikt. Deze optie kan standaard worden ingeschakeld op 32-bit x86-doelen door:
GCC configureren met de --enable-cld optie configureren. Generatie van "cld"
instructies kunnen worden onderdrukt met de -mno-cld compiler-optie in dit geval.

-mvzerupper
Deze optie instrueert GCC om een ​​"vzeroupper"-instructie uit te zenden vóór een overdracht van
controlestroom uit de functie om AVX naar SSE-overgangsboete te minimaliseren en ook
verwijder onnodige zeroupper intrinsiek.

-mpprefer-avx128
Deze optie instrueert GCC om 128-bit AVX-instructies te gebruiken in plaats van 256-bit AVX
instructies in de auto-vectorizer.

-mcx16
Met deze optie kan GCC de CMPXCHG16B-instructie gebruiken in gegenereerde code.
CMPXCHG16B maakt atomaire bewerkingen mogelijk op 128-bits dubbele quadword (of oword) data
soorten. Dit is handig voor tellers met een hoge resolutie die door meerdere kunnen worden bijgewerkt
processors (of kernen). Deze instructie wordt gegenereerd als onderdeel van atomic ingebouwd
functies: zie __synchroniseren Ingebouwde or __atomair Ingebouwde voor meer info.

-msahf
Met deze optie kan GCC SAHF-instructie gebruiken in gegenereerde 64-bits code. Vroeg
Intel CPU's met Intel 64 misten LAHF- en SAHF-instructies die tot nu toe door AMD64 werden ondersteund
introductie van Pentium 4 G1 step in december 2005. LAHF en SAHF zijn load and store
instructies, respectievelijk, voor bepaalde statusvlaggen. In 64-bits modus, SAHF
instructie wordt gebruikt om "fmod", "drem" of "rest" ingebouwde functies te optimaliseren: zie
Overige Ingebouwde voor meer info.

-mmovbe
Met deze optie kan GCC de movbe-instructie gebruiken om "__builtin_bswap32" te implementeren
en "__builtin_bswap64".

-mcrc32
Deze optie schakelt ingebouwde functies in, "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" en "__builtin_ia32_crc32di" naar
genereer de crc32-machine-instructie.

-mrecipe
Met deze optie kan GCC RCPSS- en RSQRTSS-instructies (en hun
gevectoriseerde varianten RCPPS en RSQRTPS) met een extra stap van Newton-Raphson naar
verhoog de precisie in plaats van DIVSS en SQRTSS (en hun gevectoriseerde varianten) voor
drijvende-kommaargumenten met één precisie. Deze instructies worden alleen gegenereerd wanneer
-funsafe-math-optimalisaties is ingeschakeld samen met -eindige-wiskunde-alleen en
-fno-trapping-wiskunde. Merk op dat hoewel de doorvoer van de reeks hoger is dan de
doorvoer van de niet-wederkerige instructie, de precisie van de reeks kan zijn:
verminderd met maximaal 2 ulp (dwz het omgekeerde van 1.0 is gelijk aan 0.99999994).

Merk op dat GCC "1.0f/sqrtf(x)" in termen van RSQRTSS (of RSQRTPS) al met
-ffast-wiskunde (of de bovenstaande optiecombinatie), en hoeft niet -mrecipe.

Merk ook op dat GCC de bovenstaande reeks uitzendt met extra Newton-Raphson-stap voor:
gevectoriseerde single-float deling en gevectoriseerde "sqrtf(x)" al met -ffast-wiskunde
(of de bovenstaande optiecombinatie), en hoeft niet -mrecipe.

-mrecept=opteren
Met deze optie kunt u bepalen welke wederzijdse schattingsinstructies mogen worden gebruikt. opteren
is een door komma's gescheiden lijst met opties, die kan worden voorafgegaan door een "!" om te keren
optie: "all": schakel alle schattingsinstructies in, "default": schakel de standaard in
instructies, gelijk aan -mrecipe, "none": schakel alle schattingsinstructies uit,
gelijkwaardig -mno-recept, "div": schakel de benadering voor scalaire deling in,
"vec-div": schakel de benadering voor gevectoriseerde deling in, "sqrt": schakel de
benadering voor scalaire vierkantswortel, "vec-sqrt": schakel de benadering in voor
gevectoriseerde vierkantswortel.

Dus bijvoorbeeld -mrecip=alle,!sqrt zou alle wederzijdse benaderingen mogelijk maken,
behalve vierkantswortel.

-mveclibabi= type dan:
Specificeert het ABI-type dat moet worden gebruikt voor het vectoriseren van intrinsieke gegevens met behulp van een externe bibliotheek.
Ondersteunde typen zijn "svml" voor de Intel short vector math-bibliotheek en "acml" voor de
AMD-wiskunde-kernbibliotheekstijl van interface. GCC zal momenteel oproepen verzenden naar
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
"vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4", "vmlsTanh4",
"vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" en "vmlsAcos4" voor
bijbehorende functietype wanneer -mveclibabi=svml wordt gebruikt en "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" en "__vrs4_powf" voor overeenkomstig functietype wanneer
-mveclibabi=acml is gebruikt. Beide -ftree-vectoriseren en -funsafe-math-optimalisaties hebben
ingeschakeld te worden. Een SVML- of ACML ABI-compatibele bibliotheek moet worden opgegeven bij de link
tijd.

-mabi=naam
Genereer code voor de opgegeven aanroepconventie. Toegestane waarden zijn: systeem For
de ABI die wordt gebruikt op GNU/Linux en andere systemen en ms voor de Microsoft ABI. De standaard
is om de Microsoft ABI te gebruiken bij het targeten van Windows. Op alle andere systemen is dit de standaard
is de SYSV ABI. U kunt dit gedrag voor een specifieke functie regelen door de
functie attribuut ms_abi/sysv_abi.

-mtls-dialect= type dan:
Genereer code om toegang te krijgen tot thread-lokale opslag met behulp van de gnoe or gnu2 conventies. gnoe
is de conservatieve standaard; gnu2 is efficiënter, maar het kan compileren- en uitvoeren-
tijdvereisten waaraan niet op alle systemen kan worden voldaan.

-mpush-args
-mno-push-args
Gebruik PUSH-bewerkingen om uitgaande parameters op te slaan. Deze methode is korter en meestal
even snel als methode met SUB/MOV-bewerkingen en is standaard ingeschakeld. In bepaalde
gevallen kan het uitschakelen ervan de prestaties verbeteren vanwege een verbeterde planning en verminderde
afhankelijkheden.

-bereken-uitgaande-args
Indien ingeschakeld, is de maximale hoeveelheid ruimte die nodig is voor uitgaande argumenten
berekend in de functieproloog. Dit is sneller op de meeste moderne CPU's vanwege
verminderde afhankelijkheden, verbeterde planning en verminderd stackgebruik wanneer de stack de voorkeur heeft
grens is niet gelijk aan 2. Het nadeel is een opmerkelijke toename van de codegrootte. Dit
schakelaar impliceert: -mno-push-args.

-mthreads
Ondersteuning voor afhandeling van threadveilige uitzonderingen ingeschakeld Mingw32. Code die afhankelijk is van thread-safe
het afhandelen van uitzonderingen moet alle code compileren en koppelen met de -mthreads optie. Wanneer
compileren, -mthreads definieert -D_MT; bij het linken linkt het in een speciale threadhelper
bibliotheek -Lingbreedte die opschoont per thread-uitzonderingsverwerkingsgegevens.

-mno-uitlijnen-stringops
Lijn de bestemming van inline-tekenreeksbewerkingen niet uit. Deze schakelaar verkleint de codegrootte
en verbetert de prestaties in het geval dat de bestemming al is uitgelijnd, maar GCC niet
weet ervan.

-minline-all-stringops
Standaard plaatst GCC tekenreeksbewerkingen alleen wanneer bekend is dat de bestemming is
uitgelijnd met een grens van minimaal 4 bytes. Dit maakt meer inlining mogelijk, vergroot de codegrootte,
maar kan de prestaties verbeteren van code die afhankelijk is van snelle memcpy, strlen en memset for
korte lengtes.

-minline-stringops-dynamisch
Gebruik voor stringbewerkingen van onbekende grootte runtimecontroles met inline code voor small
blokken en een bibliotheekoproep voor grote blokken.

-mstringop-strategie=alg
Overschrijf de interne beslissingsheuristiek over een bepaald algoritme naar een inline string
bediening met. De toegestane waarden zijn "rep_byte", "rep_4byte", "rep_8byte" voor
uitbreiden met i386 "rep" prefix van gespecificeerde grootte, "byte_loop", "loop",
"unrolled_loop" voor het uitbreiden van de inline loop, "libcall" voor het altijd uitbreiden van de bibliotheek
noemen.

-momit-blad-frame-aanwijzer
Bewaar de framepointer niet in een register voor bladfuncties. Dit vermijdt de
instructies om framepointers op te slaan, in te stellen en te herstellen en maakt een extra register aan
beschikbaar in bladfuncties. De optie -fomit-frame-aanwijzer verwijdert het frame
aanwijzer voor alle functies, wat het debuggen moeilijker kan maken.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Bepaalt of TLS-variabelen toegankelijk zijn met offsets van het TLS-segment
register (%gs voor 32-bits, %fs voor 64-bits), of dat de basisaanwijzer van de thread moet zijn
toegevoegd. Of dit al dan niet legaal is, hangt af van het besturingssysteem en of het
brengt het segment in kaart om het hele TLS-gebied te bestrijken.

Voor systemen die GNU libc gebruiken, is de standaard ingeschakeld.

-msse2avx
-mno-sse2avx
Specificeer dat de assembler SSE instructies moet coderen met VEX prefix. De optie
-mavx zet dit standaard aan.

-mfentry
-mno-fentry
Als profilering actief is -blz plaats de profileringsteller voor de proloog. Let op: aan
x86 architecturen is het attribuut "ms_hook_prologue" momenteel niet mogelijk
-mfentry en -blz.

-m8bit-idiv
-mno-8bit-idiv
Op sommige processors, zoals Intel Atom, is 8-bit unsigned integer divide veel sneller dan
32-bit/64-bit integer delen. Deze optie genereert een runtime-controle. Als beide
deeltal en deler liggen binnen het bereik van 0 tot 255, 8-bits geheel getal zonder teken is
gebruikt in plaats van 32-bit/64-bit integer delen.

-mavx256-gesplitste niet-uitgelijnde belasting
-mavx256-split-unaligned-store
Split 32-byte AVX niet-uitgelijnd laden en opslaan.

Deze -m schakelaars worden naast het bovenstaande ondersteund op AMD x86-64-processors in
64-bits omgevingen.

-m32
-m64
-mx32
Genereer code voor een 32-bits of 64-bits omgeving. De -m32 optie sets int, lang en
pointer naar 32 bits en genereert code die op elk i386-systeem draait. De -m64 optie
zet int op 32 bits en long en pointer op 64 bits en genereert code voor AMD's
x86-64-architectuur. De -mx32 optie stelt int, long en pointer in op 32 bits en
genereert code voor AMD's x86-64-architectuur. Voor darwin alleen de -m64 optie draait
van de -fno-foto en -mdynamic-geen-foto opties.

-mno-rode-zone
Gebruik geen zogenaamde rode zone voor x86-64-code. De rode zone wordt opgelegd door de
x86-64 ABI, het is een gebied van 128 bytes voorbij de locatie van de stapelaanwijzer dat
kan niet worden gewijzigd door signaal- of interrupthandlers en kan daarom worden gebruikt voor
tijdelijke gegevens zonder de stapelwijzer aan te passen. De vlag -mno-rode-zone schakelt
deze rode zone.

-mcmodel=klein
Genereer code voor het kleine codemodel: het programma en zijn symbolen moeten worden gekoppeld in
de onderste 2 GB van de adresruimte. Pointers zijn 64 bits. Programma's kunnen
statisch of dynamisch gekoppeld. Dit is het standaard codemodel.

-mcmodel=kernel
Genereer code voor het kernelcodemodel. De kernel draait in de min 2 GB van de
adres ruimte. Dit model moet worden gebruikt voor Linux-kernelcode.

-mcmodel=gemiddeld
Genereer code voor het medium model: Het programma is gekoppeld in de onderste 2 GB van de
adres ruimte. Daar worden ook kleine symbolen geplaatst. Symbolen met formaten groter dan
-mgrote-gegevens-drempel worden in grote data- of bss-secties geplaatst en kunnen worden gelokaliseerd
boven de 2 GB. Programma's kunnen statisch of dynamisch gekoppeld worden.

-mcmodel=groot
Genereer code voor het grote model: dit model doet geen aannames over adressen en
maten van secties.

-madress-mode=lang
Genereer code voor lange adresmodus. Dit wordt alleen ondersteund voor 64-bits en x32
omgevingen. Het is de standaard adresmodus voor 64-bits omgevingen.

-madress-mode=short
Genereer code voor korte adresmodus. Dit wordt alleen ondersteund voor 32-bits en x32
omgevingen. Het is de standaard adresmodus voor 32-bits en x32-omgevingen.

i386 en x86-64 Dakramen en raamkozijnen Opties

Deze aanvullende opties zijn beschikbaar voor Windows-doelen:

-mconsole
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat een console
applicatie moet worden gegenereerd, door de linker te instrueren om de PE-header in te stellen
subsysteemtype vereist voor consoletoepassingen. Dit is het standaardgedrag voor
Cygwin- en MinGW-doelen.

-mdll
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat een DLL - een
dynamische linkbibliotheek - moet worden gegenereerd, waardoor de selectie van de vereiste mogelijk is
runtime opstartobject en toegangspunt.

-mnop-fun-dllimport
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de
dllimport attribuut moet worden genegeerd.

-mthread
Deze optie is beschikbaar voor MinGW-doelen. Het specificeert dat MinGW-specifieke thread
ondersteuning moet worden gebruikt.

-muncode
Deze optie is beschikbaar voor mingw-w64-doelen. Het geeft aan dat de UNICODE-macro
wordt vooraf gedefinieerd en dat de unicode-compatibele runtime-opstartcode is gekozen.

-mwin32
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de typische
Voorgedefinieerde Windows-macro's moeten worden ingesteld in de preprocessor, maar hebben geen invloed
de keuze van de runtime-bibliotheek/opstartcode.

-mvensters
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat een GUI
applicatie moet worden gegenereerd door de linker te instrueren om de PE-header in te stellen
subsysteem het juiste type.

-fno-set-stack-uitvoerbaar
Deze optie is beschikbaar voor MinGW-doelen. Het specificeert dat de uitvoerbare vlag voor
stapel gebruikt door geneste functies is niet ingesteld. Dit is nodig voor binaire bestanden die binnenkomen
kernel-modus van Windows, zoals daar de user32 API, die wordt gebruikt om het uitvoerbare bestand in te stellen
privileges, is niet beschikbaar.

-mpe-uitgelijnd-commons
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de GNU
extensie naar het PE-bestandsformaat dat de juiste uitlijning van COMMON-variabelen mogelijk maakt
moet worden gebruikt bij het genereren van code. Het wordt standaard ingeschakeld als GCC detecteert
dat de doel-assembler die tijdens de configuratie is gevonden, de functie ondersteunt.

Zie ook onder i386 en x86-64 Opties voor standaard opties.

IA-64 Opties

Dit zijn de -m opties gedefinieerd voor de Intel IA-64-architectuur.

-mbig-endian
Genereer code voor een big-endian doelwit. Dit is de standaardinstelling voor HP-UX.

-mlittle-endian
Genereer code voor een klein endian doelwit. Dit is de standaardinstelling voor AIX5 en GNU/Linux.

-mgnu-as
-mno-gnu-as
Genereer (of niet) code voor de GNU-assembler. Dit is de standaardinstelling.

-mgnu-ld
-mno-gnu-ld
Genereer (of niet) code voor de GNU-linker. Dit is de standaardinstelling.

-mno-foto
Genereer code die geen globaal pointerregister gebruikt. Het resultaat is geen positie
onafhankelijke code, en schendt de IA-64 ABI.

-mvluchtige-asm-stop
-mno-vluchtige-asm-stop
Genereer (of niet) een stopbit direct voor en na vluchtige asm-statements.

-mregister-namen
-mno-register-namen
Genereer (of niet) in, loc en uit registernamen voor de gestapelde registers. Dit
kan de uitvoer van de assembler leesbaarder maken.

-mno-sdata
-msgegevens
Schakel optimalisaties uit (of schakel deze in) die de kleine gegevenssectie gebruiken. Dit kan handig zijn
voor het omzeilen van optimalisatiebugs.

-mconstante-gp
Genereer code die een enkele constante globale pointerwaarde gebruikt. Dit is handig wanneer:
kernelcode compileren.

-mauto-foto
Genereer code die zelfverplaatsbaar is. Dit houdt in -mconstante-gp. Dit is handig
bij het compileren van de firmwarecode.

-minline-float-deel-min-latentie
Genereer code voor inline splitsingen van drijvende-kommawaarden met behulp van de minimale latentie
algoritme.

-minline-float-deel-max-doorvoer
Genereer code voor inline verdelingen van drijvende-kommawaarden met behulp van de maximale doorvoer
algoritme.

-mno-inline-float-delen
Genereer geen inline-code voor splitsingen van drijvende-kommawaarden.

-minline-int-verdeel-min-latentie
Genereer code voor inline verdelingen van gehele waarden met behulp van de minimale latentie
algoritme.

-minline-int-verdeel-max-doorvoer
Genereer code voor inline delingen van gehele getallen met behulp van de maximale doorvoer
algoritme.

-mno-inline-int-delen
Genereer geen inline-code voor deling van gehele getallen.

-minline-sqrt-min-latentie
Genereer code voor inline vierkantswortels met behulp van het algoritme met minimale latentie.

-minline-sqrt-max-doorvoer
Genereer code voor inline vierkantswortels met behulp van het algoritme voor maximale doorvoer.

-mno-inline-sqrt
Genereer geen inline code voor sqrt.

-mfused-gek
-mno-gefuseerd-madd
Genereer (niet) code die gebruikmaakt van de gefuseerde vermenigvuldigen/optellen of vermenigvuldigen/aftrekken
instructies. De standaardinstelling is om deze instructies te gebruiken.

-mno-dwerg2-asm
-mdwarf2-asm
Genereer geen assembler-code (of genereer deze niet) voor de DWARF2 regelnummer foutopsporingsinformatie. Dit
kan handig zijn als u de GNU-assembler niet gebruikt.

-mearly-stop-bits
-mno-vroege-stop-bits
Laat stopbits eerder plaatsen dan direct voorafgaand aan de instructie die:
de stopbit geactiveerd. Dit kan de instructieplanning verbeteren, maar niet altijd
doen.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-mtls-grootte=tls-formaat
Specificeer de bitgrootte van directe TLS-offsets. Geldige waarden zijn 14, 22 en 64.

-mtune=CPU-type
Stem de instructieplanning af voor een bepaalde CPU, geldige waarden zijn itanium,
itanium1, merced, itanium2 en mckinley.

-milp32
-mlp64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits. Dit zijn HP-UX-specifieke vlaggen.

-mno-sched-br-data-specificatie
-msched-br-data-specificatie
Speculatieve planning van gegevens (uit-/in)schakelen voordat u opnieuw laadt. Dit zal resulteren in
genereren van de ld.a-instructies en de bijbehorende controle-instructies (ld.c /
chk.a). De standaardwaarde is 'uitschakelen'.

-msched-ar-data-specificatie
-mno-sched-ar-data-specificatie
Speculatieve planning van gegevens in-/uitschakelen na opnieuw laden. Dit resulteert in generatie
van de ld.a-instructies en de bijbehorende controle-instructies (ld.c / chk.a). De
standaard is 'inschakelen'.

-mno-sched-control-spec
-msched-controle-specificatie
(De-/inschakel) controle speculatieve planning. Deze functie is alleen beschikbaar tijdens:
regioplanning (dwz vóór herladen). Dit zal resulteren in het genereren van de ld.s
instructies en de bijbehorende controle-instructies chk.s. De standaardwaarde is
'uitzetten'.

-msched-br-in-data-specificatie
-mno-sched-br-in-data-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de gegevens
speculatieve ladingen voor herladen. Dit is alleen effectief met: -msched-br-data-specificatie
ingeschakeld. De standaard is 'inschakelen'.

-msched-ar-in-data-specificatie
-mno-sched-ar-in-data-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de gegevens
speculatieve ladingen na herladen. Dit is alleen effectief met: -msched-ar-data-specificatie
ingeschakeld. De standaard is 'inschakelen'.

-msched-in-control-specificatie
-mno-sched-in-control-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de
speculatieve belastingen te beheersen. Dit is alleen effectief met: -msched-controle-specificatie ingeschakeld.
De standaard is 'inschakelen'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Indien ingeschakeld, worden gegevensspeculatieve instructies alleen voor planning gekozen als die er zijn
zijn momenteel geen andere keuzes. Dit zal gebruik maken van de gegevensspeculatie
veel conservatiever. De standaardwaarde is 'uitschakelen'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Indien ingeschakeld, worden speculatieve controle-instructies alleen voor planning gekozen als die er zijn
zijn momenteel geen andere keuzes. Dit zal gebruik maken van de controlespeculatie
veel conservatiever. De standaardwaarde is 'uitschakelen'.

-mno-sched-count-specificatie-in-kritiek pad
-msched-telling-spec-in-kritiek-pad
Indien ingeschakeld, wordt rekening gehouden met speculatieve afhankelijkheden tijdens de berekening van de
instructies prioriteiten. Dit zal het gebruik van de speculatie een beetje meer maken
conservatief. De standaard is 'uitschakelen'.

-msched-spec-ldc
Gebruik een eenvoudige controle op gegevensspeculatie. Deze optie is standaard ingeschakeld.

-msched-control-spec-ldc
Gebruik een eenvoudige controle voor controlespeculatie. Deze optie is standaard ingeschakeld.

-msched-stop-bits-na-elke-cyclus
Plaats een stopbit na elke cyclus bij het plannen. Deze optie is standaard ingeschakeld.

-msched-fp-mem-deps-nul-kosten
Neem aan dat drijvende-komma-opslag en -ladingen waarschijnlijk geen conflict veroorzaken wanneer:
in dezelfde instructiegroep geplaatst. Deze optie is standaard uitgeschakeld.

-msel-sched-dont-check-control-spec
Genereer controles voor controlespeculatie in selectieve planning. Deze vlag is
standaard uitgeschakeld.

-msched-max-geheugen-insns=max-insns
Beperk het aantal geheugeninsns per instructiegroep, met een lagere prioriteit aan:
volgende geheugeninsns die proberen in dezelfde instructiegroep te plannen.
Vaak handig om cachebankconflicten te voorkomen. De standaardwaarde is 1.

-msched-max-geheugen-insns-harde-limiet
Niet meer dan `msched-max-memory-insns' toestaan ​​in instructiegroep. Anders beperken
is `zacht' wat betekent dat we de voorkeur geven aan niet-geheugenbewerkingen wanneer de limiet is bereikt maar
kan nog steeds geheugenbewerkingen plannen.

IA-64/VMS Opties

Deze -m opties zijn gedefinieerd voor de IA-64/VMS-implementaties:

-mvms-retourcodes
Retourneer VMS-conditiecodes van main. De standaard is om POSIX-stijlvoorwaarde te retourneren
(bijv. fout)codes.

-mdebug-main=voorvoegsel
Markeer de eerste routine waarvan de naam begint met voorvoegsel als de belangrijkste routine voor de
debugger.

-mmalloc64
Standaard ingesteld op 64-bits geheugentoewijzingsroutines.

LM32 Opties

Deze -m opties zijn gedefinieerd voor de Lattice Mico32-architectuur:

-mbarrel-shift ingeschakeld
Schakel instructies voor loopverschuiving in.

-mdivide ingeschakeld
Schakel verdeel- en modulus-instructies in.

-mmultiply ingeschakeld
Schakel instructies voor vermenigvuldigen in.

-msign-uitbreiden ingeschakeld
Instructies voor tekenverlenging inschakelen.

-muser ingeschakeld
Schakel door de gebruiker gedefinieerde instructies in.

M32C Opties

-mcpu=naam
Selecteer de CPU waarvoor de code wordt gegenereerd. naam kan een van zijn r8c voor de R8C/Tiny
serie, m16c voor de M16C (tot /60) serie, m32cm voor de M16C/80-serie, of m32c
voor de M32C/80-serie.

-msim
Specificeert dat het programma op de simulator wordt uitgevoerd. Dit veroorzaakt een alternatieve
te koppelen runtime-bibliotheek waarin bijvoorbeeld bestands-I/O wordt ondersteund. Je moet niet
gebruik deze optie bij het genereren van programma's die op echte hardware zullen draaien; je moet
zorg voor uw eigen runtime-bibliotheek voor alle I/O-functies die nodig zijn.

-memregs=aantal
Specificeert het aantal op geheugen gebaseerde pseudo-registers die GCC tijdens code zal gebruiken
generatie. Deze pseudo-registers zullen worden gebruikt als echte registers, dus er is een
afweging tussen het vermogen van GCC om de code in beschikbare registers in te passen, en de
prestatieverlies door geheugen te gebruiken in plaats van registers. Merk op dat alle modules in a
programma moet worden gecompileerd met dezelfde waarde voor deze optie. Daarom jij
mag deze optie niet gebruiken met de standaard runtime-bibliotheken die gcc-builds maken.

M32R/D Opties

Deze -m opties zijn gedefinieerd voor Renesas M32R/D-architecturen:

-m32r2
Genereer code voor de M32R/2.

-m32rx
Genereer code voor de M32R/X.

-m32r
Genereer code voor de M32R. Dit is de standaardinstelling.

-mmodel=klein
Neem aan dat alle objecten zich in de onderste 16 MB geheugen bevinden (zodat hun adressen kunnen worden
geladen met de "ld24"-instructie), en neem aan dat alle subroutines bereikbaar zijn met de
"bl" instructie. Dit is de standaardinstelling.

De adresseerbaarheid van een bepaald object kan worden ingesteld met het attribuut "model".

-mmodel=gemiddeld
Stel dat objecten zich overal in de 32-bits adresruimte kunnen bevinden (de compiler genereert
"seth/add3" instructies om hun adressen te laden), en neem aan dat alle subroutines zijn
bereikbaar met de instructie "bl".

-mmodel=groot
Stel dat objecten zich overal in de 32-bits adresruimte kunnen bevinden (de compiler genereert
"seth/add3" instructies om hun adressen te laden), en neem aan dat subroutines dat niet zijn
bereikbaar met de "bl" instructie (de compiler zal de veel langzamere
"seth/add3/jl" instructiereeks).

-msdata=geen
Schakel het gebruik van het kleine gegevensgebied uit. Variabelen worden in een van geplaatst .gegevens, bssof
.rodata (tenzij het kenmerk "sectie" is opgegeven). Dit is de standaardinstelling.

Het kleine gegevensgebied bestaat uit secties .sdata en .sbss. Objecten kunnen expliciet worden
plaats in het kleine gegevensgebied met het kenmerk "sectie" met behulp van een van deze secties.

-msdata=sdata
Zet kleine globale en statische gegevens in het kleine gegevensgebied, maar genereer geen speciale
code om ernaar te verwijzen.

-msdata=gebruik
Zet kleine globale en statische gegevens in het kleine gegevensgebied en genereer speciale
instructies om ernaar te verwijzen.

-G num
Zet globale en statische objecten kleiner dan of gelijk aan num bytes in de kleine gegevens of
bss-secties in plaats van de normale data- of bss-secties. De standaardwaarde van num is
8. De -msgegevens optie moet zijn ingesteld op een van gegevens or . voor deze optie om er een te hebben
effect.

Alle modules moeten worden gecompileerd met dezelfde -G num waarde. Compileren met verschillende
waarden van num kan wel of niet werken; als dat niet het geval is, geeft de linker een foutmelding
bericht---onjuiste code wordt niet gegenereerd.

-mdebug
Zorgt ervoor dat de M32R-specifieke code in de compiler enkele statistieken weergeeft die kunnen helpen
in foutopsporingsprogramma's.

-kwaadaardige-loops
Lijn alle lussen uit met een grens van 32 bytes.

-mno-align-loops
Forceer geen 32-byte uitlijning voor lussen. Dit is de standaardinstelling.

-missue-tarief=aantal
Uitgifte aantal instructies per cyclus. aantal kan maar 1 of 2 zijn.

-mbranch-kosten=aantal
aantal kan alleen 1 of 2 zijn. Als het 1 is, hebben takken de voorkeur boven
voorwaardelijke code, als het 2 is, dan is het tegenovergestelde van toepassing.

-mflush-trap=aantal
Specificeert het trapnummer dat moet worden gebruikt om de cache te legen. De standaardwaarde is 12. Geldig
getallen liggen tussen 0 en 15.

-mno-flush-trap
Geeft aan dat de cache niet kan worden leeggemaakt met behulp van een trap.

-mflush-func=naam
Specificeert de naam van de functie van het besturingssysteem die moet worden aangeroepen om de cache te legen. De
standaard is _flush_cache, maar een functieaanroep wordt alleen gebruikt als een trap dat niet is
beschikbaar.

-mno-flush-func
Geeft aan dat er geen OS-functie is voor het leegmaken van de cache.

M680x0 Opties

Dit zijn de -m opties gedefinieerd voor M680x0- en ColdFire-processors. De standaard instellingen
hangt af van welke architectuur werd geselecteerd toen de compiler werd geconfigureerd; de standaardinstellingen
voor de meest voorkomende keuzes worden hieronder gegeven.

-maart=boog
Genereer code voor een specifieke M680x0- of ColdFire-instructiesetarchitectuur.
Toegestane waarden van boog voor M680x0-architecturen zijn: 68000, 68010, 68020, 68030,
68040, 68060 en cpu32. ColdFire-architecturen zijn geselecteerd volgens Freescale's
ISA-classificatie en de toegestane waarden zijn: isaa, isaplus, isab en Isaac.

gcc definieert een macro __mcfboog__ wanneer het code genereert voor een ColdFire-doelwit.
De boog in deze macro is een van de -maart hierboven gegeven argumenten.

Wanneer samen gebruikt, -maart en -mtune selecteer code die draait op een familie van soortgelijke
processors, maar dat is geoptimaliseerd voor een bepaalde microarchitectuur.

-mcpu=cpu
Genereer code voor een specifieke M680x0- of ColdFire-processor. De M680x0 cpus zijn:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 en cpu32. het koude vuur cpus
worden gegeven door de onderstaande tabel, die ook de CPU's in families indeelt:

Familie : -mcpu argumenten
51 : 51 51ac 51cn 51em 51qe
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211 : 5210 5211
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=cpu overschrijvingen -maart=boog if boog is compatibel met cpu. Andere combinaties van
-mcpu en -maart worden afgewezen.

gcc definieert de macro __mcf_cpu_cpu wanneer ColdFire-doel cpu is geselecteerd. Het ook
definieert __mcf_familie_familie, waarbij de waarde van familie wordt gegeven door de bovenstaande tabel.

-mtune=toon
Stem de code af op een bepaalde microarchitectuur, binnen de beperkingen die zijn ingesteld door -maart
en -mcpu. De M680x0-microarchitecturen zijn: 68000, 68010, 68020, 68030, 68040,
68060 en cpu32. De ColdFire-microarchitecturen zijn: cfv1, cfv2, cfv3, cfv4 en
cfv4e.

U kunt ook gebruik maken van -mtune=68020-40 voor code die relatief goed moet werken op 68020,
68030 en 68040 doelen. -mtune=68020-60 is vergelijkbaar, maar bevat 68060 doelen als
goed. Deze twee opties selecteren dezelfde afstemmingsbeslissingen als: -m68020-40 en -m68020-60
respectievelijk.

gcc definieert de macro's __mcboog en __mcboog__ bij het afstemmen op 680x0-architectuur
boog. Het definieert ook mcboog tenzij ofwel -ansi of een niet-GNU -soa optie wordt gebruikt.
Als gcc afstemt op een reeks architecturen, zoals geselecteerd door -mtune=68020-40 or
-mtune=68020-60, het definieert de macro's voor elke architectuur in het bereik.

gcc definieert ook de macro __Mvroeg__ bij het afstemmen op ColdFire-microarchitectuur
vroeg, Waar vroeg is een van de bovenstaande argumenten.

-m68000
-mc68000
Genereer output voor een 68000. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68000-gebaseerde systemen. Het is gelijk aan -maart=68000.

Gebruik deze optie voor microcontrollers met een 68000- of EC000-kern, inclusief de 68008,
68302, 68306, 68307, 68322, 68328 en 68356.

-m68010
Genereer output voor een 68010. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68010-gebaseerde systemen. Het is gelijk aan -maart=68010.

-m68020
-mc68020
Genereer output voor een 68020. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68020-gebaseerde systemen. Het is gelijk aan -maart=68020.

-m68030
Genereer output voor een 68030. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68030-gebaseerde systemen. Het is gelijk aan -maart=68030.

-m68040
Genereer output voor een 68040. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68040-gebaseerde systemen. Het is gelijk aan -maart=68040.

Deze optie verhindert het gebruik van 68881/68882 instructies die moeten worden geëmuleerd door:
software op de 68040. Gebruik deze optie als uw 68040 geen code heeft om te emuleren
die instructies.

-m68060
Genereer output voor een 68060. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68060-gebaseerde systemen. Het is gelijk aan -maart=68060.

Deze optie verhindert het gebruik van instructies 68020 en 68881/68882 die moeten worden
geëmuleerd door software op de 68060. Gebruik deze optie als uw 68060 geen code heeft
om die instructies te emuleren.

-mcpu32
Genereer output voor een CPU32. Dit is de standaard wanneer de compiler is geconfigureerd voor:
CPU32-gebaseerde systemen. Het is gelijk aan -maart=cpu32.

Gebruik deze optie voor microcontrollers met een CPU32 of CPU32+ core, inclusief de 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 en 68360.

-m5200
Genereer output voor een 520X ColdFire CPU. Dit is de standaard wanneer de compiler is
geconfigureerd voor op 520X gebaseerde systemen. Het is gelijk aan -mcpu=5206en is nu
afgekeurd ten gunste van die optie.

Gebruik deze optie voor microcontrollers met een 5200 core, inclusief de MCF5202, MCF5203,
MCF5204 en MCF5206.

-m5206e
Genereer output voor een 5206e ColdFire CPU. De optie is nu verouderd ten gunste van
het equivalent -mcpu=5206e.

-m528x
Genereer output voor een lid van de ColdFire 528X-familie. De optie is nu
afgekeurd ten gunste van het equivalent -mcpu=528x.

-m5307
Genereer output voor een ColdFire 5307 CPU. De optie is nu verouderd ten gunste van de
gelijkwaardig -mcpu=5307.

-m5407
Genereer output voor een ColdFire 5407 CPU. De optie is nu verouderd ten gunste van de
gelijkwaardig -mcpu=5407.

-mcfv4e
Genereer output voor een ColdFire V4e-familie CPU (bijv. 547x/548x). Dit omvat het gebruik van
hardware drijvende-komma instructies. De optie is gelijk aan -mcpu=547x, en is
nu afgeschaft ten gunste van die optie.

-m68020-40
Genereer output voor een 68040, zonder de nieuwe instructies te gebruiken. Dit resulteert
in code die relatief efficiënt kan worden uitgevoerd op een 68020/68881 of een 68030 of een
68040. De gegenereerde code gebruikt de 68881-instructies die worden geëmuleerd op de
68040.

De optie is gelijk aan -maart=68020 -mtune=68020-40.

-m68020-60
Genereer output voor een 68060, zonder de nieuwe instructies te gebruiken. Dit resulteert
in code die relatief efficiënt kan worden uitgevoerd op een 68020/68881 of een 68030 of een
68040. De gegenereerde code gebruikt de 68881-instructies die worden geëmuleerd op de
68060.

De optie is gelijk aan -maart=68020 -mtune=68020-60.

-mhard-zweven
-m68881
Genereer drijvende-komma-instructies. Dit is de standaardinstelling voor 68020 en hoger, en
voor ColdFire-apparaten met een FPU. Het definieert de macro __HAVE_68881__ op M680x0
doelen en __mcffpu__ op ColdFire-doelen.

-msoft-zweven
Genereer geen drijvende-komma-instructies; gebruik in plaats daarvan bibliotheekoproepen. Dit is de
standaard voor 68000, 68010 en 68832 doelen. Het is ook de standaardinstelling voor ColdFire
apparaten zonder FPU.

-mdiv
-mno-div
Genereer (niet genereren) ColdFire hardware verdeel en rest instructies. Indien
-maart wordt gebruikt zonder -mcpu, de standaard is "aan" voor ColdFire-architecturen en "uit"
voor M680x0-architecturen. Anders wordt de standaardwaarde overgenomen van de doel-CPU (ofwel
de standaard CPU, of degene die is gespecificeerd door -mcpu). De standaardwaarde is bijvoorbeeld "uit"
For -mcpu=5206 en "aan" voor -mcpu=5206e.

gcc definieert de macro __mcfhwdiv__ wanneer deze optie is ingeschakeld.

-mkort
Beschouw type "int" als 16 bits breed, zoals "short int". Bovendien, parameters
doorgegeven op de stapel zijn ook uitgelijnd met een 16-bits grens, zelfs op doelen waarvan de API
machtigt promotie naar 32-bit.

-mno-kort
Beschouw type "int" niet als 16 bits breed. Dit is de standaardinstelling.

-mnobitveld
-mno-bitveld
Gebruik niet de bit-veld instructies. De -m68000, -mcpu32 en -m5200 opties impliceren:
-mnobitveld.

-mbitveld
Gebruik de bit-field instructies. De -m68020 optie impliceert -mbitveld. Dit is
de standaardwaarde als u een configuratie gebruikt die is ontworpen voor een 68020.

-mrtd
Gebruik een andere conventie voor het aanroepen van functies, waarin functies waarvoor een vaste
aantal argumenten keert terug met de instructie "rtd", die hun argumenten laat verschijnen
tijdens het terugkeren. Dit bespaart één instructie in de beller, aangezien dit niet nodig is
zet de argumenten daar neer.

Deze belconventie is niet compatibel met degene die normaal op Unix wordt gebruikt, dus u
kan het niet gebruiken als u bibliotheken moet oproepen die zijn gecompileerd met de Unix-compiler.

U moet ook functieprototypes leveren voor alle functies waarvoor variabele
aantal argumenten (inclusief "printf"); anders wordt er een onjuiste code gegenereerd
voor oproepen naar die functies.

Bovendien zal ernstig onjuiste code het resultaat zijn als u een functie met te veel aanroept
argumenten. (Normaal gesproken worden extra argumenten onschadelijk genegeerd.)

De "rtd" instructie wordt ondersteund door de 68010, 68020, 68030, 68040, 68060 en CPU32
processors, maar niet door de 68000 of 5200.

-mno-rtd
Gebruik niet de belconventies geselecteerd door -mrtd. Dit is de standaardinstelling.

-kwaadaardig-in
-mno-align-int
Bepaal of GCC "int", "long", "long long", "float", "double" en "long uitlijnt"
dubbele" variabelen op een 32-bits grens (-kwaadaardig-in) of een 16-bits grens
(-mno-align-int). Het uitlijnen van variabelen op 32-bits grenzen levert code op die wordt uitgevoerd
iets sneller op processors met 32-bits bussen ten koste van meer geheugen.

Waarschuwing: als u de -kwaadaardig-in switch, zal GCC structuren uitlijnen die de
bovenstaande typen anders dan de meeste gepubliceerde binaire interfaces van applicaties
specificaties voor de m68k.

-mprel
Gebruik de pc-relatieve adresseringsmodus van de 68000 rechtstreeks, in plaats van een globale
offset tafel. Momenteel houdt deze optie in: -fpic, waardoor maximaal een 16-bits offset mogelijk is
voor pc-relatieve adressering. -fPIC wordt momenteel niet ondersteund met -mprelEchter
dit zou kunnen worden ondersteund voor 68020 en hogere processors.

-mno-strikt-uitlijnen
-mstrict-uitlijnen
Ga er (niet) van uit dat niet-uitgelijnde geheugenreferenties door het systeem worden afgehandeld.

-msep-gegevens
Genereer code waarmee het gegevenssegment zich in een ander geheugengebied kan bevinden
uit het tekstsegment. Dit maakt het mogelijk om op zijn plaats uit te voeren in een omgeving zonder
virtueel geheugenbeheer. Deze optie houdt in: -fPIC.

-mno-sep-gegevens
Genereer code die ervan uitgaat dat het gegevenssegment het tekstsegment volgt. Dit is
de standaard.

-midden-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode. Dit maakt het mogelijk
voor uitvoering ter plaatse en gedeelde bibliotheken in een omgeving zonder virtueel geheugen
beheer. Deze optie houdt in: -fPIC.

-mno-id-gedeelde-bibliotheek
Genereer code die er niet van uitgaat dat op ID gebaseerde gedeelde bibliotheken worden gebruikt. Dit is
de standaard.

-mshared-bibliotheek-id=n
Specificeerde het identificatienummer van de op ID gebaseerde gedeelde bibliotheek die wordt gecompileerd.
Het specificeren van een waarde van 0 zal compactere code genereren, het specificeren van andere waarden zal dat doen
forceer de toewijzing van dat nummer aan de huidige bibliotheek, maar er is geen ruimte meer of
tijdbesparend dan het weglaten van deze optie.

-mxgot
-mno-xgot
Bij het genereren van positie-onafhankelijke code voor ColdFire, genereer code die werkt als:
de GOT heeft meer dan 8192 inzendingen. Deze code is groter en langzamer dan code
gegenereerd zonder deze optie. Op M680x0-processors is deze optie niet nodig; -fPIC
volstaat.

GCC gebruikt normaal gesproken een enkele instructie om waarden uit de GOT te laden. terwijl dit is
relatief efficiënt, het werkt alleen als de GOT kleiner is dan ongeveer 64k. Iets
groter zorgt ervoor dat de linker een fout meldt, zoals:

verhuizing afgekapt om te passen: R_68K_GOT16O foobar

Als dit gebeurt, moet u uw code opnieuw compileren met: -mxgot. Het zou dan moeten werken met
zeer grote GOT's. Echter, code gegenereerd met -mxgot is minder efficiënt, omdat het
heeft 4 instructies nodig om de waarde van een globaal symbool op te halen.

Merk op dat sommige linkers, inclusief nieuwere versies van de GNU linker, kunnen maken
meerdere GOT's en sorteer GOT-items. Als je zo'n linker hebt, hoef je alleen
gebruiken -mxgot bij het compileren van een enkel objectbestand dat toegang heeft tot meer dan 8192 GOT
inzendingen. Heel weinig doen dat.

Deze opties hebben geen effect tenzij GCC positie-onafhankelijke code genereert.

MCore Opties

Dit zijn de -m opties gedefinieerd voor de Motorola M*Core-processors.

-mhardlit
-mno-hardlit
Inline constanten in de codestroom als dit in twee instructies of minder kan worden gedaan.

-mdiv
-mno-div
Gebruik de verdeelinstructie. (Standaard ingeschakeld).

-mrelax-onmiddellijk
-mno-relax-onmiddellijk
Sta onmiddellijke waarden van willekeurige grootte toe in bitbewerkingen.

-mwide-bitvelden
-mno-brede bitvelden
Behandel bitvelden altijd als int-sized.

-m4byte-functies
-mno-4byte-functies
Forceer alle functies om te worden uitgelijnd op een grens van 4 bytes.

-mcallgraph-gegevens
-mno-callgraph-data
Zend callgraph-informatie uit.

-mslow-bytes
-mno-slow-bytes
Geef de voorkeur aan woordtoegang bij het lezen van bytehoeveelheden.

-mlittle-endian
-mbig-endian
Genereer code voor een klein endian doelwit.

-m210
-m340
Genereer code voor de 210-processor.

-mno-lsim
Ga ervan uit dat runtime-ondersteuning is geleverd en laat dus de simulatorbibliotheek weg
(libsim.a) vanaf de linker-opdrachtregel.

-mstack-increment=grootte
Stel het maximale bedrag in voor een enkele stapelstapbewerking. Grote waarden kunnen
verhoog de snelheid van programma's die functies bevatten die een grote hoeveelheid nodig hebben
stapelruimte, maar ze kunnen ook een segmentatiefout veroorzaken als de stapel wordt uitgebreid
te veel. De standaardwaarde is 0x1000.

IkP Opties

-mabsdiff
Schakelt de "abs"-instructie in, wat het absolute verschil is tussen twee registers.

-mall-opteert
Maakt alle optionele instructies mogelijk - gemiddelde, vermenigvuldigen, delen, bitbewerkingen,
voorloopnul, absoluut verschil, min/max, clip en verzadiging.

-gemiddeld
Schakelt de "ave"-instructie in, die het gemiddelde van twee registers berekent.

-mgebaseerd=n
Variabelen van grootte n bytes of kleiner worden in de sectie ".based" geplaatst door
standaard. Gebaseerde variabelen gebruiken het $tp register als een basisregister, en er is een
Limiet van 128 bytes voor de sectie ".based".

-mbitoppen
Activeert de bit-bedieningsinstructies - bittest ("btstm"), set ("bsetm"), wissen
("bclrm"), invert ("bnotm") en test-en-set ("tas").

-mc=naam
Selecteert in welke sectie constante gegevens worden geplaatst. naam kan "klein", "dichtbij", of . zijn
"ver".

-mclip
Schakelt de instructie "clip" in. Merk op dat "-mclip" niet nuttig is, tenzij u ook
geef "-mminmax" op.

-mconfig=naam
Selecteert een van de ingebouwde kernconfiguraties. Elke MeP-chip heeft er een of meer
modules erin; elke module heeft een kern-CPU en een verscheidenheid aan coprocessors, optioneel
instructies en randapparatuur. De tool "MeP-Integrator", die geen deel uitmaakt van GCC, biedt:
deze configuraties via deze optie; het gebruik van deze optie is hetzelfde als het gebruik van alles
de bijbehorende opdrachtregelopties. De standaardconfiguratie is "standaard".

-mkop
Schakelt de coprocessor-instructies in. Standaard is dit een 32-bits coprocessor. Opmerking
dat de coprocessor normaal gesproken is ingeschakeld via de optie "-mconfig=".

-mcop32
Schakelt de instructies van de 32-bits coprocessor in.

-mcop64
Schakelt de instructies van de 64-bits coprocessor in.

-mivc2
Maakt IVC2-planning mogelijk. IVC2 is een 64-bits VLIW-coprocessor.

-mdc
Zorgt ervoor dat constante variabelen in de sectie ".near" worden geplaatst.

-mdiv
Schakelt de instructies "div" en "divu" in.

-meb
Genereer big-endian-code.

-mel
Genereer little-endian-code.

-mio-vluchtig
Vertelt de compiler dat elke variabele die is gemarkeerd met het kenmerk "io" moet zijn
als vluchtig beschouwd.

-ml Zorgt ervoor dat variabelen standaard worden toegewezen aan de sectie ".far".

-mleadz
Schakelt de instructie "leadz" (voorloopnul) in.

-mm Zorgt ervoor dat variabelen standaard worden toegewezen aan de sectie ".near".

-mmminmax
Schakelt de "min" en "max" instructies in.

-mmult
Schakelt instructies voor vermenigvuldigen en vermenigvuldigen in.

-mno-opteert
Schakelt alle optionele instructies uit die zijn ingeschakeld door "-mall-opts".

-mherhalen
Schakelt de instructies voor "herhalen" en "herhalen" in, die worden gebruikt voor lussen met een lage overhead.

-Mevrouw Zorgt ervoor dat alle variabelen standaard naar de ".tiny"-sectie gaan. Merk op dat er een
limiet van 65536 bytes voor deze sectie. Toegang tot deze variabelen maakt gebruik van de %gp-basis
registreren.

-msatur
Schakelt de verzadigingsinstructies in. Merk op dat de compiler momenteel niet:
deze zelf genereren, maar deze optie is opgenomen voor compatibiliteit met andere tools,
net als".

-msdram
Koppel de op SDRAM gebaseerde runtime in plaats van de standaard ROM-gebaseerde runtime.

-msim
Koppel de runtime-bibliotheken van de simulator.

-msimnovec
Koppel de runtime-bibliotheken van de simulator, met uitzondering van ingebouwde ondersteuning voor reset en
uitzonderingsvectoren en tabellen.

-mtf
Zorgt ervoor dat alle functies standaard worden ingesteld op de sectie ".far". Zonder deze optie, functies
standaard naar de ".near" sectie.

-min=n
Variabelen die zijn n bytes of kleiner worden toegewezen aan de sectie ".tiny". Deze
variabelen gebruiken het $gp-basisregister. De standaardwaarde voor deze optie is 4, maar houd er rekening mee dat:
er is een limiet van 65536 bytes voor de sectie ".tiny".

MicroBlaze Opties

-msoft-zweven
Gebruik software-emulatie voor drijvende komma (standaard).

-mhard-zweven
Gebruik hardware drijvende-komma-instructies.

-mmmpy
Optimaliseer geen blokbewegingen, gebruik "memcpy".

-mno-clearbss
Deze optie is verouderd. Gebruik maken van -fno-nul-geïnitialiseerd-in-bss gebruiken.

-mcpu=CPU-type
Gebruik functies van en plan code voor een bepaalde CPU. Ondersteunde waarden zijn in de indeling
vX.YY.Z, Waar X is een grote versie, YY is de kleine versie, en Z is compatibiliteit
code. Voorbeeldwaarden zijn v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-zacht-mul
Gebruik software vermenigvuldiging emulatie (standaard).

-mxl-zacht-div
Gebruik software-emulatie voor splitsingen (standaard).

-mxl-barrel-shift
Gebruik de hardware barrel shifter.

-mxl-patroon-vergelijken
Gebruik patroonvergelijkingsinstructies.

-mklein-verdeelt
Gebruik tabelopzoekoptimalisatie voor kleine getekende integer-delingen.

-mxl-stapelcontrole
Deze optie is afgeschaft. Gebruik in plaats daarvan -fstack-check.

-mxl-gp-opt
Gebruik GP relatieve sdata/sbss secties.

-mxl-vermenigvuldigen-hoog
Gebruik instructies voor vermenigvuldigen hoog voor het hoge deel van 32x32 vermenigvuldigen.

-mxl-float-omzetten
Gebruik hardware-instructies voor drijvende-kommaconversie.

-mxl-float-sqrt
Gebruik hardware drijvende-komma vierkantswortel instructie.

-mxl-modus-app-model
Selecteer toepassingsmodel app-model. Geldige modellen zijn:

uitvoerbaar
normaal uitvoerbaar (standaard), gebruikt opstartcode crt0.o.

xmdstub
voor gebruik met op Xilinx Microprocessor Debugger (XMD) gebaseerde software intrusive debug
agent genaamd xmdstub. Dit gebruikt opstartbestand crt1.o en stelt het startadres in van
het programma moet 0x800 zijn.

bootstrap
voor toepassingen die worden geladen met een bootloader. Dit model gebruikt opstartbestand
crt2.o die geen processorreset-vectorhandler bevat. Dit is geschikt
voor het overdragen van de controle over een processorreset naar de bootloader in plaats van de
toepassing.

geen vectoren
voor toepassingen die geen van de MicroBlaze-vectoren nodig hebben. Deze optie
kan handig zijn voor toepassingen die binnen een bewakingstoepassing worden uitgevoerd. Dit model
toepassingen crt3.o als opstartbestand.

Keuze -xl-modus-app-model is een verouderde alias voor -mxl-modus-app-model.

MIPS Opties

-EB Genereer big-endian-code.

-DE Genereer little-endian-code. Dit is de standaard voor mips*el-*-* configuraties.

-maart=boog
Genereer code die zal worden uitgevoerd boog, wat de naam kan zijn van een generieke MIPS ISA, of
de naam van een bepaalde verwerker. De ISA-namen zijn: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 en mips64r2. De processornamen zijn: 4kc, 4km, 4kp, 4ksc,
4kec, 4km, 4 kep, 4knd, 5kc, 5 kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loonson2e, loonson2f, loonson3a, m4k, achtste, achtste+, octaon2, Orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 en xlr. De speciale waarde van-abi selecteert de meest compatibele
architectuur voor de geselecteerde ABI (dat wil zeggen, mips1 voor 32-bits ABI's en mips3 voor 64-bit
ABI's).

Native Linux/GNU- en IRIX-toolketens ondersteunen ook de waarde inheemse, die de . selecteert
beste architectuuroptie voor de hostprocessor. -maart=inheems heeft geen effect als GCC
herkent de processor niet.

In processornamen, een finale 000 kan worden afgekort als k (bijvoorbeeld, -maart=r2k).
Voorvoegsels zijn optioneel, en vr kan worden geschreven r.

Namen van het formulier nf2_1 verwijzen naar processors met FPU's geklokt op de helft van de snelheid van de
kern, namen van de vorm nf1_1 verwijzen naar processors met FPU's die met dezelfde snelheid zijn geklokt
als de kern, en namen van de vorm nf3_2 verwijzen naar processors met FPU's geklokt een ratio
van 3:2 met betrekking tot de kern. Om compatibiliteitsredenen, nf wordt geaccepteerd als een
synoniem voor nf2_1 en nx en bfx worden geaccepteerd als synoniemen voor nf1_1.

GCC definieert twee macro's op basis van de waarde van deze optie. De eerste is _MIPS_ARCH,
die de naam van de doelarchitectuur geeft, als een tekenreeks. De tweede heeft de vorm
_MIPS_ARCH_foo, Waar foo is de gekapitaliseerde waarde van _MIPS_ARCH. Bijvoorbeeld,
-maart=r2000 zal instellen _MIPS_ARCH naar "r2000" en definieer de macro _MIPS_ARCH_R2000.

Merk op dat de _MIPS_ARCH macro gebruikt de hierboven gegeven processornamen. Met andere woorden,
het heeft het volledige voorvoegsel en wordt niet afgekort 000 as k. In het geval van van-
abi, noemt de macro de opgeloste architectuur (ofwel "mips1" or "mips3"). Het namen
de standaardarchitectuur wanneer nee -maart optie wordt gegeven.

-mtune=boog
Optimaliseren voor boog. Deze optie bepaalt onder andere de manier waarop instructies worden gegeven:
gepland, en de waargenomen kosten van rekenkundige bewerkingen. De lijst van boog waarden
is hetzelfde als voor -maart.

Als deze optie niet wordt gebruikt, optimaliseert GCC voor de processor die is opgegeven door -maart.
Met -maart en -mtune samen is het mogelijk om code te genereren die zal worden uitgevoerd
een familie van processors, maar optimaliseer de code voor een bepaald lid daarvan
familie.

-mtune definieert de macro's _MIPS_TUNE en _MIPS_TUNE_foo, die op dezelfde manier werken als
de -maart die hierboven zijn beschreven.

-mips1
Gelijkwaardig aan -maart=mips1.

-mips2
Gelijkwaardig aan -maart=mips2.

-mips3
Gelijkwaardig aan -maart=mips3.

-mips4
Gelijkwaardig aan -maart=mips4.

-mips32
Gelijkwaardig aan -maart=mips32.

-mips32r2
Gelijkwaardig aan -maart=mips32r2.

-mips64
Gelijkwaardig aan -maart=mips64.

-mips64r2
Gelijkwaardig aan -maart=mips64r2.

-mips16
-mno-mips16
Genereer (genereer niet) MIPS16-code. Als GCC zich richt op een MIPS32 of MIPS64
architectuur, zal het gebruik maken van de MIPS16e ASE.

MIPS16-codegeneratie kan ook per functie worden geregeld door middel van:
"mips16" en "nomips16" kenmerken.

-mflip-mips16
Genereer MIPS16-code op afwisselende functies. Deze optie is bedoeld voor regressie
testen van gemengde MIPS16/niet-MIPS16-codegeneratie, en is niet bedoeld voor gewone
gebruiken bij het samenstellen van de gebruikerscode.

-minterlink-mips16
-mno-interlink-mips16
Vereisen (niet vereisen) dat niet-MIPS16-code link-compatibel is met MIPS16-code.

Niet-MIPS16-code kan bijvoorbeeld niet rechtstreeks naar MIPS16-code springen; het moet ofwel een gebruiken
call of een indirecte sprong. -minterlink-mips16 schakelt daarom directe sprongen uit, tenzij
GCC weet dat het doel van de sprong niet MIPS16 is.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Genereer code voor de gegeven ABI.

Merk op dat de EABI een 32-bits en een 64-bits variant heeft. GCC genereert normaal gesproken 64-bit
code wanneer u een 64-bits architectuur selecteert, maar u kunt gebruiken -mgp32 om 32-bits code te krijgen
gebruiken.

Voor informatie over de O64 ABI, zie:http://gcc.gnu.org/projects/mipso64-abi.html>.

GCC ondersteunt een variant van de o32 ABI waarin floating-point registers eerder 64 zijn
dan 32 bits breed. U kunt deze combinatie selecteren met -mabi=32 -mfp64. Deze ABI
vertrouwt op de mthc1 en mfhc1 instructies en wordt daarom alleen ondersteund voor
MIPS32R2-processors.

De registertoewijzingen voor argumenten en retourwaarden blijven hetzelfde, maar elk
scalaire waarde wordt doorgegeven in een enkel 64-bits register in plaats van een paar 32-bits
registreert. Zo worden scalaire waarden met drijvende komma geretourneerd in $f0 alleen, niet een
$f0/$f1 paar. De set van oproep-opgeslagen registers blijft ook hetzelfde, maar alle 64 bits
zijn opgeslagen.

-mabicbellen
-mno-abicalls
Genereer (niet genereren) code die geschikt is voor dynamische objecten in SVR4-stijl.
-mabicbellen is de standaardinstelling voor op SVR4 gebaseerde systemen.

-mgedeeld
-mno-gedeeld
Genereer (niet genereren) code die volledig positie-onafhankelijk is en die:
daarom worden gekoppeld aan gedeelde bibliotheken. Deze optie heeft alleen invloed op -mabicbellen.

Alles -mabicbellen code is van oudsher positie-onafhankelijk, ongeacht de opties
als -fPIC en -fpic. Als extensie staat de GNU-toolchain echter uitvoerbare bestanden toe
om absolute toegangen te gebruiken voor lokaal bindende symbolen. Het kan ook kortere GP gebruiken
initialisatiesequenties en genereer directe oproepen naar lokaal gedefinieerde functies. Dit
modus wordt geselecteerd door -mno-gedeeld.

-mno-gedeeld hangt af van binutils 2.16 of hoger en genereert objecten die alleen kunnen worden
gekoppeld door de GNU-linker. De optie heeft echter geen invloed op de ABI van de finale
uitvoerbaar; het heeft alleen invloed op de ABI van verplaatsbare objecten. Gebruik makend van -mno-gedeeld wil
uitvoerbare bestanden over het algemeen zowel kleiner als sneller maken.

-mgedeeld is de standaard.

-mplt
-mno-plt
Neem aan (neem niet aan) dat de statische en dynamische linkers PLT's ondersteunen en kopieer
verhuizingen. Deze optie heeft alleen invloed op -mno-gedeeld -mabicbellen. Voor de n64 ABI is dit:
optie heeft geen effect zonder -msym32.

U Can Make -mplt de standaard door GCC te configureren met --met-mips-plt. De standaard
is -mno-plt anders.

-mxgot
-mno-xgot
Til (niet optillen) de gebruikelijke beperkingen op voor de grootte van de globale offset-tabel.

GCC gebruikt normaal gesproken een enkele instructie om waarden uit de GOT te laden. terwijl dit is
relatief efficiënt, het werkt alleen als de GOT kleiner is dan ongeveer 64k.
Alles wat groter is, zorgt ervoor dat de linker een fout rapporteert, zoals:

verhuizing afgekapt om te passen: R_MIPS_GOT16 foobar

Als dit gebeurt, moet u uw code opnieuw compileren met: -mxgot. Het zou dan moeten werken met
zeer grote GOT's, hoewel het ook minder efficiënt zal zijn, aangezien er drie nodig zijn
instructies om de waarde van een globaal symbool op te halen.

Merk op dat sommige linkers meerdere GOT's kunnen maken. Als je zo'n linker hebt,
zou alleen moeten gebruiken -mxgot wanneer een enkel objectbestand toegang heeft tot meer dan 64k's
ter waarde van GOT-inzendingen. Heel weinig doen dat.

Deze opties hebben geen effect tenzij GCC positie-onafhankelijke code genereert.

-mgp32
Neem aan dat registers voor algemene doeleinden 32 bits breed zijn.

-mgp64
Neem aan dat registers voor algemene doeleinden 64 bits breed zijn.

-mfp32
Neem aan dat floating-point registers 32 bits breed zijn.

-mfp64
Neem aan dat floating-point registers 64 bits breed zijn.

-mhard-zweven
Gebruik drijvende-komma coprocessor-instructies.

-msoft-zweven
Gebruik geen coprocessor-instructies met drijvende komma. Implementeer drijvende komma
berekeningen met behulp van bibliotheekaanroepen in plaats daarvan.

-msingle-float
Neem aan dat de drijvende-komma-coprocessor alleen bewerkingen met één precisie ondersteunt.

-mdubbele-zwevende
Neem aan dat de drijvende-komma-coprocessor bewerkingen met dubbele precisie ondersteunt. Dit
is de standaard.

-mllsc
-mno-llsc
Gebruik (niet gebruiken) ll, sc en sync instructies om ingebouwd atomair geheugen te implementeren
functies. Als geen van beide opties is opgegeven, gebruikt GCC de instructies als het
doelarchitectuur ondersteunt hen.

-mllsc is handig als de runtime-omgeving de instructies kan emuleren en -mno-llsc
kan handig zijn bij het compileren voor niet-standaard ISA's. U kunt van beide opties de
standaard door GCC te configureren met --met-llsc en --zonder-llsc respectievelijk.
--met-llsc is de standaard voor sommige configuraties; zie de installatiedocumentatie
voor meer info.

-mdsp
-mno-dsp
Gebruik (niet gebruiken) revisie 1 van de MIPS DSP ASE.
Deze optie definieert de preprocessor-macro __mips_dsp. Het definieert ook
__mips_dsp_rev om 1.

-mdspr2
-mno-dspr2
Gebruik (niet gebruiken) revisie 2 van de MIPS DSP ASE.
Deze optie definieert de preprocessor-macro's __mips_dsp en __mips_dspr2. Ook
definieert __mips_dsp_rev om 2.

-msmartmips
-mno-smartmips
Gebruik (niet gebruiken) de MIPS SmartMIPS ASE.

-gehandicapt-single
-mno-gepaarde-single
Gebruik (niet gebruiken) gepaarde-enkele drijvende-komma-instructies.
Voor deze optie moet hardware-ondersteuning voor drijvende komma's zijn ingeschakeld.

-mdmx
-mno-mdmx
Gebruik (niet gebruiken) MIPS Digital Media Extension-instructies. Deze optie kan alleen
gebruikt bij het genereren van 64-bits code en vereist hardware-floating-point-ondersteuning om
ingeschakeld.

-mips3d
-mno-mips3d
Gebruik (niet gebruiken) de MIPS-3D ASE. De optie -mips3d impliceert -gehandicapt-single.

- mmt
-mno-mt
Gebruik (niet gebruiken) MT Multithreading instructies.

-mlong64
Forceer "lange" typen om 64 bits breed te zijn. Zien -mlong32 voor een uitleg van de standaard
en de manier waarop de grootte van de aanwijzer wordt bepaald.

-mlong32
Forceer "long", "int" en pointer typen om 32 bits breed te zijn.

De standaardgrootte van "int"s, "long"s en pointers is afhankelijk van de ABI. Al de
ondersteunde ABI's gebruiken 32-bits "int"s. De n64 ABI gebruikt 64-bit "lange" s, net als de 64-bit
EABI; de anderen gebruiken 32-bit "long"s. Pointers zijn even groot als "lange" s, of de
dezelfde grootte als integer registers, welke kleiner is.

-msym32
-mno-sym32
Neem aan (neem niet aan) dat alle symbolen 32-bits waarden hebben, ongeacht de geselecteerde
ABI. Deze optie is handig in combinatie met: -mabi=64 en -mno-abicalls omdat
stelt GCC in staat om kortere en snellere verwijzingen naar symbolische adressen te genereren.

-G num
Zet definities van extern zichtbare gegevens in een kleine gegevenssectie als die gegevens niet bestaan
groter dan num bytes. GCC kan dan efficiënter toegang krijgen tot de gegevens; zien -mgpopt For
details.

De standaard -G optie hangt af van de configuratie.

-mlokale-sdata
-mno-lokale-sdata
Verlengen (niet verlengen) de -G gedrag ook naar lokale gegevens, zoals naar statische variabelen
in C. -mlokale-sdata is de standaard voor alle configuraties.

Als de linker klaagt dat een toepassing te veel kleine gegevens gebruikt, kunt u:
wilt proberen de minder prestatiekritische onderdelen opnieuw op te bouwen met -mno-lokale-sdata. Je
wil misschien ook grote bibliotheken bouwen met -mno-lokale-sdata, zodat de bibliotheken
laat meer ruimte over voor het hoofdprogramma.

-mextern-sdata
-mno-externe-sdata
Ga ervan uit (ga er niet vanuit) dat extern gedefinieerde gegevens zich in een kleine gegevenssectie bevinden als
die gegevens zijn binnen de -G limit. -mextern-sdata is de standaard voor iedereen
configuraties.

Als je een module compileert Weg Met -mextern-sdata -G num -mgpopt en Weg referenties a
variabele was dat is niet groter dan num bytes, moet u ervoor zorgen dat was is geplaatst
in een kleine gegevenssectie. Indien was wordt gedefinieerd door een andere module, moet u ofwel compileren
die module met een hoog genoeg -G instelling of voeg een attribuut "sectie" toe aan was's
definitie. Indien was gebruikelijk is, moet u de toepassing koppelen met een voldoende hoog -G
instellen.

De gemakkelijkste manier om aan deze beperkingen te voldoen, is door elke module te compileren en te koppelen
met dezelfde -G optie. Het is echter mogelijk dat u een bibliotheek wilt bouwen die ondersteuning biedt voor
verschillende kleine datalimieten. U kunt dit doen door de bibliotheek te compileren met
de hoogst ondersteunde -G instellen en aanvullend gebruiken -mno-externe-sdata om de
bibliotheek van het maken van aannames over extern gedefinieerde gegevens.

-mgpopt
-mno-gpopt
Gebruik (niet gebruiken) GP-relatieve toegangen voor symbolen waarvan bekend is dat ze in kleine gegevens voorkomen
sectie; zien -G, -mlokale-sdata en -mextern-sdata. -mgpopt is de standaard voor iedereen
configuraties.

-mno-gpopt is handig voor gevallen waarin het $gp-register mogelijk niet de waarde van bevat
"_gp". Als de code bijvoorbeeld deel uitmaakt van een bibliotheek die kan worden gebruikt bij het opstarten
monitor, zullen programma's die opstartmonitorroutines aanroepen een onbekende waarde doorgeven in $gp.
(In dergelijke situaties wordt de opstartmonitor zelf meestal gecompileerd met -G0.)

-mno-gpopt impliceert -mno-lokale-sdata en -mno-externe-sdata.

-ingesloten-gegevens
-mno-ingebedde-gegevens
Wijs variabelen eerst toe aan de alleen-lezen gegevenssectie indien mogelijk, dan daarna in de
kleine gegevenssectie indien mogelijk, anders in gegevens. Dit geeft een iets langzamere code
dan de standaard, maar vermindert de hoeveelheid RAM die nodig is bij het uitvoeren, en kan dus
voorkeur hebben voor sommige embedded systemen.

-muninit-const-in-rodata
-mno-unitit-const-in-rodata
Zet niet-geïnitialiseerde "const"-variabelen in de alleen-lezen gegevenssectie. Deze optie is
alleen zinvol in combinatie met -ingesloten-gegevens.

-mcode-leesbaar=het instellen van
Geef op of GCC code mag genereren die leest uit uitvoerbare secties. Er zijn
drie mogelijke instellingen:

-mcode-readable=ja
Instructies hebben vrij toegang tot uitvoerbare secties. Dit is de standaardinstelling.

-mcode-leesbaar=pcrel
MIPS16 PC-relatieve laadinstructies hebben toegang tot uitvoerbare secties, maar andere
instructies mogen dit niet doen. Deze optie is handig op 4KSc- en 4KSd-processors
wanneer de code-TLB's de Read Inhibit-bit hebben ingesteld. Het is ook handig op processors
die kan worden geconfigureerd om een ​​dubbele instructie/data SRAM-interface te hebben en dat,
net als de M4K, leiden pc-relatieve belastingen automatisch naar het instructie-RAM.

-mcode-readable=nee
Instructies mogen geen toegang hebben tot uitvoerbare secties. Deze optie kan handig zijn op:
doelen die zijn geconfigureerd om een ​​dubbele instructie/data SRAM-interface te hebben, maar
die (in tegenstelling tot de M4K) pc-relatieve belastingen niet automatisch omleiden naar de
instructie RAM.

-msplit-adressen
-mno-split-adressen
Schakel het gebruik van de "%hi()" en "%lo()" assembler-verplaatsingsoperators in (uit). Dit
optie is vervangen door -mexpliciete-relocs maar wordt bewaard voor achteruit
compatibiliteit.

-mexpliciete-relocs
-mno-expliciete-relocs
Gebruik (niet gebruiken) assembler-verplaatsingsoperatoren bij het omgaan met symbolische adressen.
Het alternatief, geselecteerd door -mno-expliciete-relocs, is om in plaats daarvan assembler-macro's te gebruiken.

-mexpliciete-relocs is de standaard als GCC is geconfigureerd om een ​​assembler te gebruiken die:
ondersteunt verhuisbedrijven.

-mcheck-nul-divisie
-mno-check-nul-divisie
Trap (niet trap) op integer delen door nul.

De standaard is -mcheck-nul-divisie.

-mdivide-vallen
-tussenpauzes
MIPS-systemen controleren op deling door nul door ofwel een conditionele trap of a . te genereren
instructie breken. Het gebruik van traps resulteert in kleinere code, maar wordt alleen ondersteund op MIPS
II en later. Sommige versies van de Linux-kernel hebben ook een bug die trap voorkomt
van het genereren van het juiste signaal ("SIGFPE"). Gebruik maken van -mdivide-vallen voorwaardelijk toestaan
vallen op architecturen die ze ondersteunen en -tussenpauzes het gebruik van
pauzes.

De standaard is meestal -mdivide-vallen, maar dit kan worden overschreven tijdens het configureren
gebruik --with-divide=onderbrekingen. Verdeel-door-nul-controles kunnen volledig worden uitgeschakeld met behulp van
-mno-check-nul-divisie.

-mmmpy
-mno-memcpy
Forceer (dwing niet) het gebruik van "memcpy()" voor niet-triviale blokbewegingen. De standaard
is -mno-memcpy, waarmee GCC de meeste kopieën van constant formaat inline kan plaatsen.

-mlong-oproepen
-mno-lange gesprekken
Schakel het gebruik van de "jal"-instructie uit (niet uitschakelen). Functies oproepen met "jal"
is efficiënter, maar vereist dat de beller en de gebelde zich in dezelfde 256 megabyte bevinden
segment.

Deze optie heeft geen effect op de abicalls-code. De standaard is -mno-lange gesprekken.

-mad
-mno-gek
Schakel het gebruik van de instructies "mad", "madu" en "mul" in (uit) zoals geleverd door de
R4650 ISA.

-mfused-gek
-mno-gefuseerd-madd
Schakel het gebruik van de drijvende-komma-instructies voor vermenigvuldigen en accumuleren in (uit) wanneer ze
zijn beschikbaar. De standaard is -mfused-gek.

Wanneer vermenigvuldigen-accumuleren instructies worden gebruikt, wordt het tussenproduct berekend
tot oneindige precisie en is niet onderworpen aan de FCSR Flush to Zero bit. Dit kan zijn
in sommige omstandigheden ongewenst.

-nocpp
Vertel de MIPS-assembler om zijn preprocessor niet uit te voeren over gebruikers-assembler-bestanden (met a
.s achtervoegsel) bij het samenstellen ervan.

-mfix-24k
-mno-fix-24k
Werk rond de 24K E48 (verloren gegevens over winkels tijdens bijvullen) errata. De oplossingen
worden uitgevoerd door de assembler in plaats van door GCC.

-mfix-r4000
-mno-fix-r4000
Werk om bepaalde R4000 CPU-errata heen:

- Een dubbelwoord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd
onmiddellijk na het starten van een gehele deling.

- Een dubbel woord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd terwijl
een gehele vermenigvuldiging aan de gang is.

- Een gehele deling kan een onjuist resultaat geven als het wordt gestart in een vertragingsslot van a
genomen tak of een sprong.

-mfix-r4400
-mno-fix-r4400
Werk om bepaalde R4400 CPU-errata heen:

- Een dubbelwoord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd
onmiddellijk na het starten van een gehele deling.

-mfix-r10000
-mno-fix-r10000
Werk rond bepaalde R10000-errata:

- "ll"/"sc"-reeksen gedragen zich mogelijk niet atomair bij revisies vóór 3.0. Zij mogen
impasse bij revisies 2.6 en eerder.

Deze optie kan alleen worden gebruikt als de doelarchitectuur branch-waarschijnlijk ondersteunt
instructies. -mfix-r10000 is de standaard wanneer -maart=r10000 is gebruikt; -mno-fix-r10000
is anders de standaard.

-mfix-vr4120
-mno-fix-vr4120
Werk om bepaalde VR4120-errata heen:

- "dmultu" geeft niet altijd het juiste resultaat.

- "div" en "ddiv" geven niet altijd het juiste resultaat als een van de operanden
is negatief.

De tijdelijke oplossingen voor de errata van de deling zijn afhankelijk van speciale functies in libgcc.a. Op
aanwezig zijn, worden deze functies alleen geleverd door de "mips64vr*-elf"-configuraties.

Andere VR4120 errata vereisen dat een nop wordt ingevoegd tussen bepaalde paren van
instructies. Deze errata worden afgehandeld door de assembler, niet door GCC zelf.

-mfix-vr4130
Werk rond de VR4130 "mflo"/"mfhi" errata. De tijdelijke oplossingen worden geïmplementeerd door de
assembler in plaats van door GCC, hoewel GCC het gebruik van "mflo" en "mfhi" zal vermijden als de
VR4130 "macc", "macchi", "dmacc" en "dmacchi" instructies zijn in plaats daarvan beschikbaar.

-mfix-sb1
-mno-fix-sb1
Werk om bepaalde SB-1 CPU-kernfouten heen. (Deze vlag werkt momenteel rond de SB-1
revisie 2 "F1" en "F2" drijvende-komma errata.)

-mr10k-cache-barrière=het instellen van
Geef aan of GCC cachebarrières moet invoegen om de bijwerkingen van:
speculatie over R10K-processors.

Net als bij veel processors probeert de R10K de uitkomst van een voorwaardelijke
branch en voert speculatief instructies uit van de "genomen" branch. het later
breekt deze instructies af als de voorspelde uitkomst verkeerd was. Echter, op de R10K,
zelfs afgebroken instructies kunnen bijwerkingen hebben.

Dit probleem is alleen van invloed op kernel-archieven en, afhankelijk van het systeem, op het laden van de kernel.
Een speculatief uitgevoerde winkel kan bijvoorbeeld het doelgeheugen in de cache laden
en markeer de cacheregel als vuil, zelfs als de winkel zelf later wordt afgebroken. Als een DMA
bewerking schrijft naar hetzelfde geheugengebied voordat de "vuile" regel wordt leeggemaakt, de
gegevens in de cache zullen de DMA-gegevens overschrijven. Zie de handleiding van de R10K-processor voor een volledige
beschrijving, inclusief andere mogelijke problemen.

Een tijdelijke oplossing is om instructies voor de cachebarrière in te voegen vóór elke geheugentoegang die:
zou speculatief kunnen worden uitgevoerd en dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.
-mr10k-cache-barrière=het instellen van controleert de implementatie van deze tijdelijke oplossing door GCC. Het
gaat ervan uit dat afgebroken toegangen tot een byte in de volgende regio's geen kant hebben
Effecten:

1. het geheugen dat wordt ingenomen door het stapelframe van de huidige functie;

2. het geheugen dat wordt ingenomen door een inkomend stapelargument;

3. het geheugen bezet door een object met een link-time-constant adres.

Het is de verantwoordelijkheid van de kernel om ervoor te zorgen dat speculatieve toegang tot deze regio's
zijn inderdaad veilig.

Als het invoerprogramma een functiedeclaratie bevat, zoals:

void foo (nietig);

dan moet de implementatie van "foo" toestaan ​​dat "j foo" en "jal foo" worden uitgevoerd
speculatief. GCC respecteert deze beperking voor functies die het zelf compileert. Het
verwacht dat niet-GCC-functies (zoals handgeschreven assemblagecode) hetzelfde doen.

De optie heeft drie vormen:

-mr10k-cache-barrier=laad-opslag
Plaats een cache-barrière vóór een belasting of winkel die speculatief kan worden uitgevoerd
en dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.

-mr10k-cache-barrier=winkel
Plaats een cachebarrière voor een winkel die speculatief kan worden uitgevoerd en
dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.

-mr10k-cache-barrier=geen
Schakel het invoegen van cachebarrières uit. Dit is de standaardinstelling.

-mflush-func=func
-mno-flush-func
Specificeert de functie die moet worden aangeroepen om de I- en D-caches te spoelen, of om dergelijke niet aan te roepen
functie. Indien aangeroepen, moet de functie dezelfde argumenten hebben als de common
"_flush_func()", dat wil zeggen, het adres van het geheugenbereik waarvoor de cache wordt gebruikt
flushed, de grootte van het geheugenbereik en het getal 3 (om beide caches te wissen). De
standaard hangt af van het doel waarvoor GCC is geconfigureerd, maar is meestal ofwel:
_flush_func or __cpu_flush.

mbranch-kosten=num
Stel de kosten van filialen in op ongeveer num "eenvoudige" instructies. Deze kosten zijn slechts een
heuristiek en levert niet gegarandeerd consistente resultaten op voor alle releases. Een nul
cost redundant selecteert de standaard, die is gebaseerd op de -mtune instellen.

-mbranch-waarschijnlijk
-mno-tak-waarschijnlijk
Schakel het gebruik van Vertakkingswaarschijnlijke instructies in of uit, ongeacht de standaard voor de
geselecteerde architectuur. Standaard kunnen Branch Likely-instructies worden gegenereerd als:
ze worden ondersteund door de geselecteerde architectuur. Een uitzondering is voor de MIPS32 en
MIPS64-architecturen en processors die deze architecturen implementeren; voor degenen,
Branch Likely-instructies worden niet standaard gegenereerd omdat de MIPS32 en
MIPS64-architecturen keuren het gebruik ervan specifiek af.

-mfp-uitzonderingen
-mno-fp-uitzonderingen
Specificeert of FP-uitzonderingen zijn ingeschakeld. Dit heeft invloed op hoe we FP plannen
instructies voor sommige processors. De standaardinstelling is dat FP-uitzonderingen zijn ingeschakeld.

Bijvoorbeeld, op de SB-1, als FP-uitzonderingen zijn uitgeschakeld en we 64-bits uitzenden
code, dan kunnen we beide FP-buizen gebruiken. Anders kunnen we maar één FP-buis gebruiken.

-mvr4130-uitlijnen
-mno-vr4130-uitlijnen
De VR4130-pijplijn is superscalair in twee richtingen, maar kan slechts twee instructies geven
samen als de eerste 8-byte uitgelijnd is. Wanneer deze optie is ingeschakeld, zal GCC dat doen
paren instructies uitlijnen waarvan het denkt dat ze parallel moeten worden uitgevoerd.

Deze optie heeft alleen effect bij het optimaliseren voor de VR4130. Het maakt normaal gesproken code
sneller, maar ten koste van het groter maken. Het is standaard ingeschakeld op
optimalisatie niveau -O3.

-msynci
-mno-sync
Activeer (deactiveer) het genereren van "synci"-instructies op architecturen die dit ondersteunen.
De "sync"-instructies (indien ingeschakeld) worden gegenereerd wanneer
"__builtin___clear_cache()" is gecompileerd.

Deze optie staat standaard op "-mno-synci", maar de standaard kan worden overschreven door te configureren
met "--met-synci".

Bij het compileren van code voor systemen met één processor is het over het algemeen veilig om "synci" te gebruiken.
Op veel multi-core (SMP) systemen zal het de instructie echter niet ongeldig maken
caches op alle kernen en kan leiden tot ongedefinieerd gedrag.

-mrelax-pic-oproepen
-mno-relax-pic-oproepen
Probeer PIC-oproepen die normaal via register $ 25 worden verzonden, om te zetten in directe oproepen.
Dit is alleen mogelijk als de linker de bestemming op link-time kan bepalen en als
de bestemming is binnen bereik voor een directe oproep.

-mrelax-pic-oproepen is de standaard als GCC is geconfigureerd om een ​​assembler te gebruiken en a
linker die de ".reloc" assembly-richtlijn ondersteunt en "-mexplicit-relocs" is in
effect. Met "-mno-explicit-relocs" kan deze optimalisatie worden uitgevoerd door de
assembler en de linker alleen zonder hulp van de compiler.

-mmcount-ra-adres
-mno-mcount-ra-adres
Emit (niet uitzenden) code waarmee "_mcount" de return van de aanroepende functie kan wijzigen
adres. Indien ingeschakeld, breidt deze optie de gebruikelijke "_mcount"-interface uit met een nieuwe
ra-adres parameter, die het type "intptr_t *" heeft en wordt doorgegeven in register $12.
"_mcount" kan vervolgens het retouradres wijzigen door het volgende te doen:

· Teruggeven van het nieuwe adres in register $31.

· Het nieuwe adres opslaan in "*ra-adres", als ra-adres is niet-null.

De standaard is -mno-mcount-ra-adres.

MMIX Opties

Deze opties zijn gedefinieerd voor de MMIX:

-mlibfuncties
-mno-libfuncs
Specificeer dat intrinsieke bibliotheekfuncties worden gecompileerd, waarbij alle waarden worden doorgegeven
registers, ongeacht de grootte.

-mepsilon
-mno-epsilon
Genereer drijvende-komma-vergelijkingsinstructies die vergelijkbaar zijn met de "rE"
epsilon registreren.

-mabi=mmixware
-mabi=gnu
Genereer code die functieparameters doorgeeft en retourneert waarden die (in de aangeroepen
functie) worden gezien als registers $0 en hoger, in tegenstelling tot de GNU ABI die gebruikmaakt van global
registreert $ 231 en hoger.

-mzero-uitbreiden
-mno-nul-verlengen
Als u gegevens uit het geheugen leest met een grootte kleiner dan 64 bits, gebruik dan (niet gebruiken) nul-
het standaard uitbreiden van laadinstructies in plaats van tekenverlengende instructies.

-mknuthdiv
-mno-knuthdiv
Zorg dat het resultaat van een deling die een rest oplevert hetzelfde teken heeft als de deler.
Met de standaard, -mno-knuthdiv, het teken van de rest volgt het teken van de
dividend. Beide methoden zijn rekenkundig geldig, de laatste is bijna uitsluitend
gebruikt.

-mtoplevel-symbolen
-mno-toplevel-symbolen
Voeg toe (niet toevoegen) a : op alle globale symbolen, zodat de assembly-code kan worden gebruikt
met de montagerichtlijn "PREFIX".

-melf
Genereer een uitvoerbaar bestand in de ELF-indeling, in plaats van de standaard mmo formaat gebruikt door
de mix simulator.

-mtak-voorspellen
-mno-tak-voorspelling
Gebruik (gebruik niet) de instructies voor waarschijnlijke vertakkingen, wanneer statische vertakkingsvoorspelling
geeft een waarschijnlijke tak aan.

-mbase-adressen
-mno-base-adressen
Genereer (niet genereren) code die gebruikmaakt van baseren adressen. Een basisadres gebruiken
genereert automatisch een verzoek (verwerkt door de assembler en de linker) voor a
constante op te zetten in een globaal register. Het register wordt gebruikt voor een of meer bases
adresverzoeken binnen het bereik 0 tot 255 vanaf de waarde in het register. De
leidt over het algemeen tot korte en snelle code, maar het aantal verschillende gegevensitems dat
kunnen worden aangepakt, is beperkt. Dit betekent dat een programma dat veel statische gegevens gebruikt
kan nodig hebben -mno-base-adressen.

-msingle-uitgang
-mno-enkele-uitgang
Forceer (dwing niet) gegenereerde code om een ​​enkel exit-punt in elke functie te hebben.

MN10300 Opties

Deze -m opties zijn gedefinieerd voor Matsushita MN10300-architecturen:

-mmult-bug
Genereer code om fouten in de vermenigvuldigingsinstructies voor de MN10300-processors te voorkomen.
Dit is de standaardinstelling.

-mno-multi-bug
Genereer geen code om fouten in de vermenigvuldigingsinstructies voor de MN10300 te voorkomen
processors.

-mama33
Genereer code met behulp van functies die specifiek zijn voor de AM33-processor.

-mno-am33
Genereer geen code met functies die specifiek zijn voor de AM33-processor. Dit is de
standaard.

-mam33-2
Genereer code met behulp van functies die specifiek zijn voor de AM33/2.0-processor.

-mama34
Genereer code met behulp van functies die specifiek zijn voor de AM34-processor.

-mtune=CPU-type
Gebruik de timingkenmerken van het aangegeven CPU-type bij het plannen van instructies.
Dit verandert niets aan het beoogde processortype. Het CPU-type moet een van zijn:
mn10300, am33, ben33-2 or am34.

-mretourwijzer-op-d0
Wanneer u een functie genereert die een aanwijzer retourneert, retourneert u de aanwijzer in zowel "a0" als
"d0". Anders wordt de aanwijzer alleen geretourneerd in a0 en probeert hij deze aan te roepen
functies zonder prototype zouden tot fouten leiden. Merk op dat deze optie is ingeschakeld door
standaard; gebruik maken van -mno-retourwijzer-op-d0 om het uit te schakelen.

-mno-crt0
Maak geen koppeling in het C runtime initialisatieobjectbestand.

-montspan
Geef aan de linker aan dat deze een relaxatie-optimalisatie moet uitvoeren om
vertakkingen, oproepen en absolute geheugenadressen verkorten. Deze optie heeft alleen effect
wanneer gebruikt op de opdrachtregel voor de laatste linkstap.

Deze optie maakt symbolische foutopsporing onmogelijk.

-mlw
Laat de compiler genereren lang Instructie Woord instructies als het doel de . is
AM33 of later. Dit is de standaardinstelling. Deze optie definieert de preprocessor-macro
__LIW__.

-mijn
Sta niet toe dat de compiler genereert lang Instructie Woord instructies. Deze optie
definieert de preprocessor-macro __NO_LIW__.

-msetlb
Laat de compiler de genereren SETLB en Lcc instructies als het doel de . is
AM33 of later. Dit is de standaardinstelling. Deze optie definieert de preprocessor-macro
__SETLB__.

-mnosetlb
Sta niet toe dat de compiler genereert SETLB or Lcc instructies. Deze optie definieert
de preprocessor-macro __NO_SETLB__.

PDP-11 Opties

Deze opties zijn gedefinieerd voor de PDP-11:

-mfpu
Gebruik hardware FPP drijvende komma. Dit is de standaardinstelling. (FIS drijvende komma op de
PDP-11/40 wordt niet ondersteund.)

-msoft-zweven
Gebruik geen hardware drijvende komma.

-mac0
Retourneer drijvende-kommaresultaten in ac0 (fr0 in Unix assembler-syntaxis).

-mno-ac0
Retourneer drijvende-kommaresultaten in het geheugen. Dit is de standaardinstelling.

-m40
Genereer code voor een PDP-11/40.

-m45
Genereer code voor een PDP-11/45. Dit is de standaardinstelling.

-m10
Genereer code voor een PDP-11/10.

-mbcopy-ingebouwd
Gebruik inline "movmemhi" patronen voor het kopiëren van geheugen. Dit is de standaardinstelling.

-mbkopie
Gebruik geen inline "movmemhi"-patronen voor het kopiëren van geheugen.

-mint16
-mno-int32
Gebruik 16-bits "int". Dit is de standaardinstelling.

-mint32
-mno-int16
Gebruik 32-bits "int".

-mfloat64
-mno-float32
Gebruik 64-bits "float". Dit is de standaardinstelling.

-mfloat32
-mno-float64
Gebruik 32-bits "float".

-mabshi
Gebruik "abshi2" patroon. Dit is de standaardinstelling.

-mno-abshi
Gebruik geen "abshi2" patroon.

-mbranch-duur
Doen alsof filialen duur zijn. Dit is om te experimenteren met codegeneratie
alleen.

-mbrach-goedkoop
Doe niet alsof filialen duur zijn. Dit is de standaardinstelling.

-munix-asm
Gebruik Unix assembler-syntaxis. Dit is de standaard wanneer geconfigureerd voor: pdp11-*-bsd.

-mdec-asm
Gebruik DEC assembler-syntaxis. Dit is de standaardinstelling indien geconfigureerd voor een PDP-11-doel
dan pdp11-*-bsd.

picoChip Opties

Deze -m opties zijn gedefinieerd voor picoChip-implementaties:

-mae=een_type
Stel de instructieset, registerset en instructieplanningsparameters in voor array
elementtype een_type. Ondersteunde waarden voor een_type zijn ENIGE, MUL en MAC-adres.

-mae=ELKE selecteert een volledig generiek AE-type. Code gegenereerd met deze optie zal
draaien op een van de andere AE-typen. De code zal niet zo efficiënt zijn als het zou zijn
samengesteld voor een specifiek AE-type en sommige soorten bewerkingen (bijv. Vermenigvuldiging)
zal niet goed werken op alle soorten AE.

-mae=MUL selecteert een MUL AE-type. Dit is het meest bruikbare AE-type voor gecompileerde code,
en is de standaard.

-mae=MAC selecteert een DSP-achtige MAC AE. Code die met deze optie is gecompileerd, kan last hebben van:
slechte prestaties van byte (char) manipulatie, omdat de DSP AE niet voorziet in
hardware-ondersteuning voor byte load/stores.

-msymbool-als-adres
Schakel de compiler in om een ​​symboolnaam direct te gebruiken als een adres in een load/store
instructie, zonder deze eerst in een register te laden. Meestal is het gebruik hiervan
optie zal grotere programma's genereren, die sneller werken dan wanneer de optie dat niet is
gebruikt. De resultaten variëren echter van programma tot programma, dus het wordt aan de gebruiker overgelaten
optie, in plaats van permanent ingeschakeld te zijn.

-mno-inefficiënte-waarschuwingen
Schakelt waarschuwingen over het genereren van inefficiënte code uit. Deze waarschuwingen kunnen zijn:
gegenereerd, bijvoorbeeld bij het compileren van code die geheugenbewerkingen op byteniveau uitvoert
op het MAC AE-type. De MAC AE heeft geen hardwareondersteuning voor geheugen op byteniveau
operaties, dus alle byte load/stores moeten worden gesynthetiseerd uit word load/store
activiteiten. Dit is inefficiënt en er wordt een waarschuwing gegenereerd die de
programmeur dat ze de code moeten herschrijven om bytebewerkingen te vermijden of om een
AE-type dat de nodige hardware-ondersteuning heeft. Met deze optie wordt de waarschuwing ingeschakeld
uitgeschakeld worden.

PowerPC Opties

Deze staan ​​vermeld onder

RL78 Opties

-msim
Koppelingen in aanvullende doelbibliotheken om de werking binnen een simulator te ondersteunen.

-mmul=geen
-mmul=g13
-mmul=rl78
Specificeert het type ondersteuning voor hardwarevermenigvuldiging dat moet worden gebruikt. De standaard is
"none", die softwarevermenigvuldigingsfuncties gebruikt. De optie "g13" is voor de
hardware vermenigvuldig/deel randapparatuur alleen op de RL78/G13-doelen. De "rl78" optie
is voor de standaard hardwarevermenigvuldiging gedefinieerd in de RL78-softwarehandleiding.

IBM RS / 6000 en PowerPC Opties

Deze -m opties zijn gedefinieerd voor de IBM RS/6000 en PowerPC:

-mkracht
-mno-kracht
-mkracht2
-mno-kracht2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfpnd
-mno-vprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-harde-dfp
GCC ondersteunt twee gerelateerde instructieset-architecturen voor de RS/6000 en PowerPC.
De POWER instructieset zijn de instructies die worden ondersteund door de rivieren chipset gebruikt
in de originele RS/6000-systemen en de PowerPC instructieset is de architectuur van
de Freescale MPC5xx, MPC6xx, MPC8xx microprocessors en de IBM 4xx, 6xx en
volgende microprocessoren.

Geen van beide architectuur is een subset van de andere. Er is echter een grote gemeenschappelijke subset
instructies ondersteund door beide. Een MQ-register is opgenomen in processors
ondersteuning van de POWER-architectuur.

U gebruikt deze opties om aan te geven welke instructies beschikbaar zijn op de processor die u
gebruiken. De standaardwaarde van deze opties wordt bepaald bij het configureren van GCC.
Specificeren van de -mcpu=cpu_type overschrijft de specificatie van deze opties. We
raad u aan de te gebruiken -mcpu=cpu_type optie in plaats van de hierboven genoemde opties.

De -mkracht Met de optie kan GCC instructies genereren die alleen in de
POWER-architectuur en om het MQ-register te gebruiken. specificeren -mkracht2 impliceert -Power en
stelt GCC ook in staat instructies te genereren die aanwezig zijn in de POWER2-architectuur
maar niet de originele POWER-architectuur.

De -mpowerpc Met de optie kan GCC instructies genereren die alleen in de
32-bits subset van de PowerPC-architectuur. specificeren -mpowerpc-gpopt impliceert
-mpowerpc en stelt GCC ook in staat om de optionele PowerPC-architectuurinstructies in te gebruiken
de groep Algemeen gebruik, inclusief vierkantswortel met drijvende komma. specificeren
-mpowerpc-gfxopt impliceert -mpowerpc en stelt GCC ook in staat om de optionele PowerPC te gebruiken
architectuurinstructies in de groep Afbeeldingen, inclusief drijvende-kommaselectie.

De -mmfcrf optie stelt GCC in staat om de verplaatsing vanuit het veld conditieregister te genereren
instructie geïmplementeerd op de POWER4-processor en andere processors die de
PowerPC V2.01-architectuur. De -mpopcntb optie stelt GCC in staat om de popcount te genereren
en dubbele precisie FP wederzijdse schattingsinstructie geïmplementeerd op de POWER5
processor en andere processors die de PowerPC V2.02-architectuur ondersteunen. De
-mpopcntd optie stelt GCC in staat om de popcount-instructie te genereren die is geïmplementeerd op de
POWER7-processor en andere processors die de PowerPC V2.06-architectuur ondersteunen.
De -mfpnd optie stelt GCC in staat om de FP-ronde naar integer-instructies te genereren
geïmplementeerd op de POWER5+ processor en andere processors die de PowerPC . ondersteunen
V2.03-architectuur. De -mcmpb optie stelt GCC in staat om de vergelijkingsbytes te genereren
instructie geïmplementeerd op de POWER6-processor en andere processors die de
PowerPC V2.05-architectuur. De -mmfpgpr optie stelt GCC in staat om de FP-zet te genereren
naar/van registerinstructies voor algemene doeleinden geïmplementeerd op de POWER6X-processor en
andere processors die de uitgebreide PowerPC V2.05-architectuur ondersteunen. De -mhard-dfp
optie stelt GCC in staat om de decimale drijvende-komma-instructies te genereren die zijn geïmplementeerd op
sommige POWER-processors.

De -mpowerpc64 optie stelt GCC in staat om de extra 64-bits instructies te genereren die:
zijn te vinden in de volledige PowerPC64-architectuur en om GPR's te behandelen als 64-bits, dubbelwoord
hoeveelheden. GCC is standaard ingesteld op -mno-powerpc64.

Als u beide opgeeft -mno-kracht en -mno-powerpc, gebruikt GCC alleen de instructies in
de gemeenschappelijke subset van beide architecturen plus enkele speciale AIX common-mode-aanroepen, en
zal het MQ-register niet gebruiken. Specificeer beide -mkracht en -mpowerpc staat GCC toe
elke instructie van beide architectuur gebruiken en het gebruik van het MQ-register toestaan;
specificeer dit voor de Motorola MPC601.

-mnew-geheugensteuntjes
-schimmel-ezelsbruggetjes
Selecteer welke geheugensteuntjes u wilt gebruiken in de gegenereerde assemblercode. Met -mnew-geheugensteuntjes,
GCC gebruikt de assembler-mnemonics die zijn gedefinieerd voor de PowerPC-architectuur. Met
-schimmel-ezelsbruggetjes het gebruikt de assembler-mnemonics die zijn gedefinieerd voor de POWER-architectuur.
Instructies die in slechts één architectuur zijn gedefinieerd, hebben slechts één ezelsbruggetje; GCC maakt daar gebruik van
ezelsbruggetje ongeacht welke van deze opties is opgegeven.

GCC gebruikt standaard de geheugensteuntjes die geschikt zijn voor de gebruikte architectuur. specificeren
-mcpu=cpu_type overschrijft soms de waarde van deze optie. Tenzij je aan het bouwen bent
een cross-compiler, zou u normaal gesproken ook niet moeten specificeren -mnew-geheugensteuntjes or
-schimmel-ezelsbruggetjes, maar moet in plaats daarvan de standaardinstelling accepteren.

-mcpu=cpu_type
Stel architectuurtype in, registreer gebruik, keuze van geheugensteuntjes en instructieplanning
parameters voor machinetype cpu_type. Ondersteunde waarden voor cpu_type zijn 401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, Titan, energie, power2, power3, power4, power5,
kracht5+, power6, kracht6x, power7, gemeenschappelijk, stroom pc, stroompc64, rivieren, rivieren1, rivieren2, rsc,
en rs64.

-mcpu=vaak selecteert een volledig generieke processor. Code gegenereerd onder deze optie
werkt op elke POWER- of PowerPC-processor. GCC gebruikt alleen de instructies in de
gemeenschappelijke subset van beide architecturen en maakt geen gebruik van het MQ-register. GCC gaat uit van een
generiek processormodel voor planningsdoeleinden.

-mcpu=kracht, -mcpu=vermogen2, -mcpu=powerpc en -mcpu=powerpc64 specificeer generieke POWER,
POWER2, ​​pure 32-bits PowerPC (dwz niet MPC601) en 64-bits PowerPC-architectuur
machinetypes, met een geschikt, generiek processormodel dat wordt aangenomen voor planning
praktische doeleinden.

De andere opties specificeren een specifieke processor. Code gegenereerd onder die opties
werkt het beste op die processor en werkt mogelijk helemaal niet op andere.

De -mcpu opties activeren of deactiveren automatisch de volgende opties:

-maltiefc -mfpnd -mhard-zweven -mmfcrf -mveelvoudig -mnew-geheugensteuntjes -mpopcntb
-mpopcntd -mkracht -mkracht2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdubbele-zwevende -msimple-fpu -mtekenreeks -mmulhw -mdlmzb -mmfpgpr -mvsx

De specifieke opties die voor een bepaalde CPU zijn ingesteld, variëren tussen compilerversies,
afhankelijk van welke instelling de optimale code voor die CPU lijkt te produceren; dat doet het niet
weerspiegelen noodzakelijkerwijs de mogelijkheden van de daadwerkelijke hardware. Als u een wilt instellen
individuele optie naar een bepaalde waarde, kunt u deze specificeren na de -mcpu keuze,
als -mcpu=970 -mno-altivec.

Op AIX, de -maltiefc en -mpowerpc64 opties worden niet in- of uitgeschakeld door de -mcpu
optie op dit moment omdat AIX deze opties niet volledig ondersteunt. Jij mag
schakel ze nog steeds afzonderlijk in of uit als u zeker weet dat het werkt in uw
milieu.

-mtune=cpu_type
Stel de instructieplanningsparameters in voor het machinetype: cpu_type, maar niet instellen
het architectuurtype, registergebruik of keuze van geheugensteuntjes, zoals -mcpu=cpu_type
zou. Dezelfde waarden voor cpu_type worden gebruikt voor -mtune als voor -mcpu. Als beide zijn
opgegeven, zal de gegenereerde code de set architectuur, registers en geheugensteuntjes gebruiken
by -mcpu, maar de planningsparameters ingesteld door -mtune.

-mcmodel=klein
Genereer PowerPC64-code voor het kleine model: de TOC is beperkt tot 64k.

-mcmodel=gemiddeld
Genereer PowerPC64-code voor het mediummodel: de inhoudsopgave en andere statische gegevens zijn mogelijk up
tot een totaal van 4G in grootte.

-mcmodel=groot
Genereer PowerPC64-code voor het grote model: de TOC kan tot 4G groot zijn. Ander
gegevens en code wordt alleen beperkt door de 64-bits adresruimte.

-maltiefc
-mno-altivec
Genereer code die gebruikmaakt (gebruikt niet) AltiVec-instructies, en schakel ook het gebruik in
van ingebouwde functies die directere toegang tot de AltiVec-instructieset mogelijk maken.
Mogelijk moet u ook instellen -mabi=altivec om de huidige ABI aan te passen met AltiVec ABI
verbeteringen.

-mvropslaan
-mno-vrsave
Genereer VRSAVE-instructies bij het genereren van AltiVec-code.

-mgen-cel-microcode
Genereer Cell-microcode-instructies

-mwarn-cel-microcode
Waarschuwing wanneer een Cell-microcode-instructie wordt uitgezonden. Een voorbeeld van een cel
microcode-instructie is een variabele verschuiving.

-msecure-plt
Genereer code waarmee ld en ld.so uitvoerbare bestanden en gedeelde bibliotheken kunnen bouwen
niet-exec .plt en .got secties. Dit is een PowerPC 32-bit SYSV ABI-optie.

-mbss-plt
Genereer code die een BSS .plt-sectie gebruikt die ld.so invult, en vereist .plt en
.got secties die zowel beschrijfbaar als uitvoerbaar zijn. Dit is een PowerPC 32-bit SYSV
ABI-optie.

- misel
-mno-isel
Deze schakelaar schakelt het genereren van ISEL-instructies in of uit.

-misel=Ja nee
Deze schakelaar is afgeschaft. Gebruik maken van - misel en -mno-isel gebruiken.

-msp
-mno-spec
Deze schakelaar schakelt het genereren van SPE simd-instructies in of uit.

-verslechterd
-mno-gepaard
Deze schakelaar schakelt het genereren van GEKOPPELDE simd-instructies in of uit.

-msp=Ja nee
Deze optie is afgeschaft. Gebruik maken van -msp en -mno-spec gebruiken.

-mvsx
-mno-vsx
Genereer code die gebruikmaakt (geen gebruik maakt van) vector/scalar (VSX) instructies, en ook
het gebruik van ingebouwde functies mogelijk maken die directere toegang tot de VSX . mogelijk maken
instructie set.

-mfloat-gprs=ja/enkel/dubbel/nee
-mfloat-gprs
Deze schakelaar schakelt het genereren van drijvende-kommabewerkingen in of uit op de
registers voor algemene doeleinden voor architecturen die dit ondersteunen.

Het argument ja or single maakt het gebruik van single-precision floating-point mogelijk
operaties.

Het argument verdubbelen maakt het gebruik van enkele en dubbele precisie drijvende komma mogelijk
operaties.

Het argument geen schakelt drijvende-kommabewerkingen uit op de registers voor algemene doeleinden.

Deze optie is momenteel alleen beschikbaar op de MPC854x.

-m32
-m64
Genereer code voor 32-bits of 64-bits omgevingen van Darwin- en SVR4-doelen (inclusief:
GNU/Linux). De 32-bits omgeving stelt int, long en pointer in op 32 bits en
genereert code die op elke PowerPC-variant draait. De 64-bits omgeving wordt ingesteld op
32 bits en lang en pointer naar 64 bits, en genereert code voor PowerPC64, zoals voor:
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-som-in-toc
-minimale-toc
Wijzig het genereren van de TOC (Table Of Contents), die is gemaakt voor elke
uitvoerbaar bestand. De -mfull-toc optie is standaard geselecteerd. In dat geval GCC
zal ten minste één TOC-invoer toewijzen voor elke unieke niet-automatische variabelereferentie
in je programma. GCC zal ook drijvende-kommaconstanten in de inhoudsopgave plaatsen. Echter,
slechts 16,384 vermeldingen zijn beschikbaar in de TOC.

Als u een linker-foutbericht ontvangt dat zegt dat u de beschikbare . hebt overschreden
TOC-ruimte, kunt u de hoeveelheid TOC-ruimte die wordt gebruikt verminderen met de -mno-fp-in-toc en
-mno-som-in-toc opties. -mno-fp-in-toc voorkomt dat GCC een drijvende komma plaatst
constanten in de TOC en -mno-som-in-toc dwingt GCC om code te genereren om de . te berekenen
som van een adres en een constante tijdens runtime in plaats van die som in de TOC te zetten.
U kunt een of beide van deze opties specificeren. Elk zorgt ervoor dat GCC zeer
iets langzamere en grotere code ten koste van het besparen van TOC-ruimte.

Als u nog steeds onvoldoende ruimte heeft in de inhoudsopgave, zelfs als u beide opties opgeeft,
specificeren -minimale-toc in plaats daarvan. Deze optie zorgt ervoor dat GCC slechts één inhoudsopgave invoert voor:
elk bestand. Wanneer u deze optie opgeeft, produceert GCC code die langzamer is en
groter maar die extreem weinig TOC-ruimte gebruikt. Misschien wilt u deze optie gebruiken
alleen op bestanden die minder vaak uitgevoerde code bevatten.

-maix64
-maix32
Schakel 64-bits AIX ABI en aanroepconventie in: 64-bits pointers, 64-bits "lang" type en
de infrastructuur die nodig is om hen te ondersteunen. Specificeren -maix64 impliceert -mpowerpc64 en
-mpowerpcterwijl -maix32 schakelt de 64-bits ABI uit en impliceert: -mno-powerpc64. GCC
standaard -maix32.

-mxl-compatibel
-mno-xl-compatibel
Produceer code die beter overeenkomt met de IBM XL-compilersemantiek bij gebruik van AIX-
compatibele ABI. Geef drijvende-kommaargumenten door aan geprototypeerde functies buiten de
registreer opslaggebied (RSA) op de stapel naast argument-FPR's. Ga er niet van uit
dat meest significante dubbel in 128-bit lange dubbele waarde correct is afgerond wanneer
waarden vergelijken en converteren naar dubbel. Gebruik XL-symboolnamen voor lang dubbel
routines ondersteunen.

De AIX-aanroepconventie werd uitgebreid, maar was aanvankelijk niet gedocumenteerd voor het afhandelen van een
obscuur K&R C geval van het aanroepen van een functie waaraan het adres van zijn argumenten moet doorgegeven worden
minder argumenten dan aangegeven. IBM XL-compilers hebben toegang tot drijvende-kommaargumenten die:
passen niet in de RSA van de stapel wanneer een subroutine wordt gecompileerd zonder
optimalisatie. Omdat altijd het opslaan van drijvende-kommaargumenten op de stapel is
inefficiënt en zelden nodig, deze optie is niet standaard ingeschakeld en is alleen:
nodig bij het aanroepen van subroutines die zijn gecompileerd door IBM XL-compilers zonder optimalisatie.

-mp
Support IBM RS / 6000 SP Parallel Milieu (PE). Koppel een applicatie die is geschreven om te gebruiken
bericht doorgeven met speciale opstartcode om de toepassing te laten draaien. De
systeem moet PE geïnstalleerd hebben op de standaardlocatie (/usr/lpp/ppe.poe/), of de
bril bestand moet worden overschreven met de -specificaties= optie om de juiste te specificeren
directory locatie. De Parallelle Omgeving ondersteunt geen threads, dus de -mp
optie en de -pdraad optie zijn niet compatibel.

-kwaadaardig-natuurlijk
-kwaadaardige macht
Op AIX, 32-bit Darwin en 64-bit PowerPC GNU/Linux is de optie -kwaadaardig-natuurlijk
overschrijft de ABI-gedefinieerde uitlijning van grotere typen, zoals floating-point doubles,
op hun natuurlijke op grootte gebaseerde grens. De optie -kwaadaardige macht instrueert GCC om:
volg de ABI-gespecificeerde uitlijningsregels. GCC is standaard ingesteld op de standaarduitlijning
gedefinieerd in de ABI.

Op 64-bits Darwin is natuurlijke uitlijning de standaard, en -kwaadaardige macht is niet
ondersteund.

-msoft-zweven
-mhard-zweven
Genereer code die de registerset met drijvende komma niet gebruikt (gebruikt). Software
emulatie met drijvende komma is beschikbaar als u de -msoft-zweven optie, en geef de . door
optie naar GCC bij het koppelen.

-msingle-float
-mdubbele-zwevende
Genereer code voor drijvende-kommabewerkingen met enkele of dubbele precisie.
-mdubbele-zwevende impliceert -msingle-float.

-msimple-fpu
Genereer geen sqrt- en div-instructies voor hardware drijvende-komma-eenheden.

-mfpu
Geef het type drijvende-komma-eenheid op. Geldige waarden zijn sp_lite (gelijk aan
-msingle-float -msimple-fpu), dp_lite (gelijk aan -mdouble-float -msimple-fpu),
sp_vol (gelijk aan -msingle-float), en dp_vol (equivalent aan -mdouble-float).

-mxilinx-fpu
Voer optimalisaties uit voor de drijvende-kommaeenheid op Xilinx PPC 405/440.

-mveelvoudig
-mno-meerdere
Genereer code die gebruik maakt van (niet gebruikt) de instructies voor het laden van meerdere woorden en de
sla instructies met meerdere woorden op. Deze instructies worden standaard gegenereerd op
POWER-systemen en niet gegenereerd op PowerPC-systemen. Gebruik niet -mveelvoudig op kleine-
endian PowerPC-systemen, aangezien die instructies niet werken wanneer de processor is ingeschakeld
little-endian-modus. De uitzonderingen zijn PPC740 en PPC750 die deze toestaan
instructies in little-endian-modus.

-mtekenreeks
-mno-tekenreeks
Genereer code die de instructies voor het laden van de tekenreeks en de winkel gebruikt (niet gebruikt)
tekenreekswoordinstructies om meerdere registers op te slaan en kleine blokbewegingen uit te voeren. Deze
instructies worden standaard gegenereerd op POWER-systemen en niet gegenereerd op PowerPC
systemen. Gebruik niet -mtekenreeks op little-endian PowerPC-systemen, aangezien die
instructies werken niet als de processor in de little-endian-modus staat. de uitzonderingen
zijn PPC740 en PPC750 die deze instructies in little-endian-modus toestaan.

-mupdate
-mno-update
Genereer code die de laad- of opslaginstructies gebruikt (niet gebruikt) die de . updaten
basisregister naar het adres van de berekende geheugenlocatie. Deze instructies:
worden standaard gegenereerd. Als je gebruikt -mno-update, er is een klein venster tussen de
keer dat de stapelaanwijzer is bijgewerkt en het adres van het vorige frame is
opgeslagen, wat betekent dat code die door het stapelframe loopt over onderbrekingen of signalen kan
beschadigde gegevens krijgen.

-mavoid-geïndexeerde-adressen
-mno-vermijd-geïndexeerde-adressen
Genereer code die het gebruik van geïndexeerde belasting of winkel probeert te vermijden (niet te vermijden)
instructies. Deze instructies kunnen leiden tot prestatieverlies op Power6-processors
in bepaalde situaties, zoals wanneer u door grote arrays stapt die een 16M . overschrijden
grens. Deze optie is standaard ingeschakeld bij het targeten van Power6 en uitgeschakeld
anders.

-mfused-gek
-mno-gefuseerd-madd
Genereer code die de drijvende-komma vermenigvuldigen en accumuleren gebruikt (niet gebruikt)
instructies. Deze instructies worden standaard gegenereerd als hardware floating point
is gebruikt. De machine-afhankelijke -mfused-gek optie is nu toegewezen aan de machine-
onafhankelijk -ffp-contract=snel optie, en -mno-gefuseerd-madd is toegewezen aan
-ffp-contract=uit.

-mmulhw
-mno-mulhw
Genereer code die gebruik maakt (gebruikt niet) het halve woord vermenigvuldigen en vermenigvuldigen-accumuleren
instructies op de IBM 405, 440, 464 en 476 processors. Deze instructies zijn:
standaard gegenereerd bij het targeten van die processors.

-mdlmzb
-mno-dlmzb
Genereer code die de string-search gebruikt (niet gebruikt) dlmzb instructie op de IBM
405, 440, 464 en 476 processoren. Deze instructie wordt standaard gegenereerd wanneer:
gericht op die processors.

-mno-bit-align
-mbit-uitlijnen
Op System V.4 en embedded PowerPC-systemen forceren (doen) geen structuren en vakbonden
die bitvelden bevatten die moeten worden uitgelijnd met het basistype van het bitveld.

Bijvoorbeeld, standaard een structuur die niets anders bevat dan 8 "unsigned" bit-velden van
lengte 1 is uitgelijnd met een grens van 4 bytes en heeft een grootte van 4 bytes. Door het gebruiken van
-mno-bit-align, de structuur is uitgelijnd op een grens van 1 byte en is 1 byte groot.

-mno-strikt-uitlijnen
-mstrict-uitlijnen
Op System V.4 en embedded PowerPC-systemen (gaan) er niet van uit dat niet-uitgelijnd geheugen
referenties worden door het systeem verwerkt.

-mrelocable
-mno-verplaatsbaar
Genereer code waarmee (niet) een statisch uitvoerbaar bestand kan worden verplaatst naar een
ander adres tijdens runtime. Een eenvoudige embedded PowerPC-systeemlader zou:
verplaats de volledige inhoud van ".got2" en 4-byte locaties vermeld in de ".fixup"
sectie, een tabel met 32-bits adressen die door deze optie worden gegenereerd. Om dit te laten werken, allemaal
aan elkaar gekoppelde objecten moeten worden gecompileerd met -mrelocable or -mrelocable-lib.
-mrelocable code lijnt de stapel uit met een grens van 8 bytes.

-mrelocable-lib
-mno-verplaatsbare-lib
Like -mrelocable, -mrelocable-lib genereert een ".fixup" sectie om static . toe te staan
uitvoerbare bestanden die tijdens runtime moeten worden verplaatst, maar -mrelocable-lib maakt geen gebruik van de
kleinere stapeluitlijning van -mrelocable. Objecten gecompileerd met -mrelocable-lib mogen
worden gekoppeld aan objecten die zijn gecompileerd met een combinatie van de -mrelocable opties.

-mno-toc
-mtoc
Op System V.4 en embedded PowerPC-systemen (neem) niet aan dat register 2 bevat:
een aanwijzer naar een globaal gebied dat verwijst naar de adressen die in het programma worden gebruikt.

-kleine
-mlittle-endian
Op System V.4 en embedded PowerPC-systemen compileert u code voor de processor in weinig
endische modus. De -mlittle-endian optie is hetzelfde als -kleine.

-groot
-mbig-endian
Op System V.4 en embedded PowerPC-systemen compileert u code voor de processor in grote
endische modus. De -mbig-endian optie is hetzelfde als -groot.

-mdynamic-geen-foto
Op Darwin- en Mac OS X-systemen moet u de code compileren zodat deze niet verplaatsbaar is, maar dat:
de externe referenties zijn verplaatsbaar. De resulterende code is geschikt voor:
toepassingen, maar geen gedeelde bibliotheken.

-msingle-pic-basis
Behandel het register dat wordt gebruikt voor PIC-adressering als alleen-lezen, in plaats van het te laden in de
proloog voor elke functie. Het runtime-systeem is verantwoordelijk voor het initialiseren hiervan
registreer met een geschikte waarde voordat de uitvoering begint.

-mprioritize-restricted-insns=prioriteit
Deze optie regelt de prioriteit die wordt toegewezen aan beperkte verzendingssleuf
instructies tijdens de tweede planningspas. het argument prioriteit neemt de waarde
0/1/2 toewijzen geen/hoogste/tweede-hoogste prioriteit voor verzending slot beperkt
instructies.

-msched-kostbare-dep=afhankelijkheidstype
Deze optie bepaalt welke afhankelijkheden door het doelwit als duur worden beschouwd tijdens:
instructie plannen. het argument afhankelijkheidstype neemt een van de volgende:
waarden: geen: geen afhankelijkheid is duur, allen: alle afhankelijkheden zijn kostbaar,
true_store_to_load: een echte afhankelijkheid van winkel tot lading is duur, winkel_naar_laden: ieder
afhankelijkheid van winkel tot lading is kostbaar, aantal: elke afhankelijkheid waarvoor latentie >=
aantal is kostbaar.

-minsert-sched-nops=schema
Deze optie bepaalt welk nop-invoegschema tijdens de tweede wordt gebruikt
planning pas. Het betoog schema neemt een van de volgende waarden aan: geen: niet doen
noppen invoegen. stootkussen: Pad met nops elke verzendgroep die vrije uitgifteslots heeft,
volgens de groepering van de planner. hergroeperen_exact: Plaats nops om kostbaar te forceren
afhankelijke herbergen in afzonderlijke groepen. Plaats precies zoveel nops als nodig is om te forceren
een insn naar een nieuwe groep, volgens de geschatte processorgroepering. aantal: Invoegen
nops om dure afhankelijke herbergen in aparte groepen te dwingen. Invoegen aantal nee tegen
dwing een insn naar een nieuwe groep.

-mcall-sysv
Op System V.4 en embedded PowerPC-systemen compileert code met behulp van aanroepconventies die:
houdt zich aan het ontwerp van maart 1995 van de System V Application Binary Interface, PowerPC
processor supplement. Dit is de standaardinstelling, tenzij u GCC hebt geconfigureerd met
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Specificeer beide -mcall-sysv en -meabi opties.

-mcall-sysv-noeabi
Specificeer beide -mcall-sysv en -mno-eabi opties.

-mcall-aixdesc
Op System V.4 en embedded PowerPC-systemen compileert u code voor het AIX-besturingssysteem.

-mcall-linux
Op System V.4 en embedded PowerPC-systemen compileert u code voor de op Linux gebaseerde GNU
systeem.

-mcall-freebsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de FreeBSD-besturing
systeem.

-mcall-netbsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de NetBSD-besturing
systeem.

-mcall-openbsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de OpenBSD-besturing
systeem.

-maix-struct-return
Retourneer alle structuren in het geheugen (zoals gespecificeerd door de AIX ABI).

-msvr4-struct-return
Retourstructuren kleiner dan 8 bytes in registers (zoals gespecificeerd door de SVR4 ABI).

-mabi=abi-type
Breid de huidige ABI uit met een bepaalde extensie, of verwijder een dergelijke extensie. Geldig
waarden zijn altiefc, geen-altivec, specifiek, no-spec, ibmlongdubbel, ieelongdouble.

-mabi=speci
Breid de huidige ABI uit met SPE ABI-extensies. Dit verandert niets aan de standaard ABI,
in plaats daarvan voegt het de SPE ABI-extensies toe aan de huidige ABI.

-mabi=no-spec
Schakel Booke SPE ABI-extensies uit voor de huidige ABI.

-mabi=ibmlongdubbel
Wijzig de huidige ABI om IBM extended-precision long double te gebruiken. Dit is een PowerPC
32-bit SYSV ABI-optie.

-mabi=ieelongdouble
Wijzig de huidige ABI om IEEE extended-precision long double te gebruiken. Dit is een PowerPC
32-bits Linux ABI-optie.

-m prototype
-mno-prototype
Op System V.4 en embedded PowerPC-systemen wordt ervan uitgegaan dat alle aanroepen naar variabele argument
functies zijn correct geprototypeerd. Anders moet de compiler een instructie invoegen
voor elke niet-geprototypeerde oproep om bit 6 van het conditiecoderegister in te stellen of te wissen
(CR) om aan te geven of waarden met drijvende komma zijn doorgegeven in de drijvende komma
registers voor het geval de functie variabele argumenten aanneemt. Met -m prototype, alleen bellen
naar geprototypeerde variabele argumentfuncties zullen de bit instellen of wissen.

-msim
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd sim-crt0.o en
dat de standaard C-bibliotheken zijn libsim.a en libc.a. Dit is de standaard voor
powerpc-*-eabisim configuraties.

-mmvme
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libmvme.a en libc.a.

-gekken
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libads.a en libc.a.

-mgeel mes
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libyk.a en libc.a.

-mvxwerkt
Geef op System V.4 en embedded PowerPC-systemen aan dat u compileert voor een
VxWorks-systeem.

-lid
Stel op embedded PowerPC-systemen de PPC_EMB bit in de kop van de ELF-vlaggen om aan te geven:
dat eabi uitgebreide verhuizingen worden gebruikt.

-meabi
-mno-eabi
Op System V.4 en embedded PowerPC-systemen houden (niet) zich aan de Embedded
Applications Binary Interface (eabi), een reeks wijzigingen aan het systeem V.4
specificaties. Selecteren -meabi betekent dat de stapel is uitgelijnd op een 8-byte
grens, een functie "__eabi" wordt aangeroepen vanuit "main" om de eabi-omgeving in te stellen,
en -msgegevens optie kan zowel "r2" als "r13" gebruiken om naar twee afzonderlijke kleine gegevens te verwijzen
gebieden. Selecteren -mno-eabi betekent dat de stapel is uitgelijnd op een grens van 16 bytes, do
geen initialisatiefunctie aanroepen vanuit "main", en de -msgegevens optie zal alleen gebruiken
"r13" om naar een enkel klein gegevensgebied te verwijzen. De -meabi optie is standaard ingeschakeld als u
geconfigureerde GCC met behulp van een van de powerpc*-*-eabi* opties.

-msdata=eabi
Zet op System V.4 en embedded PowerPC-systemen de kleine geïnitialiseerde "const" globaal en
statische gegevens in de .sdata2 sectie, waarnaar wordt verwezen door register "r2". klein zetten
geïnitialiseerde niet-"const" globale en statische gegevens in de .sdata sectie, die is gepunt
door register "r13". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de .sbss
gedeelte, dat grenst aan de .sdata sectie. De -msdata=eabi Optie is
onverenigbaar met de -mrelocable optie. De -msdata=eabi optie stelt ook de
-lid optie.

-msdata=sysv
Plaats op System V.4 en embedded PowerPC-systemen kleine globale en statische gegevens in de
.sdata sectie, waarnaar wordt verwezen door register "r13". Zet kleine niet-geïnitialiseerde global
en statische gegevens in de .sbss gedeelte, dat grenst aan de .sdata sectie. De
-msdata=sysv optie is incompatibel met de -mrelocable optie.

-msdata=standaard
-msgegevens
Op System V.4 en embedded PowerPC-systemen, als: -meabi wordt gebruikt, compileer code hetzelfde
as -msdata=eabi, anders compileer code hetzelfde als -msdata=sysv.

-msdata=gegevens
Plaats op System V.4 en embedded PowerPC-systemen kleine globale gegevens in de .sdata
sectie. Zet kleine niet-geïnitialiseerde wereldwijde gegevens in de .sbss sectie. Gebruik niet
registreer echter "r13" om kleine gegevens aan te pakken. Dit is het standaardgedrag, tenzij
anders -msgegevens opties worden gebruikt.

-msdata=geen
-mno-sdata
Plaats op embedded PowerPC-systemen alle geïnitialiseerde globale en statische gegevens in de .gegevens
sectie, en alle niet-geïnitialiseerde gegevens in de .bss pagina.

-mblock-move-inline-limit=num
Inline alle blokbewegingen (zoals oproepen naar "memcpy" of structuurkopieën) kleiner dan of
gelijk aan num bytes. De minimumwaarde voor num is 32 bytes op 32-bits doelen en 64
bytes op 64-bits doelen. De standaardwaarde is doelspecifiek.

-G num
Zet op embedded PowerPC-systemen globale en statische items kleiner dan of gelijk aan num
bytes in de kleine data- of bss-secties in plaats van de normale data- of bss-sectie.
Standaard num is 8. De -G num switch wordt ook doorgegeven aan de linker. Alle modules
moet worden gecompileerd met dezelfde -G num waarde.

-mregnamen
-mno-regnames
Op System V.4 en embedded PowerPC-systemen zenden (geen) registernamen uit in de
assembler-uitvoer met behulp van symbolische vormen.

-mlongcall
-mno-longcall
Ga er standaard van uit dat alle gesprekken ver weg zijn zodat een langer duurder bellen
volgorde is vereist. Dit is vereist voor oproepen groter dan 32 megabyte
(33,554,432 bytes) vanaf de huidige locatie. Er wordt een kort gesprek gegenereerd als de
compiler weet dat de oproep niet zo ver weg kan zijn. Deze instelling kan worden overschreven door:
het functiekenmerk "shortcall" of door "#pragma lang bellen(0) ".

Sommige linkers zijn in staat om oproepen buiten het bereik te detecteren en lijmcode te genereren
de vlieg. Op deze systemen zijn lange gesprekken niet nodig en genereren ze langzamere code. Als
van dit schrijven kan de AIX-linker dit doen, evenals de GNU-linker voor PowerPC/64. Het
is van plan om deze functie ook toe te voegen aan de GNU-linker voor 32-bit PowerPC-systemen.

Op Darwin/PPC-systemen genereert "#pragma longcall" "jbsr callee, L42", plus een
"takeiland" (lijmcode). De twee doeladressen vertegenwoordigen de opgeroepene en de
"tak eiland". De Darwin/PPC-linker geeft de voorkeur aan het eerste adres en genereert een
"bl callee" als de PPC "bl" instructie de callee rechtstreeks zal bereiken; anders de
linker zal "bl L42" genereren om het "vertakkingseiland" te noemen. Het "takeiland" is
toegevoegd aan de hoofdtekst van de aanroepende functie; het berekent het volledige 32-bits adres van
de callee en springt ernaartoe.

Op Mach-O (Darwin)-systemen stuurt deze optie de compiler naar de lijm voor
elke directe oproep, en de Darwin-linker beslist of hij deze gebruikt of weggooit.

In de toekomst kunnen we ervoor zorgen dat GCC alle longcall-specificaties negeert wanneer de linker
staat bekend om het genereren van lijm.

-mtls-markeringen
-mno-tls-markeringen
Markeer (niet markeren) oproepen naar "__tls_get_addr" met een verplaatsing die de functie specificeert
argument. Door de verplaatsing kan ld op betrouwbare wijze de functieaanroep associëren met het argument
installatie-instructies voor TLS-optimalisatie, waardoor gcc beter kan plannen
de reeks.

-pdraad
Voegt ondersteuning toe voor multithreading met de pdraden bibliotheek. Deze optie stelt vlaggen in voor
zowel de preprocessor als de linker.

-mrecipe
-mno-recept
Met deze optie kan GCC de wederzijdse schatting en de wederzijdse vierkantswortel gebruiken
schattingsinstructies met aanvullende stappen van Newton-Raphson om de precisie te vergroten
in plaats van een deling of vierkantswortel en deling uit te voeren voor drijvende-komma-argumenten. Jij
moet gebruik maken van de -ffast-wiskunde optie bij gebruik -mrecipe (of ten minste
-funsafe-math-optimalisaties, -eindige-wiskunde-alleen, -freciprocal-wiskunde en
-fno-trapping-wiskunde). Merk op dat terwijl de doorvoer van de reeks over het algemeen is
hoger dan de doorvoer van de niet-wederzijdse instructie, de precisie van de
reeks kan worden verminderd met maximaal 2 ulp (dwz het omgekeerde van 1.0 is gelijk aan 0.99999994)
voor wederzijdse vierkantswortels.

-mrecept=opteren
Met deze optie kunt u bepalen welke wederzijdse schattingsinstructies mogen worden gebruikt. opteren
is een door komma's gescheiden lijst met opties, die kan worden voorafgegaan door een "!" om te keren
optie: "all": schakel alle schattingsinstructies in, "default": schakel de standaard in
instructies, gelijk aan -mrecipe, "none": schakel alle schattingsinstructies uit,
gelijkwaardig -mno-recept; "div": schakel de wederzijdse benaderingsinstructies in voor
zowel enkele als dubbele precisie; "divf": schakel de reciproque met enkele precisie in
benaderingsinstructies; "divd": schakel de reciproque met dubbele precisie in
benaderingsinstructies; "rsqrt": schakel de wederzijdse vierkantswortelbenadering in
instructies voor zowel enkele als dubbele precisie; "rsqrtf": schakel de single-
nauwkeurige instructies voor wederkerige vierkantswortelbenadering; "rsqrtd": schakel de
dubbele precisie reciproque vierkantswortelbenadering instructies;

Dus bijvoorbeeld -mrecip=alle,!rsqrtd zou de volledige wederzijdse schatting mogelijk maken
instructies, behalve de instructies voor "FRSQRTE", "XSRSQRTEDP" en "XVRSQRTEDP"
die de wederzijdse vierkantswortelberekeningen met dubbele precisie afhandelen.

-mrecip-precisie
-mno-recept-precisie
Neem aan (veronderstel niet) dat de wederzijdse schattingsinstructies hogere
precisieschattingen dan is vereist door de PowerPC ABI. Selecteren -mcpu=vermogen6 or
-mcpu=vermogen7 selecteert automatisch -mrecip-precisie. Het vierkant met dubbele precisie
root-schattingsinstructies worden niet standaard gegenereerd op machines met lage precisie,
omdat ze geen schatting geven die na drie stappen convergeert.

-mveclibabi= type dan:
Specificeert het ABI-type dat moet worden gebruikt voor het vectoriseren van intrinsieke gegevens met behulp van een externe bibliotheek.
Het enige type dat momenteel wordt ondersteund, is "massa", wat aangeeft dat IBM's
Mathematical Acceleration Subsystem (MASS) bibliotheken voor het vectoriseren van intrinsieke gegevens met behulp van
externe bibliotheken. GCC verzendt momenteel oproepen naar "acosd2", "acosf4", "acoshd2",
"acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2",
"atanf4", "atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2",
"coshf4", "erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
"expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2",
"log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2",
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
"tanhd2" en "tanhf4" bij het genereren van code voor power7. Beide -ftree-vectoriseren en
-funsafe-math-optimalisaties moeten worden ingeschakeld. De MASS-bibliotheken zullen moeten zijn
opgegeven bij de koppelingstijd.

-mfriz
-mno-friz
Genereer (genereer niet) de "friz" -instructie wanneer de -funsafe-math-optimalisaties
optie wordt gebruikt om de afronding van drijvende-kommawaarden te optimaliseren naar 64-bits integer en
terug naar de drijvende komma. De instructie "friz" retourneert niet dezelfde waarde als de
getal met drijvende komma is te groot om in een geheel getal te passen.

-mpointers-naar-geneste-functies
-mno-pointers-naar-geneste-functies
Genereer (niet genereren) code om het statische ketenregister te laden (r11) wanneer
aanroepen via een aanwijzer op AIX- en 64-bits Linux-systemen waarbij een functieaanwijzer
verwijst naar een descriptor van 3 woorden die het functieadres, de TOC-waarde die moet worden geladen, geeft
registreren r2, en statische ketenwaarde die in register moet worden geladen r11. De
-mpointers-naar-geneste-functies staat standaard aan. U kunt niet doorbellen
verwijzingen naar geneste functies of verwijzingen naar functies die zijn gecompileerd in andere talen die
gebruik de statische ketting als u de gebruikt -mno-pointers-naar-geneste-functies.

-msave-toc-indirect
-mno-save-toc-indirect
Genereer (niet genereren) code om de TOC-waarde op de gereserveerde stapellocatie op te slaan
in de functie-proloog als de functie via een pointer op AIX en 64-bit wordt aangeroepen
Linux-systemen. Als de TOC-waarde niet in de proloog wordt opgeslagen, wordt deze vlak ervoor opgeslagen
de oproep via de aanwijzer. De -mno-save-toc-indirect optie is de standaard.

RX Opties

Deze opdrachtregelopties zijn gedefinieerd voor RX-doelen:

-m64bit-verdubbelt
-m32bit-verdubbelt
Maak het "dubbele" gegevenstype 64 bits (-m64bit-verdubbelt) of 32 bits (-m32bit-verdubbelt)
qua grootte. De standaard is -m32bit-verdubbelt. Note RX floating-point hardware werkt alleen
op 32-bits waarden, daarom is de standaard -m32bit-verdubbelt.

-fpu
-nofpu
Schakelt in (-fpu) of deactiveert (-nofpu) het gebruik van RX-hardware met drijvende komma. De
standaard is ingeschakeld voor de RX600 serie en uitgeschakeld voor de RX200 series.

Drijvende-komma-instructies worden alleen gegenereerd voor 32-bits drijvende-kommawaarden
echter, dus als de -m64bit-verdubbelt optie in gebruik is, zal de FPU-hardware dat niet zijn
gebruikt voor dubbelspel.

Note Indien de -fpu optie is ingeschakeld dan -funsafe-math-optimalisaties is ook ingeschakeld
automatisch. Dit komt omdat de instructies van de RX FPU zelf onveilig zijn.

-mcpu=naam
Selecteert het type RX CPU dat moet worden getarget. Momenteel worden drie typen ondersteund, de
algemeen RX600 en RX200 serie hardware en de specifieke RX610 PROCESSOR. De standaard is
RX600.

Het enige verschil tussen RX600 en RX610 is dat de RX610 ondersteunt niet de
"MVTIPL" instructie.

De RX200 serie heeft geen hardware floating-point unit en dus -nofpu is ingeschakeld
standaard wanneer dit type is geselecteerd.

-mbig-endian-gegevens
-mlittle-endian-gegevens
Sla gegevens (maar geen code) op in het big-endian-formaat. De standaard is
-mlittle-endian-gegevens, dwz om gegevens op te slaan in het little-endian-formaat.

-msmall-data-limiet=N
Specificeert de maximale grootte in bytes van globale en statische variabelen die kunnen worden geplaatst
in het kleine gegevensgebied. Het gebruik van het kleine gegevensgebied kan leiden tot kleinere en snellere
code, maar de grootte van het gebied is beperkt en het is aan de programmeur om ervoor te zorgen dat:
het gebied loopt niet over. Ook wanneer het kleine gegevensgebied wordt gebruikt, een van de RX's
registers (meestal "r13") is gereserveerd voor gebruik dat naar dit gebied verwijst, dus het is geen
langer beschikbaar voor gebruik door de compiler. Dit kan resulteren in langzamere en/of grotere
code als variabelen die ooit in het gereserveerde register hadden kunnen worden gehouden, nu zijn
op de stapel geschoven.

Let op, gemeenschappelijke variabelen (variabelen die niet zijn geïnitialiseerd) en constanten zijn
niet in het kleine gegevensgebied geplaatst omdat ze zijn toegewezen aan andere secties in de
uitvoer uitvoerbaar.

De standaardwaarde is nul, waardoor deze functie wordt uitgeschakeld. Let op, deze functie is niet:
standaard ingeschakeld met hogere optimalisatieniveaus (-O2 enz.) vanwege de
mogelijk nadelige gevolgen van het reserveren van een register. Het is aan de programmeur
om te experimenteren en te ontdekken of deze functie hun programma ten goede komt. Zien
de beschrijving van de -mpid optie voor een beschrijving van hoe het eigenlijke register
houd de kleine gegevensgebiedaanwijzer is gekozen.

-msim
-mno-sim
Gebruik de looptijd van de simulator. De standaard is om de libgloss board-specifieke runtime te gebruiken.

-mas100-syntaxis
-mno-as100-syntaxis
Gebruik bij het genereren van assembler-uitvoer een syntaxis die compatibel is met de AS100 van Renesas
assembler. Deze syntaxis kan ook worden afgehandeld door de GAS-assembler, maar die heeft er een paar
beperkingen, dus het genereren ervan is niet de standaardoptie.

-mmax-constante-grootte=N
Specificeert de maximale grootte, in bytes, van een constante die kan worden gebruikt als een operand in
een RX-instructie. Hoewel de RX-instructieset constanten tot 4 . toestaat
bytes lang voor gebruik in instructies, een langere waarde komt overeen met een langere
instructie. Dus in sommige omstandigheden kan het voordelig zijn om de grootte van
constanten die in instructies worden gebruikt. Constanten die te groot zijn, zijn in plaats daarvan
geplaatst in een constante pool en waarnaar wordt verwezen via registerindirectie.

De waarde N kan tussen 0 en 4 liggen. Een waarde van 0 (de standaardwaarde) of 4 betekent dat
constanten van elke grootte zijn toegestaan.

-montspan
Schakel linkerrelaxatie in. Linker-relaxatie is een proces waarbij de linker wil
proberen de grootte van een programma te verkleinen door kortere versies van verschillende programma's te vinden
instructies. Standaard uitgeschakeld.

-mint-register=N
Geef het aantal registers op dat moet worden gereserveerd voor functies voor snelle interruptafhandeling. De
waarde N kan tussen 0 en 4 liggen. Een waarde van 1 betekent dat register "r13" zal zijn
gereserveerd voor het exclusieve gebruik van snelle interrupthandlers. Een waarde van 2 reserves
"r13" en "r12". Een waarde van 3 reserveert "r13", "r12" en "r11", en een waarde van 4
reserveert "r13" tot en met "r10". Een waarde van 0, de standaardwaarde, reserveert er geen
registreert.

-msave-acc-in-onderbreekt
Specificeert dat interrupt-handlerfuncties het accumulatorregister moeten behouden.
Dit is alleen nodig als normale code bijvoorbeeld het accumulatorregister kan gebruiken
omdat het 64-bits vermenigvuldigingen uitvoert. De standaard is om de accumulator te negeren
omdat dit de interrupt-handlers sneller maakt.

-mpid
-mno-pid
Maakt het genereren van positie-onafhankelijke gegevens mogelijk. Indien ingeschakeld, is toegang tot
constante gegevens worden gedaan via een offset van een basisadres dat in een register wordt bewaard. Dit
maakt het mogelijk om de locatie van constante gegevens tijdens runtime te bepalen zonder dat
het uitvoerbare bestand moet worden verplaatst, wat een voordeel is voor embedded applicaties met strakke
geheugen beperkingen. Gegevens die kunnen worden gewijzigd, worden niet beïnvloed door deze optie.

Let op, het gebruik van deze functie reserveert een register, meestal "r13", voor de constante gegevens
basis adres. Dit kan resulteren in langzamere en/of grotere code, vooral in gecompliceerde
functies.

Het daadwerkelijke register dat is gekozen om het constante databaseadres vast te houden, hangt af van of:
de -msmall-datalimiet en / of de -munt-register opdrachtregelopties zijn ingeschakeld.
Beginnend met register "r13" en verder naar beneden, worden eerst registers toegewezen
om te voldoen aan de eisen van -munt-registerdan -mpid en tot slot
-msmall-datalimiet. Het is dus mogelijk dat het kleine gegevensgebiedregister "r8" is
als beide -mint-register=4 en -mpid worden opgegeven op de opdrachtregel.

Standaard is deze functie niet ingeschakeld. De standaard kan worden hersteld via de -mno-pid
opdrachtregeloptie.

Opmerking: De generieke GCC-opdrachtregeloptie -fvast-reg heeft een speciale betekenis voor de RX
port bij gebruik met het functiekenmerk "interrupt". Dit attribuut geeft a . aan
functie bedoeld om snelle interrupts te verwerken. GCC zal ervoor zorgen dat het alleen de
registers "r10", "r11", "r12" en/of "r13" en alleen op voorwaarde dat het normale gebruik van de
overeenkomstige registers zijn beperkt via de -fvast-reg or -munt-register
opdrachtregelopties.

S / 390 en zSerie Opties

Dit zijn de -m opties gedefinieerd voor de S/390- en zSeries-architectuur.

-mhard-zweven
-msoft-zweven
Gebruik (gebruik niet) de hardware floating-point instructies en registers voor floating-
punt operaties. Wanneer -msoft-zweven is gespecificeerd, functioneert in libgcc.a zal gebruikt worden
om drijvende-kommabewerkingen uit te voeren. Wanneer -mhard-zweven is opgegeven, de compiler
genereert IEEE drijvende-komma-instructies. Dit is de standaardinstelling.

-mhard-dfp
-mno-harde-dfp
Gebruik (gebruik niet) de hardware-instructies voor decimalen met drijvende komma voor decimale-
drijvende-kommabewerkingen. Wanneer -mno-harde-dfp is gespecificeerd, functioneert in libgcc.a
zal worden gebruikt om decimale-drijvende-kommabewerkingen uit te voeren. Wanneer -mhard-dfp is
opgegeven, genereert de compiler hardware-instructies met decimale drijvende komma. Dit
is de standaard voor -maart=z9-ec of hoger.

-mlong-dubbel-64
-mlong-dubbel-128
Deze schakelaars regelen de grootte van het "lange dubbele" type. Een grootte van 64 bits maakt de
"long double" type equivalent aan het "double" type. Dit is de standaardinstelling.

-mbackchain
-mno-backchain
Sla het adres van het frame van de beller op (niet opslaan) als backchain-aanwijzer in de
het stapelframe van callee. Er kan een backchain nodig zijn om foutopsporing mogelijk te maken met tools die:
begrijp DWARF-2 oproepframe-informatie niet. Wanneer -mno-verpakt-stack in
effect, de backchain-aanwijzer wordt onderaan het stapelframe opgeslagen; wanneer
-mpacked-stack van kracht is, wordt de backchain in het bovenste woord van de . geplaatst
96/160 byte register opslaan gebied.

In het algemeen code gecompileerd met -mbackchain is oproep-compatibel met code gecompileerd met
-mmo-backchain; het gebruik van de backchain voor foutopsporingsdoeleinden vereist echter meestal:
waarmee het hele binaire bestand is gebouwd -mbackchain. Merk op dat de combinatie van
-mbackchain, -mpacked-stack en -mhard-zweven wordt niet ondersteund. Om een ​​te bouwen
gebruik van linux-kernel -msoft-zweven.

De standaard is om de backchain niet te onderhouden.

-mpacked-stack
-mno-verpakt-stack
Gebruik (niet gebruiken) de lay-out van de verpakte stapel. Wanneer -mno-verpakt-stack is opgegeven, de
compiler gebruikt alle velden van het 96/160 byte registeropslaggebied alleen voor hun
standaard doel; ongebruikte velden nemen nog steeds stapelruimte in beslag. Wanneer -mpacked-stack is
gespecificeerd, zijn registeropslagplaatsen dicht opeengepakt aan de bovenkant van de registeropslag
Oppervlakte; ongebruikte ruimte wordt hergebruikt voor andere doeleinden, waardoor efficiënter gebruik kan worden gemaakt van
de beschikbare stapelruimte. Echter, wanneer? -mbackchain is ook van kracht, de bovenste
woord van het opslaggebied wordt altijd gebruikt om de backchain op te slaan en het retouradres
register wordt altijd twee woorden onder de backchain opgeslagen.

Zolang de backchain van het stapelframe niet wordt gebruikt, wordt de code gegenereerd met -mpacked-stack
is oproep-compatibel met code gegenereerd met -mno-verpakt-stack. Merk op dat sommige niet-FSF
releases van GCC 2.95 voor S/390 of zSeries gegenereerde code die het stackframe gebruikt
backchain tijdens runtime, niet alleen voor foutopsporingsdoeleinden. Een dergelijke code is niet oproep-
compatibel met code gecompileerd met -mpacked-stack. Merk ook op dat de combinatie van
-mbackchain, -mpacked-stack en -mhard-zweven wordt niet ondersteund. Om een ​​te bouwen
gebruik van linux-kernel -msoft-zweven.

De standaardinstelling is om de lay-out van de verpakte stapel niet te gebruiken.

-msmall-exec
-mno-klein-exec
Genereer (of genereer niet) code met behulp van de "bras"-instructie om subroutine te doen
belt. Dit werkt alleen betrouwbaar als de totale grootte van het uitvoerbare bestand niet groter is dan 64k.
De standaard is om in plaats daarvan de "basr" -instructie te gebruiken, die dit niet heeft
beperking.

-m64
-m31
. -m31 is opgegeven, genereert u code die voldoet aan de GNU/Linux voor S/390 ABI. Wanneer
-m64 is opgegeven, genereert u code die voldoet aan de GNU/Linux voor zSeries ABI. Dit
stelt GCC in het bijzonder in staat 64-bits instructies te genereren. Voor de s390 doelen, de
standaard is -m31, Terwijl de s390x doelen standaard op -m64.

-mzar
-mesa
. -mzar is opgegeven, genereer code met behulp van de instructies die beschikbaar zijn op
z/Architectuur. Wanneer -mesa is opgegeven, genereer code met behulp van de instructies
beschikbaar op ESA/390. Let daar op -mesa is niet mogelijk met -m64. Bij het genereren
code die voldoet aan de GNU/Linux voor S/390 ABI, de standaard is: -mesa. Bij het genereren
code compatibel met de GNU/Linux voor zSeries ABI, de standaard is: -mzar.

-mmvcle
-mno-mvcle
Genereer (of genereer niet) code met behulp van de "mvcle" -instructie om blok uit te voeren
beweegt. Wanneer -mno-mvcle is opgegeven, gebruikt u in plaats daarvan een "mvc"-lus. Dit is de standaard
tenzij optimaliseren voor grootte.

-mdebug
-mno-foutopsporing
Extra debug-informatie afdrukken (of niet afdrukken) tijdens het compileren. De standaard is
om foutopsporingsinformatie niet af te drukken.

-maart=CPU-type
Genereer code die zal worden uitgevoerd CPU-type, wat de naam is van een systeem dat staat voor a
bepaald processortype. Mogelijke waarden voor CPU-type zijn g5, g6, z900, z990, z9-109,
z9-ec en z10. Bij het genereren van code met behulp van de instructies die beschikbaar zijn op
z/Architectuur, de standaard is -maart=z900. Anders is de standaard -maart=g5.

-mtune=CPU-type
Stem af op CPU-type alles wat van toepassing is over de gegenereerde code, behalve de ABI
en de set beschikbare instructies. De lijst van CPU-type waarden is hetzelfde als voor
-maart. De standaardwaarde is de waarde die wordt gebruikt voor -maart.

-mtpf-trace
-mno-tpf-trace
Genereer code die toevoegt (niet toevoegt) in TPF OS-specifieke takken om routines te traceren
in het besturingssysteem. Deze optie is standaard uitgeschakeld, zelfs bij het compileren voor de
TPF-OS.

-mfused-gek
-mno-gefuseerd-madd
Genereer code die de drijvende-komma vermenigvuldigen en accumuleren gebruikt (niet gebruikt)
instructies. Deze instructies worden standaard gegenereerd als hardware floating point
is gebruikt.

-mwarn-framegrootte=kadergrootte
Geef een waarschuwing als de huidige functie de opgegeven framegrootte overschrijdt. Omdat dit is
een controle tijdens het compileren hoeft geen echt probleem te zijn als het programma draait. Het
is bedoeld om functies te identificeren die hoogstwaarschijnlijk een stack overflow veroorzaken. Het is
handig om te gebruiken in een omgeving met een beperkte stapelgrootte, bijvoorbeeld de linux-kernel.

-mwarn-dynamicstack
Geef een waarschuwing af als de functie alloca aanroept of arrays met dynamische grootte gebruikt. Dit is
over het algemeen een slecht idee met een beperkte stapelgrootte.

-mstack-guard=stapelbewaker
-mstack-grootte=stapel grootte
Als deze opties beschikbaar zijn, geeft de s390-backend aanvullende instructies in de
functieproloog die een val triggert als de stapelgrootte is stapelbewaker byte hierboven
de stapel grootte (vergeet niet dat de stapel op s390 naar beneden groeit). Als de stapelbewaker
optie is weggelaten de kleinste macht van 2 groter dan de framegrootte van de gecompileerde
functie wordt gekozen. Deze opties zijn bedoeld om te helpen bij het debuggen van stack
overloop problemen. De extra uitgezonden code veroorzaakt slechts weinig overhead en
kan daarom ook worden gebruikt in productie-achtige systemen zonder betere prestaties
degradatie. De gegeven waarden moeten exacte machten van 2 zijn en stapel grootte moet zijn
groter dan stapelbewaker zonder 64k te overschrijden. Om efficiënt te zijn de extra
code gaat ervan uit dat de stapel begint bij een adres dat is uitgelijnd met de waarde
gegeven door stapel grootte. De stapelbewaker optie kan alleen worden gebruikt in combinatie met
stapel grootte.

Score Opties

Deze opties zijn gedefinieerd voor Score-implementaties:

-meb
Compileer code voor big-endian-modus. Dit is de standaardinstelling.

-mel
Compileer code voor little-endian-modus.

- mnhwloop
Schakel het genereren van bcnz-instructie uit.

-muls
Schakel het genereren van niet-uitgelijnde belasting en opslaginstructie in.

-mmac
Schakel het gebruik van instructies voor meervoudig accumuleren in. Standaard uitgeschakeld.

-mscore5
Specificeer de SCORE5 als de doelarchitectuur.

-mscore5u
Specificeer de SCORE5U van de doelarchitectuur.

-mscore7
Specificeer de SCORE7 als de doelarchitectuur. Dit is de standaardinstelling.

-mscore7d
Specificeer de SCORE7D als de doelarchitectuur.

SH Opties

Deze -m opties zijn gedefinieerd voor de SH-implementaties:

-m1 Genereer code voor de SH1.

-m2 Genereer code voor de SH2.

-m2e
Genereer code voor de SH2e.

-m2a-nofpu
Genereer code voor de SH2a zonder FPU, of voor een SH2a-FPU zodanig dat de
drijvende-komma-eenheid wordt niet gebruikt.

-m2a-enkelvoudig
Genereer code voor de SH2a-FPU, op zo'n manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m2a-eenpersoons
Genereer code voor de SH2a-FPU, ervan uitgaande dat de drijvende-kommaeenheid met enkele precisie is
modus standaard.

-m2a
Genereer code voor de SH2a-FPU, ervan uitgaande dat de drijvende-kommaeenheid dubbele precisie heeft
modus standaard.

-m3 Genereer code voor de SH3.

-m3e
Genereer code voor de SH3e.

-m4-nofpu
Genereer code voor de SH4 zonder een drijvende-kommaeenheid.

-m4-enkelvoudig
Genereer code voor de SH4 met een drijvende-kommaeenheid die alleen single-
precisie rekenen.

-m4-single
Genereer code voor de SH4, ervan uitgaande dat de drijvende-kommaeenheid zich in de single-precision-modus bevindt
standaard.

-m4 Genereer code voor de SH4.

-m4a-nofpu
Genereer code voor de SH4al-dsp, of voor een SH4a op zo'n manier dat de drijvende-komma
eenheid wordt niet gebruikt.

-m4a-enkelvoudig
Genereer code voor de SH4a, op zo'n manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4a-eenpersoons
Genereer code voor de SH4a, ervan uitgaande dat de drijvende-kommaeenheid in enkele precisie is
modus standaard.

-m4a
Genereer code voor de SH4a.

-m4al
Hetzelfde als -m4a-nofpu, behalve dat het impliciet voorbij gaat -dsp naar de monteur. GCC
genereert momenteel geen DSP-instructies.

-mb Compileer code voor de processor in big-endian-modus.

-ml Compileer code voor de processor in little-endian-modus.

-muitlijnen
Align verdubbelt bij 64-bits grenzen. Merk op dat dit de belconventies verandert,
en dus zullen sommige functies van de standaard C-bibliotheek niet werken tenzij u opnieuw compileert
het eerst met -muitlijnen.

-montspan
Kort sommige adresverwijzingen in tijdens de koppelingstijd, indien mogelijk; gebruikt de linker-optie
-kom tot rust.

- twijfelbaar
Gebruik 32-bits offsets in "switch"-tabellen. De standaardinstelling is om 16-bits offsets te gebruiken.

-mbitoppen
Schakel het gebruik van instructies voor bitmanipulatie op SH2A in.

-mfmovd
Schakel het gebruik van de instructie "fmovd" in. Rekening -muitlijnen voor uitlijningsbeperkingen.

-mhitachi
Houd u aan de belconventies die zijn gedefinieerd door Renesas.

-mrenesas
Houd u aan de belconventies die zijn gedefinieerd door Renesas.

-mno-renas
Voldoen aan de belconventies die zijn gedefinieerd voor GCC vóór de Renesas-conventies
beschikbaar waren. Deze optie is de standaard voor alle doelen van de SH-toolchain.

-mnomacsave
Markeer het "MAC"-register als belazerd, zelfs als -mhitachi is gegeven.

-mieeee
-mno-ieee
Controleer de IEEE-conformiteit van drijvende-kommavergelijkingen, wat de verwerking beïnvloedt
gevallen waarin het resultaat van een vergelijking ongeordend is. Standaard -mieeee is
impliciet ingeschakeld. Indien -alleen eindige-wiskunde is ingeschakeld -mno-ieee is impliciet ingesteld,
wat resulteert in snellere drijvende-komma meer-gelijke en minder-gelijke vergelijkingen. De
geïmpliceerde instellingen kunnen worden overschreven door een van beide op te geven: -mieeee or -mno-ieee.

-minline-ic_invalidate
Inline code om instructiecachevermeldingen ongeldig te maken na het instellen van de geneste functie
trampolines. Deze optie heeft geen effect als -musermode actief is en is geselecteerd
optie voor het genereren van codes (bijv. -m4) staat het gebruik van de icbi-instructie niet toe. Als
de geselecteerde optie voor het genereren van code staat het gebruik van de icbi-instructie niet toe,
en -musermode niet van kracht is, zal de inline code de instructie manipuleren
cache-adresarray rechtstreeks met een associatieve schrijfbewerking. Dit vereist niet alleen
geprivilegieerde modus, maar het zal ook mislukken als de cacheregel via de TLB in kaart was gebracht
en is niet meer in kaart gebracht.

-mismaat
Dump instructiegrootte en locatie in de montagecode.

-mpadstructuur
Deze optie is verouderd. Het vult structuren op tot een veelvoud van 4 bytes, dat is:
onverenigbaar met de SH ABI.

-msoft-atomisch
Genereer GNU/Linux-compatibele gUSA-software atomaire sequenties voor de ingebouwde atomic
functies. De gegenereerde atoomreeksen hebben ondersteuning nodig van de interrupt /
exception handling code van het systeem en zijn alleen geschikt voor single-core systemen.
Ze zullen niet correct werken op systemen met meerdere kernen. Deze optie is ingeschakeld door
standaard wanneer het doel "sh-*-linux*" is. Voor meer informatie over de ingebouwde atomic
functies zien __atomair Ingebouwde.

-mruimte
Optimaliseer voor ruimte in plaats van snelheid. Geïmpliceerd door -Jij.

-prefergot
Bij het genereren van positie-onafhankelijke code, zend functieaanroepen uit met behulp van de Global Offset
Tabel in plaats van de Procedure Linkage Table.

-musermodus
Genereer geen code die alleen is bedoeld voor de geprivilegieerde modus; impliceert -mno-inline-ic_invalidate als de
inline code zou niet werken in de gebruikersmodus. Dit is de standaard wanneer het doel is
"sh-*-linux*".

-multikosten=aantal
Stel de kosten in die moeten worden aangenomen voor een vermenigvuldigingsinsn.

-mdiv=strategie
Stel de delingsstrategie in die moet worden gebruikt voor gehele delingsbewerkingen. Voor SHmedia
strategie kan een van zijn:

fp Voert de bewerking uit in drijvende komma. Dit heeft een zeer hoge latentie, maar moet
slechts een paar instructies, dus het kan een goede keuze zijn als je code voldoende is
gemakkelijk te exploiteren ILP zodat de compiler de drijvende komma kan plannen
instructies samen met andere instructies. Deling door nul veroorzaakt a
drijvende-komma uitzondering.

inv Gebruikt gehele operaties om de inverse van de deler te berekenen, en dan
vermenigvuldigt het dividend met het omgekeerde. Deze strategie maakt CSE en hijsen mogelijk
van de inverse berekening. Delen door nul berekent een niet-gespecificeerd resultaat,
maar trapt niet.

inv:minlat
Een variant van inv waar, als er geen CSE of hijsmogelijkheden zijn gevonden, of als
de hele operatie is naar dezelfde plek gehesen, de laatste etappes van de
inverse berekening zijn verweven met de laatste vermenigvuldiging om de algehele
latentie, ten koste van het gebruik van een paar instructies, en dus minder aanbieden
mogelijkheden plannen met andere code.

Bellen
Roept een bibliotheekfunctie aan die meestal de implementeert inv:minlat strategie. Dit
geeft een hoge codedichtheid voor "m5-*media-nofpu"-compilaties.

call2
Gebruikt een ander ingangspunt van dezelfde bibliotheekfunctie, waarbij wordt aangenomen dat a
aanwijzer naar een opzoektabel is al ingesteld, wat de aanwijzerbelasting blootlegt
naar CSE en code hoisting optimalisaties.

inv:oproep
inv:bel2
inv:fp
Gebruik de inv algoritme voor het genereren van initiële code, maar als de code blijft
niet-geoptimaliseerd, keer terug naar de Bellen, call2of fp respectievelijk strategieën. Let daar op
het potentieel overheersende neveneffect van deling door nul wordt gedragen door een aparte
instructie, dus het is mogelijk dat alle integer-instructies eruit worden gehesen,
maar de marker voor de bijwerking blijft waar hij is. Een recombinatie naar
drijvende-kommabewerkingen of een oproep is in dat geval niet mogelijk.

inv20u
inv20l
Varianten van de inv:minlat strategie. In het geval dat de inverse berekening is
niet gescheiden van de vermenigvuldiging, ze versnellen de verdeling waar het dividend past
in 20 bits (plusteken indien van toepassing) door een test in te voegen om een ​​aantal
operaties in dit geval; deze test vertraagt ​​het geval van grotere dividenden.
inv20u neemt aan dat het geval van een dergelijk klein dividend onwaarschijnlijk is, en inv20l
gaat ervan uit dat het waarschijnlijk is.

Voor andere doelen dan SHmedia strategie kan een van zijn:

bel-div1
Roept een bibliotheekfunctie aan die de eenstaps delingsinstructie "div1" gebruikt om
de operatie uitvoeren. Delen door nul berekent een niet-gespecificeerd resultaat en doet:
niet val. Dit is de standaard behalve voor SH4, SH2A en SHcompact.

bel-fp
Roept een bibliotheekfunctie aan die de bewerking met dubbele precisie zwevend uitvoert
punt. Deling door nul veroorzaakt een uitzondering met drijvende komma. Dit is de standaard
voor SHcompact met FPU. Dit specificeren voor doelen die geen dubbele hebben
precisie-FPU wordt standaard ingesteld op "call-div1".

beltafel
Roept een bibliotheekfunctie aan die een opzoektabel gebruikt voor kleine delers en de
"div1" -instructie met onderscheid tussen hoofdletters en kleine letters voor grotere delers. Deling door nul
berekent een niet-gespecificeerd resultaat en trapt niet. Dit is de standaardinstelling voor SH4.
Als u dit specificeert voor doelen die geen dynamische schakelinstructies hebben, zal:
standaard ingesteld op "call-div1".

Als er geen divisiestrategie is gespecificeerd, wordt de standaardstrategie geselecteerd
op basis van het huidige doel. Voor SH2A is de standaardstrategie om de "divs" en
"divu" instructies in plaats van bibliotheekfunctie-aanroepen.

-bereken-uitgaande-args
Reserveer één keer ruimte voor uitgaande argumenten in de proloog van de functie in plaats van rond
elke oproep. Over het algemeen gunstig voor prestaties en grootte. Ook nodig om te ontspannen
om te voorkomen dat het stapelframe rond voorwaardelijke code wordt gewijzigd.

-mdivsi3_libfunc=naam
Stel de naam van de bibliotheekfunctie die wordt gebruikt voor 32-bits getekende deling in op: naam. Deze
hebben alleen invloed op de naam die wordt gebruikt in de oproep- en inv:oproepverdelingsstrategieën, en de
compiler verwacht nog steeds dezelfde sets invoer/uitvoer/gecodeerde registers alsof
deze optie was niet aanwezig.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-maanpassen-afrollen
Gaspedaal uitrollen om te voorkomen dat doelregisters worden geslagen. Deze optie heeft alleen een
effect als de gcc-codebasis de doelhaak TARGET_ADJUST_UNROLL_MAX ondersteunt.

-mindexed-adressering
Schakel het gebruik van de geïndexeerde adresseringsmodus in voor SHmedia32/SHcompact. Dit is alleen
veilig als de hardware en/of het besturingssysteem 32-bits wrap-around-semantiek voor de geïndexeerde
adressering modus. De architectuur maakt de implementatie van processors met 64-bits mogelijk
MMU, die het besturingssysteem zou kunnen gebruiken om 32-bits adressering te krijgen, maar aangezien er geen huidige hardware is
implementatie ondersteunt deze of een andere manier om de geïndexeerde adresseringsmodus veilig te maken
om te gebruiken in de 32-bits ABI, is de standaard -mno-geïndexeerde-adressering.

-mgettrcost=aantal
Stel de veronderstelde kosten voor de instructie gettr in op aantal. De standaard is 2 als
-mpt-vast van kracht is, anders 100.

-mpt-vast
Ga ervan uit dat pt*-instructies niet vastlopen. Dit zal over het algemeen een betere planning opleveren
code, maar is onveilig op de huidige hardware. De huidige architectuurdefinitie zegt
dat ptabs en ptrel vallen wanneer het doelwit anded met 3 3 is. Dit heeft de
onbedoeld effect van het onveilig maken om ptabs / ptrel vóór een vertakking te plannen, of
hijs het uit een lus. Bijvoorbeeld __do_global_ctors, een onderdeel van libgcc dat draait
constructors bij het opstarten van het programma, roept functies op in een lijst die wordt begrensd door -1.
Met de optie -mpt-fixed worden de ptabs uitgevoerd voordat er tegen -1 wordt getest. Dat
betekent dat alle constructors iets sneller worden uitgevoerd, maar als de lus komt
aan het einde van de lijst crasht het programma omdat ptabs -1 in een doel laadt
register. Aangezien deze optie onveilig is voor hardware die de current
architectuurspecificatie, de standaardwaarde is -mno-pt-fixed. Tenzij de gebruiker een
specifieke kosten met -mgettrkosten, -mno-pt-fixed impliceert ook -mgettrkosten = 100; deze
schrikt registertoewijzing af met behulp van doelregisters voor het opslaan van gewone gehele getallen.

-mingeldige-symbolen
Stel dat symbolen mogelijk ongeldig zijn. Gewone functiesymbolen gegenereerd door de compiler
zal altijd geldig zijn om te laden met movi/shori/ptabs of movi/shori/ptrel, maar met
assembler- en/of linkertrucs is het mogelijk om symbolen te genereren die ervoor zorgen
ptabs / ptrel om te vangen. Deze optie is alleen zinvol wanneer -mno-pt-vast in
effect. Het voorkomt cross-basic-block cse, hijsen en de meeste planningen
symbool laadt. De standaardwaarde is -mno-ongeldige-symbolen.

-mbranch-kosten=num
Uitgaan van num zijn de kosten voor een filiaalinstructie. Hogere cijfers maken de
compiler probeert indien mogelijk meer branchevrije code te genereren. Indien niet gespecificeerd de
waarde wordt geselecteerd afhankelijk van het processortype waarvoor wordt gecompileerd.

-mcbranchdi
Schakel het instructiepatroon "cbranchdi4" in.

-mcmpeqdi
Zend het instructiepatroon "cmpeqdi_t" uit, zelfs wanneer -mcbranchdi van kracht is.

-mfused-gek
Sta het gebruik van de "fmac"-instructie toe (floating-point vermenigvuldigen-accumuleren) als de
processortype ondersteunt dit. Als u deze optie inschakelt, kan er code worden gegenereerd die produceert
verschillende numerieke drijvende-kommaresultaten in vergelijking met strikte IEEE 754-rekenkunde.

-verweer-cmove
Voorkeur voor voorwaardelijke vertakkingen met nul verplaatsing voor voorwaardelijke verplaatsingsinstructie
patronen. Dit kan resulteren in snellere code op de SH4-processor.

solaris 2 Opties

Deze -m opties worden ondersteund op Solaris 2:

-mimpure-tekst
-mimpure-tekst, gebruikt in aanvulling op -gedeeld, vertelt de compiler om niet door te geven -z tekst naar
de linker bij het koppelen van een gedeeld object. Met deze optie kunt u positie-
afhankelijke code in een gedeeld object.

-mimpure-tekst onderdrukt de "verhuizingen blijven tegen toewijsbare maar niet-beschrijfbare"
secties" linker foutbericht. De noodzakelijke verhuizingen zullen echter leiden tot kopieer-
on-write, en het gedeelde object wordt niet echt gedeeld tussen processen. In plaats van
gebruik -mimpure-tekst, moet u alle broncode compileren met -fpic or -fPIC.

Deze switches worden naast het bovenstaande ondersteund op Solaris 2:

-pthreads
Ondersteuning voor multithreading toevoegen met behulp van de POSIX-threadsbibliotheek. Deze optie stelt
vlaggen voor zowel de preprocessor als de linker. Deze optie heeft geen invloed op de thread
veiligheid van objectcode geproduceerd door de compiler of die van bibliotheken die ermee zijn meegeleverd.

-pdraad
Dit is een synoniem voor -pthreads.

SPARC Opties

Deze -m opties worden ondersteund op de SPARC:

-mno-app-regs
-map-regs
Specificeren -map-regs om output te genereren met behulp van de globale registers 2 tot en met 4, die:
de SPARC SVR4 ABI reserveert voor toepassingen. Zoals het globale register 1, elke global
register 2 t/m 4 wordt dan behandeld als een toewijsbaar register dat wordt beklad door
functie oproepen. Dit is de standaardinstelling.

Specificeer om volledig SVR4 ABI-compatibel te zijn ten koste van enig prestatieverlies
-mno-app-regs. Met deze optie moet u bibliotheken en systeemsoftware compileren.

-mplat
-mno-plat
met -mplat, de compiler genereert geen instructies voor het opslaan/herstellen en gebruikt a
"plat" of enkelvoudig raammodel. Dit model is compatibel met de reguliere
raammodel registreren. De lokale registers en de invoerregisters (0--5) zijn nog steeds
behandeld als "call-saved" registers en worden indien nodig op de stapel opgeslagen.

met -mno-plat (de standaard), de compiler genereert instructies voor opslaan/herstellen (behalve
voor bladfuncties). Dit is de normale bedrijfsmodus.

-mfpu
-mhard-zweven
Genereer output met drijvende-komma-instructies. Dit is de standaardinstelling.

-mno-fpu
-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma. Waarschuwing: het vereiste
bibliotheken zijn niet voor alle SPARC-doelen beschikbaar. Normaal gesproken zijn de faciliteiten van de
de gebruikelijke C-compiler van de machine worden gebruikt, maar dit kan niet rechtstreeks in cross-
compilatie. U moet uw eigen regelingen treffen om voor een geschikte bibliotheek te zorgen
functies voor cross-compilatie. De ingebedde doelen sparc-*-uit en sparcliet-*-*
bieden wel software drijvende-komma-ondersteuning.

-msoft-zweven verandert de aanroepconventie in het uitvoerbestand; daarom is het alleen
handig als je compileert allen van een programma met deze optie. In het bijzonder moet u:
compileren libgcc.a, de bibliotheek die bij GCC wordt geleverd, met -msoft-zweven hiervoor
werken.

-mhard-quad-float
Genereer output met quad-word (lange dubbele) floating-point instructies.

-msoft-quad-float
Genereer output met bibliotheekaanroepen voor quad-word (long double) floating-point
instructies. De aangeroepen functies zijn die gespecificeerd in de SPARC ABI. Dit is de
standaard.

Op het moment van schrijven zijn er geen SPARC-implementaties die hardware-ondersteuning hebben voor:
de quad-woord drijvende-komma-instructies. Ze roepen allemaal een valbehandelaar aan voor een van
deze instructies, en vervolgens emuleert de trap-handler het effect van de instructie.
Vanwege de overhead van de trap-handler is dit veel langzamer dan het aanroepen van de ABI-bibliotheek
routines. dus de -msoft-quad-float optie is de standaard.

-mno-niet-uitgelijnde dubbels
-unaligned-dubbels
Neem aan dat doubles 8-byte uitlijning hebben. Dit is de standaardinstelling.

met -unaligned-dubbels, GCC gaat ervan uit dat doubles alleen 8-byte uitlijning hebben als ze
zijn opgenomen in een ander type, of als ze een absoluut adres hebben. Anders zou het
gaat ervan uit dat ze een uitlijning van 4 bytes hebben. Door deze optie op te geven, vermijdt u zeldzame
compatibiliteitsproblemen met code gegenereerd door andere compilers. Het is niet de standaard
omdat het resulteert in prestatieverlies, vooral voor drijvende-kommacode.

-mno-sneller-structs
-mfaster-structuren
met -mfaster-structuren, gaat de compiler ervan uit dat structuren 8-byte moeten hebben
uitlijning. Dit maakt het gebruik van paren "ldd" en "std" instructies voor kopieën mogelijk
in structuurtoewijzing, in plaats van tweemaal zoveel "ld" en "st" paren. echter, de
het gebruik van deze gewijzigde uitlijning is rechtstreeks in strijd met de SPARC ABI. Het is dus de bedoeling
alleen voor gebruik op doelen waarbij de ontwikkelaar erkent dat hun resulterende code
zal niet direct in lijn zijn met de regels van de ABI.

-mcpu=cpu_type
Stel de instructieset, registerset en instructieplanningsparameters in voor:
type machine cpu_type. Ondersteunde waarden voor cpu_type zijn v7, cypres, v8, supersparc,
hyperspaat, leon, sparcliet, f930, f934, spaclite86x, sterretje, tsc701, v9,
ultrasparc, ultraspark3, Niagara, niagara2, niagara3 en niagara4.

Native Solaris en GNU/Linux toolchains ondersteunen ook de waarde inheemse, die selecteert
de beste architectuuroptie voor de hostprocessor. -mcpu=natief heeft geen effect als
GCC herkent de processor niet.

Standaardinstructieplanningsparameters worden gebruikt voor waarden die een
architectuur en niet een implementatie. Dit zijn v7, v8, sparcliet, sterretje, v9.

Hier is een lijst van elke ondersteunde architectuur en hun ondersteunde implementaties.

v7 cipres

v8 supersparc, hypersparc, leon

sparcliet
f930, f934, spaclite86x

sterretje
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Standaard (tenzij anders geconfigureerd) genereert GCC code voor de V7-variant van de
SPARC-architectuur. Met -mcpu=cipres, de compiler optimaliseert het bovendien voor
de Cypress CY7C602-chip, zoals gebruikt in de SPARCStation/SPARCServer 3xx-serie. Dit is
ook geschikt voor de oudere SPARCStation 1, 2, IPX etc.

met -mcpu=v8, genereert GCC code voor de V8-variant van de SPARC-architectuur. De
het enige verschil met V7-code is dat de compiler het gehele getal vermenigvuldigt en
integer verdeelinstructies die in SPARC-V8 voorkomen, maar niet in SPARC-V7. Met
-mcpu=supersparc, optimaliseert de compiler het bovendien voor de SuperSPARC-chip, zoals
gebruikt in de SPARCStation 10, 1000 en 2000 series.

met -mcpu=sparcliet, GCC genereert code voor de SPARClite-variant van de SPARC
architectuur. Dit voegt de stap integer vermenigvuldigen, integer delen toe en scan ("ffs")
instructies die bestaan ​​in SPARClite maar niet in SPARC-V7. Met -mcpu=f930
compiler optimaliseert het bovendien voor de Fujitsu MB86930-chip, wat het origineel is
SPARClite, zonder FPU. Met -mcpu=f934, de compiler optimaliseert het bovendien voor
de Fujitsu MB86934-chip, de recentere SPARClite met FPU.

met -mcpu=spikkeltje, GCC genereert code voor de SPARClet-variant van de SPARC
architectuur. Dit voegt het gehele getal vermenigvuldigen, vermenigvuldigen/accumuleren, geheel getal delen toe
step and scan ("ffs") instructies die wel in SPARClet maar niet in SPARC-V7 voorkomen. Met
-mcpu=tsc701, optimaliseert de compiler het bovendien voor de TEMIC SPARClet-chip.

met -mcpu=v9, genereert GCC code voor de V9-variant van de SPARC-architectuur. Dit
voegt 64-bits integer en floating-point verplaatsingsinstructies toe, 3 extra floating-point
conditiecoderegisters en voorwaardelijke verplaatsingsinstructies. Met -mcpu=ultrasparc,
de compiler optimaliseert het bovendien voor de Sun UltraSPARC I/II/IIi-chips. Met
-mcpu=ultrasparc3, de compiler optimaliseert het bovendien voor de Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+-chips. Met -mcpu=niagara, de compiler bovendien
optimaliseert het voor Sun UltraSPARC T1-chips. Met -mcpu=niagara2, de compiler
optimaliseert het bovendien voor Sun UltraSPARC T2-chips. Met -mcpu=niagara3
compiler optimaliseert het bovendien voor Sun UltraSPARC T3-chips. Met -mcpu=niagara4,
de compiler optimaliseert het bovendien voor Sun UltraSPARC T4-chips.

-mtune=cpu_type
Stel de instructieplanningsparameters in voor het machinetype: cpu_type, maar niet instellen
de instructieset of registerset die de optie -mcpu=cpu_type zou doen.

Dezelfde waarden voor -mcpu=cpu_type kan worden gebruikt voor -mtune=cpu_type, maar de enige
bruikbare waarden zijn die welke een bepaalde CPU-implementatie selecteren. Die zijn
cypres, supersparc, hyperspaat, leon, f930, f934, spaclite86x, tsc701, ultrasparc,
ultraspark3, Niagara, niagara2, niagara3 en niagara4. Met native Solaris en
GNU/Linux toolketens, inheemse kunnen ook worden gebruikt.

-mv8plus
-mno-v8plus
met -mv8plus, GCC genereert code voor de SPARC-V8+ ABI. Het verschil met de V8
ABI is dat de globale en uit-registers als 64 bits breed worden beschouwd. Dit is ingeschakeld
standaard op Solaris in 32-bits modus voor alle SPARC-V9-processors.

-mvis
-mno-vis
met -mvis, GCC genereert code die gebruikmaakt van de UltraSPARC Visual
Instructie Set extensies. De standaard is -mno-vis.

-mvis2
-mno-vis2
met -mvis2, GCC genereert code die gebruikmaakt van versie 2.0 van de UltraSPARC
Visuele Instructie Set-uitbreidingen. De standaard is -mvis2 bij het richten op een cpu die
ondersteunt dergelijke instructies, zoals UltraSPARC-III en later. Instelling -mvis2 ook
sets -mvis.

-mvis3
-mno-vis3
met -mvis3, GCC genereert code die gebruikmaakt van versie 3.0 van de UltraSPARC
Visuele Instructie Set-uitbreidingen. De standaard is -mvis3 bij het richten op een cpu die
ondersteunt dergelijke instructies, zoals niagara-3 en later. Instelling -mvis3 ook sets
-mvis2 en -mvis.

-mpopc
-mno-popc
met -mpopc, GCC genereert code die gebruikmaakt van de UltraSPARC-populatie
tel instructie. De standaard is -mpopc bij het richten op een cpu die dit ondersteunt
instructies, zoals Niagara-2 en later.

-mfmaf
-mno-fmaf
met -mfmaf, genereert GCC code die gebruikmaakt van de UltraSPARC Fused Multiply-
Drijvende-komma-extensies toevoegen. De standaard is -mfmaf bij het richten op een cpu die
ondersteunt dergelijke instructies, zoals Niagara-3 en later.

-mfix-at697f
Schakel de gedocumenteerde oplossing voor het enkele erratum van de Atmel AT697F-processor in
(wat overeenkomt met erratum #13 van de AT697E-processor).

Deze -m opties worden naast het bovenstaande ondersteund op SPARC-V9-processors in 64-bit
omgevingen:

-m32
-m64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits.

-mcmodel=welke
Stel het codemodel in op een van

meeldauw
Het Medium/Low code-model: 64-bit adressen, programma's moeten worden gekoppeld in de lage 32
stukjes geheugen. Programma's kunnen statisch of dynamisch gekoppeld worden.

midden
Het Medium/Middle-codemodel: 64-bits adressen, programma's moeten in de lage worden gekoppeld
44 bits geheugen, de tekst- en gegevenssegmenten moeten kleiner zijn dan 2 GB en
het datasegment moet zich binnen 2 GB van het tekstsegment bevinden.

medanie
Het Medium/Anywhere-codemodel: 64-bits adressen, programma's kunnen overal worden gekoppeld
in het geheugen moeten de tekst- en gegevenssegmenten kleiner zijn dan 2 GB en de gegevens
segment moet zich binnen 2 GB van het tekstsegment bevinden.

embleem
Het Medium/Anywhere-codemodel voor embedded systemen: 64-bits adressen, de tekst
en datasegmenten moeten kleiner zijn dan 2 GB, beide beginnend ergens in het geheugen
(bepaald op linktijd). Het globale register %g4 wijst naar de basis van de gegevens
segment. Programma's zijn statisch gekoppeld en PIC wordt niet ondersteund.

-geheugen-model=mem-model
Stel het geheugenmodel dat van kracht is op de processor in op een van:

verzuim
Het standaard geheugenmodel voor de processor en het besturingssysteem.

rmo Ontspannen geheugen bestellen

pso Gedeeltelijke winkelbestelling

tso Totale winkelbestelling

sc Sequentiële consistentie

Deze geheugenmodellen zijn formeel gedefinieerd in Bijlage D van de Sparc V9-architectuur
handleiding, zoals ingesteld in het veld "PSTATE.MM" van de processor.

-mstack-bias
-mno-stack-bias
met -mstack-bias, GCC gaat ervan uit dat de stapelaanwijzer en de frameaanwijzer, indien aanwezig,
worden gecompenseerd door -2047, die weer moeten worden toegevoegd bij het maken van verwijzingen naar stapelframes. Dit
is de standaardinstelling in 64-bits modus. Ga er anders vanuit dat een dergelijke offset niet aanwezig is.

SPU Opties

Deze -m opties worden ondersteund op de SPU:

-mwarn-reloc
-fout-reloc
De loader voor SPU kan geen dynamische verhuizingen aan. GCC geeft standaard een
fout wanneer het code genereert waarvoor een dynamische verplaatsing vereist is. -mno-fout-reloc
schakelt de fout uit, -mwarn-reloc zal in plaats daarvan een waarschuwing genereren.

-msafe-dma
-munsafe-dma
Instructies die de voltooiing van DMA initiëren of testen, mogen niet opnieuw worden besteld met
respect voor ladingen en opslag van het geheugen waartoe toegang wordt verkregen. Gebruikers doorgaans
los dit probleem op met het vluchtige sleutelwoord, maar dat kan leiden tot inefficiënte code
op plaatsen waarvan bekend is dat het geheugen niet verandert. In plaats van de herinnering te markeren als
vluchtig behandelen we de DMA-instructies als mogelijk van invloed op het hele geheugen. Met
-munsafe-dma gebruikers moeten het vluchtige trefwoord gebruiken om geheugentoegang te beschermen.

-mtak-hints
GCC genereert standaard een vertakkingsinstructie om te voorkomen dat de pijplijn vastloopt
altijd genomen of waarschijnlijk genomen takken. Een hint wordt niet dichterbij dan 8 gegenereerd
instructies weg van zijn tak. Er is weinig reden om ze uit te schakelen, behalve voor:
foutopsporingsdoeleinden, of om een ​​object een beetje kleiner te maken.

-mklein-mem
-grote-mem
Standaard genereert GCC code in de veronderstelling dat adressen nooit groter zijn dan 18 bits.
met -grote-mem code wordt gegenereerd die uitgaat van een volledig 32-bits adres.

-mstdmain
Standaard koppelt GCC met opstartcode die de SPU-achtige hoofdfunctie overneemt
interface (die een onconventionele parameterlijst heeft). Met -mstdmain, zal GCC linken
uw programma tegen opstartcode die een interface in C99-stijl aanneemt als "main",
inclusief een lokale kopie van "argv" strings.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-me32
-me64
Compileer code ervan uitgaande dat verwijzingen naar de PPU-adresruimte toegankelijk zijn via de "__ea"
benoemde adresruimte-kwalificatie zijn 32 of 64 bits breed. De standaardwaarde is 32 bits.
Aangezien dit een ABI-wijzigingsoptie is, moet alle objectcode in een uitvoerbaar bestand worden gecompileerd
met dezelfde instelling.

-adres-ruimte-conversie
-mno-adres-ruimte-conversie
Toestaan/niet toestaan ​​dat de "__ea" adresruimte wordt behandeld als een superset van het generieke adres
ruimte. Dit maakt expliciete typecasts tussen "__ea" en generieke aanwijzer mogelijk, evenals:
impliciete conversies van generieke pointers naar "__ea" pointers. De standaard is om toe te staan
adresruimte pointer conversies.

-mcache-grootte=cache grootte
Deze optie regelt de versie van libgcc die de compiler koppelt aan een uitvoerbaar bestand
en selecteert een door software beheerde cache voor toegang tot variabelen in het "__ea"-adres
ruimte met een bepaalde cachegrootte. Mogelijke opties voor cache grootte zijn 8, 16, 32, 64
en 128. De standaardcachegrootte is 64 KB.

-matomische-updates
-mno-atomaire-updates
Deze optie regelt de versie van libgcc die de compiler koppelt aan een uitvoerbaar bestand
en selecteert of atomaire updates voor de door software beheerde cache van variabelen aan de PPU-zijde
worden gebruikt. Als u atomaire updates gebruikt, worden wijzigingen in een PPU-variabele van SPU-code met behulp van
de "__ea" benoemde adresruimte-kwalificatie zal geen invloed hebben op wijzigingen aan andere PPU's
variabelen die zich in dezelfde cacheregel van PPU-code bevinden. Als u geen gebruik maakt van atomic
updates, kan dergelijke interferentie optreden; het terugschrijven van cacheregels zal echter meer zijn
efficiënt. Het standaardgedrag is het gebruik van atomaire updates.

-mdual-nops
-mdual-nops=n
GCC zal standaard nops invoegen om het dubbele probleem te vergroten wanneer het verwacht dat dit zal toenemen
prestaties. n kan een waarde van 0 tot 10 zijn. Een kleinere n zal minder nops invoegen. 10
is de standaard, 0 is hetzelfde als -mno-dubbele-nops. uitgeschakeld met -Jij.

-mhint-max-nops=n
Maximaal aantal nops dat moet worden ingevoegd voor een vertakkingshint. Een takhint moet minimaal 8 . zijn
instructies weg van de tak die het uitvoert. GCC voegt maximaal toe n nee tegen
dwing dit af, anders zal het de branch hint niet genereren.

-mhint-max-afstand=n
De codering van de vertakkingshint-instructie beperkt de hint tot binnen 256
instructies van het bijkantoor dat het uitvoert. Standaard zorgt GCC ervoor dat deze binnen is
125.

-msafe-tips
Omzeil een hardwarefout die ervoor zorgt dat de SPU voor onbepaalde tijd vastloopt. Standaard is GCC
zal de "hbrp"-instructie invoegen om ervoor te zorgen dat dit vastlopen niet gebeurt.

Opties For Systeem V

Deze extra opties zijn beschikbaar op System V Release 4 voor compatibiliteit met andere
compilers op die systemen:

-G Maak een gedeeld object. Het is aanbevolen dat -symbolisch or -gedeeld in plaats daarvan worden gebruikt.

-Qy Identificeer de versies van elke tool die door de compiler wordt gebruikt, in een ".ident" assembler
richtlijn in de output.

-Qn Vermijd het toevoegen van ".ident"-richtlijnen aan het uitvoerbestand (dit is de standaardinstelling).

-YP,dirs
Doorzoek de mappen dirs, en geen andere, voor bibliotheken gespecificeerd met -l.

-Ja,dir
Kijk in de directory dir om de M4-preprocessor te vinden. De assembler gebruikt dit
optie.

TEGEL-Gx Opties

Deze -m opties worden ondersteund op de TILE-Gx:

-mcpu=naam
Selecteert het type CPU dat moet worden getarget. Momenteel is het enige ondersteunde type tegelgx.

-m32
-m64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang, en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits.

TEGELPro Opties

Deze -m opties worden ondersteund op de TILEPro:

-mcpu=naam
Selecteert het type CPU dat moet worden getarget. Momenteel is het enige ondersteunde type tegelpro.

-m32
Genereer code voor een 32-bits omgeving, die int, long en pointer instelt op 32 bits.
Dit is het enige ondersteunde gedrag, dus de vlag wordt in wezen genegeerd.

V850 Opties

Deze -m opties zijn gedefinieerd voor V850-implementaties:

-mlong-oproepen
-mno-lange gesprekken
Behandel alle oproepen als ver weg (dichtbij). Als wordt aangenomen dat gesprekken ver weg zijn,
compiler laadt altijd het adres van de functies in een register en roept indirect aan
door de wijzer.

-mno-ep
-mep
Niet optimaliseren (wel optimaliseren) basisblokken die dezelfde indexaanwijzer 4 of meer gebruiken
keer om de aanwijzer naar het "ep"-register te kopiëren en de kortere "sld" en "sst" te gebruiken
instructies. De -mep optie is standaard ingeschakeld als u optimaliseert.

-mno-prolog-functie
-mprolog-functie
Gebruik geen externe functies om registers op de proloog op te slaan en te herstellen
en epiloog van een functie. De externe functies zijn langzamer, maar gebruiken minder code
spatie als meer dan één functie hetzelfde aantal registers opslaat. De
-mprolog-functie optie is standaard ingeschakeld als u optimaliseert.

-mruimte
Probeer de code zo klein mogelijk te maken. Op dit moment schakelt dit alleen de -mep
en -mprolog-functie opties.

-mtda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in het kleine gegevensgebied
waar het register "ep" naar verwijst. Het kleine gegevensgebied kan in totaal maximaal 256 bytes bevatten
(128 bytes voor bytereferenties).

-msda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in het kleine gegevensgebied
dat register "gp" verwijst naar. Het kleine gegevensgebied kan maximaal 64 kilobyte bevatten.

-mzda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in de eerste 32
kilobyte geheugen.

-mv850
Geef aan dat de doelprocessor de V850 is.

-mbig-schakelaar
Genereer code die geschikt is voor grote schakeltabellen. Gebruik deze optie alleen als de
assembler/linker klagen over vertakkingen die buiten het bereik vallen binnen een schakeltabel.

-map-regs
Deze optie zorgt ervoor dat r2 en r5 worden gebruikt in de code die door de compiler wordt gegenereerd.
Deze instelling is de standaardinstelling.

-mno-app-regs
Deze optie zorgt ervoor dat r2 en r5 worden behandeld als vaste registers.

-mv850e2v3
Geef op dat de doelprocessor de V850E2V3 is. De preprocessorconstanten
__v850e2v3__ wordt gedefinieerd als deze optie wordt gebruikt.

-mv850e2
Geef aan dat de doelprocessor de V850E2 is. De preprocessor constanten
__v850e2__ wordt gedefinieerd als deze optie wordt gebruikt.

-mv850e1
Geef aan dat de doelprocessor de V850E1 is. De preprocessor constanten
__v850e1__ en __v850e__ wordt gedefinieerd als deze optie wordt gebruikt.

-mv850es
Geef aan dat de doelprocessor de V850ES is. Dit is een alias voor de -mv850e1
optie.

-mv850e
Geef aan dat de doelprocessor de V850E is. De preprocessorconstante __v850e__
wordt gedefinieerd als deze optie wordt gebruikt.

Als geen van beide -mv850 noch -mv850e noch -mv850e1 noch -mv850e2 noch -mv850e2v3 zijn gedefinieerd
dan wordt een standaard doelprocessor gekozen en de relevante __v850*__ voorverwerker
constante wordt gedefinieerd.

De preprocessor constanten __v850 en __v851__ zijn altijd gedefinieerd, ongeacht welke
processorvariant is het doelwit.

-mdisable-callt
Deze optie onderdrukt het genereren van de CALLT-instructie voor de v850e, v850e1,
v850e2 en v850e2v3 smaken van de v850-architectuur. De standaardwaarde is
-mno-uitschakelen-callt waarmee de CALLT-instructie kan worden gebruikt.

VAX Opties

Deze -m opties zijn gedefinieerd voor de VAX:

-munix
Voer bepaalde springinstructies ("aobleq" enzovoort) niet uit die de Unix-assembler
want de VAX kan niet over lange afstanden overweg.

-mg nu
Voer die spronginstructies uit, in de veronderstelling dat u zult assembleren met de
GNU-assembler.

- mg Uitvoercode voor getallen met drijvende komma in G-formaat in plaats van D-formaat.

VxWorks Opties

De opties in deze sectie zijn gedefinieerd voor alle VxWorks-doelen. Opties specifiek voor de
doelhardware worden weergegeven met de andere opties voor dat doel.

-mrtp
GCC kan code genereren voor zowel VxWorks-kernels als realtime processen (RTP's). Dit
optie schakelt van de eerste naar de laatste. Het definieert ook de preprocessor-macro
"__RTP__".

-niet-statisch
Koppel een RTP-uitvoerbaar bestand aan gedeelde bibliotheken in plaats van statische bibliotheken. De
opties -statisch en -gedeeld kan ook worden gebruikt voor RTP's; -statisch is de standaard.

-Bstatisch
-Bdynamisch
Deze opties worden doorgegeven aan de linker. Ze zijn gedefinieerd voor compatibiliteit met:
diab.

-Xbind-lui
Schakel luie binding van functieaanroepen in. Deze optie is gelijk aan: -Wl,-z,nu en
gedefinieerd voor compatibiliteit met Diab.

-Xbind-nu
Schakel luie binding van functieaanroepen uit. Deze optie is de standaard en is gedefinieerd voor:
compatibiliteit met Diab.

x86-64 Opties

Deze staan ​​vermeld onder

Xstormy16 Opties

Deze opties zijn gedefinieerd voor Xstormy16:

-msim
Kies opstartbestanden en linkerscript die geschikt zijn voor de simulator.

Xtensa Opties

Deze opties worden ondersteund voor Xtensa-doelen:

-mconst16
-mno-const16
Schakel het gebruik van "CONST16"-instructies voor het laden van constante waarden in of uit. De
De instructie "CONST16" is momenteel geen standaardoptie van Tensilica. Wanneer
ingeschakeld, worden "CONST16"-instructies altijd gebruikt in plaats van de standaard "L32R"
instructies. Het gebruik van "CONST16" is standaard alleen ingeschakeld als de "L32R"
instructie is niet beschikbaar.

-mfused-gek
-mno-gefuseerd-madd
Schakel het gebruik van gecombineerde instructies voor vermenigvuldigen/optellen en vermenigvuldigen/aftrekken in de
optie met drijvende komma. Dit heeft geen effect als de optie met drijvende komma niet ook is
ingeschakeld. Het uitschakelen van gefuseerde instructies voor vermenigvuldigen/optellen en vermenigvuldigen/aftrekken dwingt de
compiler om afzonderlijke instructies te gebruiken voor de bewerkingen vermenigvuldigen en optellen/aftrekken.
Dit kan wenselijk zijn in sommige gevallen waar strikte IEEE 754-conforme resultaten zijn:
vereist: de samengevoegde instructies voor vermenigvuldigen optellen/aftrekken ronden het tussenliggende niet af
resultaat, waardoor resultaten worden behaald met meer bits van precisie dan gespecificeerd door de
IEEE-standaard. Het uitschakelen van instructies voor gefuseerd vermenigvuldigen optellen/aftrekken zorgt er ook voor dat:
de programma-uitvoer is niet gevoelig voor het vermogen van de compiler om vermenigvuldigen en . te combineren
optellen/aftrekken bewerkingen.

-mserialiseren-vluchtig
-mno-serialiseren-vluchtig
Wanneer deze optie is ingeschakeld, voegt GCC "MEMW"-instructies in voor "vluchtig" geheugen
referenties om sequentiële consistentie te garanderen. De standaard is -mserialiseren-vluchtig.
Te gebruiken -mno-serialiseren-vluchtig om de "MEMW" instructies weg te laten.

-mforce-geen-pic
Voor doelen, zoals GNU/Linux, waar alle gebruikersmodus Xtensa-code position-
onafhankelijke code (PIC), deze optie schakelt PIC uit voor het compileren van kernelcode.

-mtext-sectie-literals
-mno-tekst-sectie-literals
Beheers de behandeling van letterlijke pools. De standaard is -mno-tekst-sectie-literals,
die letterlijke waarden in een aparte sectie in het uitvoerbestand plaatst. Hierdoor kan de
letterlijke pool die in een data-RAM / ROM kan worden geplaatst, en het stelt de linker ook in staat om te combineren
letterlijke pools van afzonderlijke objectbestanden om overbodige letterlijke waarden te verwijderen en code te verbeteren
maat. Met -mtext-sectie-literals, de letterlijke termen worden afgewisseld in de tekstsectie
om ze zo dicht mogelijk bij hun referenties te houden. Dit kan nodig zijn
voor grote montagebestanden.

-mtarget-uitlijnen
-mno-target-uitlijnen
Wanneer deze optie is ingeschakeld, instrueert GCC de assembler om automatisch uit te lijnen
instructies om takstraffen te verminderen ten koste van een bepaalde codedichtheid. De
assembler probeert de dichtheidsinstructies te verbreden om vertakkingsdoelen en de
instructies na oproepinstructies. Als er niet genoeg voorafgaande kluis zijn
densiteitsinstructies om een ​​doel uit te lijnen, wordt er geen verbreding uitgevoerd. De standaardwaarde is
-mtarget-uitlijnen. Deze opties hebben geen invloed op de behandeling van automatisch uitgelijnd
instructies zoals "LOOP", die de assembler altijd zal uitlijnen, hetzij door te verbreden
dichtheidsinstructies of door no-op-instructies in te voegen.

-lange oproepen
-mno-longcalls
Wanneer deze optie is ingeschakeld, instrueert GCC de assembler om directe oproepen te vertalen naar:
indirecte oproepen, tenzij het kan bepalen dat het doel van een directe oproep zich in de
bereik toegestaan ​​door de oproepinstructie. Deze vertaling komt meestal voor bij oproepen naar:
functies in andere bronbestanden. In het bijzonder vertaalt de assembler een direct
"CALL" instructie in een "L32R" gevolgd door een "CALLX" instructie. De standaard is
-mno-longcalls. Deze optie moet worden gebruikt in programma's waarin het oproepdoel kan
mogelijk buiten bereik zijn. Deze optie is geïmplementeerd in de assembler, niet de
compiler, dus de door GCC gegenereerde assemblagecode zal nog steeds een directe oproep weergeven
instructies --- kijk naar de gedemonteerde objectcode om de daadwerkelijke instructies te zien.
Merk op dat de assembler een indirecte aanroep zal gebruiken voor elke cross-file aanroep, niet alleen
degenen die echt buiten bereik zullen zijn.

zSerie Opties

Deze staan ​​vermeld onder

Opties For Code Generatie conventies
Deze machine-onafhankelijke opties regelen de interface-conventies die in code worden gebruikt
generatie.

De meeste hebben zowel positieve als negatieve vormen; de negatieve vorm van -foei zou
-fno-foo. In de onderstaande tabel wordt slechts één van de formulieren vermeld --- degene die niet de . is
standaard. U kunt het andere formulier achterhalen door ofwel te verwijderen Nee- of toevoegen.

-fbounds-controle
Voor frontends die dit ondersteunen, genereert u extra code om te controleren of indices dat deden:
access-arrays binnen het gedeclareerde bereik vallen. Dit wordt momenteel alleen ondersteund door de
Java- en Fortran-frontends, waarbij deze optie standaard is ingesteld op waar en onwaar
respectievelijk.

-ftrapv
Deze optie genereert traps voor ondertekende overloop bij optellen, aftrekken,
bewerkingen van vermenigvuldiging.

-fwrapv
Deze optie instrueert de compiler om aan te nemen dat getekende rekenkundige overloop van
optellen, aftrekken en vermenigvuldigen wikkelt zich rond met behulp van twee-complement
vertegenwoordiging. Deze vlag schakelt sommige optimalisaties in en schakelt andere uit. Dit
optie is standaard ingeschakeld voor de Java-frontend, zoals vereist door de Java-taal
specificatie.

-uitzonderingen
Afhandeling van uitzonderingen inschakelen. Genereert extra code die nodig is om uitzonderingen te verspreiden. Voor
sommige doelen, betekent dit dat GCC informatie voor het afwikkelen van het frame voor iedereen zal genereren
functies, die een aanzienlijke hoeveelheid gegevens kunnen produceren, hoewel dat niet het geval is
uitvoering beïnvloeden. Als u deze optie niet specificeert, zal GCC deze standaard inschakelen
voor talen zoals C++ die normaal gesproken uitzonderingen vereisen, en schakel deze uit voor
talen zoals C die dit normaal gesproken niet nodig hebben. Het kan echter nodig zijn om in te schakelen
deze optie bij het compileren van C-code die met uitzondering goed moet samenwerken
handlers geschreven in C++. U kunt deze optie ook uitschakelen als u dat bent
het compileren van oudere C++-programma's die geen gebruik maken van exception handling.

-fnon-call-uitzonderingen
Genereer code waarmee trapping-instructies uitzonderingen kunnen genereren. Merk op dat dit
vereist platformspecifieke runtime-ondersteuning die niet overal bestaat. Bovendien,
het staat alleen toe trapping instructies om uitzonderingen te genereren, bijv. geheugenverwijzingen of
drijvende-komma instructies. Het staat niet toe dat er willekeurige uitzonderingen worden gegenereerd
signaal handlers zoals "SIGALRM".

-funwind-tafels
Soortgelijke -uitzonderingen, behalve dat het alleen de benodigde statische gegevens genereert, maar
heeft op geen enkele andere manier invloed op de gegenereerde code. U zult normaal gesproken niet inschakelen
deze optie; in plaats daarvan zou een taalverwerker die deze afhandeling nodig heeft, deze inschakelen
in jouw naam.

-fasynchrone-afwikkel-tabellen
Genereer een afwikkeltabel in de indeling dwarf2, indien ondersteund door de doelmachine. De tafel is
exact bij elke instructiegrens, zodat het kan worden gebruikt voor het afwikkelen van de stapel vanaf
asynchrone gebeurtenissen (zoals debugger of garbage collector).

-fpcc-struct-return
Retourneer "korte" "struct" en "union" waarden in het geheugen zoals langere, in plaats van in
registreert. Deze conventie is minder efficiënt, maar heeft het voordeel dat:
intercallability tussen GCC-gecompileerde bestanden en bestanden die zijn gecompileerd met andere compilers,
met name de Portable C Compiler (pcc).

De precieze conventie voor het retourneren van structuren in het geheugen hangt af van het doel
configuratie macro's.

Korte structuren en vakbonden zijn die waarvan de grootte en uitlijning overeenkomen met die van sommigen
geheel getal.

Waarschuwing: code gecompileerd met de -fpcc-struct-return schakelaar is niet binair compatibel
met code gecompileerd met de -freg-struct-return schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-freg-struct-return
Retourneert waar mogelijk de waarden "struct" en "union" in registers. Dit is efficiënter
voor kleine constructies dan -fpcc-struct-return.

Als u geen van beide opgeeft -fpcc-struct-return noch -freg-struct-return, GCC is standaard ingesteld op
welke conventie ook standaard is voor het doel. Als er geen standaardconventie is,
GCC is standaard ingesteld op -fpcc-struct-return, behalve op doelen waar GCC de opdrachtgever is
compiler. In die gevallen kunnen we de standaard kiezen en hebben we de efficiëntere gekozen
aanmelden retour alternatief.

Waarschuwing: code gecompileerd met de -freg-struct-return schakelaar is niet binair compatibel
met code gecompileerd met de -fpcc-struct-return schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkorte-enums
Wijs aan een "enum"-type slechts zoveel bytes toe als nodig is voor het gedeclareerde bereik van
Mogelijke waarden. In het bijzonder zal het type "enum" gelijk zijn aan het kleinste
integer type dat genoeg ruimte heeft.

Waarschuwing: de -fkorte-enums switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkort-dubbel
Gebruik dezelfde maat voor "double" als voor "float".

Waarschuwing: de -fkort-dubbel switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkort-wchar
Overschrijf het onderliggende type voor waar_t te kort Ongesigneerd int in plaats van de
standaard voor het doel. Deze optie is handig voor het bouwen van programma's om onder te draaien
WIJN.

Waarschuwing: de -fkort-wchar switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fno-gemeenschappelijk
Regelt in C-code de plaatsing van niet-geïnitialiseerde globale variabelen. Unix C-compilers
hebben traditioneel meerdere definities van dergelijke variabelen in verschillende
compilatie-eenheden door de variabelen in een gemeenschappelijk blok te plaatsen. Dit is het gedrag
gespecificeerd door -fgewone, en is de standaard voor GCC op de meeste doelen. Anderzijds,
dit gedrag is niet vereist door ISO C en kan op sommige doelen een snelheid of code bevatten
groottestraf op variabele referenties. De -fno-gemeenschappelijk optie geeft aan dat de
compiler moet niet-geïnitialiseerde globale variabelen in de gegevenssectie van het object plaatsen
bestand, in plaats van ze als gemeenschappelijke blokken te genereren. Dit heeft tot gevolg dat als de
dezelfde variabele wordt gedeclareerd (zonder "extern") in twee verschillende compilaties
krijg een meervoudige definitiefout wanneer u ze koppelt. In dit geval moet u compileren
Met -fgewone in plaats daarvan. Compileren met -fno-gemeenschappelijk is handig op doelen waarvoor het
betere prestaties levert, of als u wilt controleren of het programma werkt,
andere systemen die niet-geïnitialiseerde variabele declaraties altijd op deze manier behandelen.

-fno-ident
Negeer de #identificeren Richtlijn.

-finhibit-maat-richtlijn
Voer geen ".size" assembler-richtlijn uit, of iets anders dat problemen zou veroorzaken
als de functie in het midden wordt gesplitst en de twee helften op verafgelegen locaties worden geplaatst
apart in het geheugen. Deze optie wordt gebruikt bij het compileren crststuff.c; je zou niet nodig moeten hebben
om het voor iets anders te gebruiken.

-fverbose-asm
Zet extra commentaarinformatie in de gegenereerde assembly-code om het meer te maken
leesbaar. Deze optie is over het algemeen alleen nuttig voor degenen die de
gegenereerde assembly-code (misschien tijdens het debuggen van de compiler zelf).

-fno-uitgebreide-asm, de standaard, zorgt ervoor dat de extra informatie wordt weggelaten en is
handig bij het vergelijken van twee assembler-bestanden.

-frecord-gcc-schakelaars
Deze schakeloptie zorgt ervoor dat de opdrachtregel wordt gebruikt om de compiler aan te roepen
opgenomen in het objectbestand dat wordt gemaakt. Deze schakelaar is alleen geïmplementeerd
op sommige doelen en het exacte formaat van de opname is doel en binair bestandsformaat
afhankelijk, maar heeft meestal de vorm van een sectie met ASCII-tekst. Dit
schakelaar is gerelateerd aan de -fverbose-asm schakelaar, maar die schakelaar neemt alleen op
informatie in het uitvoerbestand van de assembler als opmerkingen, zodat het nooit het object bereikt
het dossier. Zie ook -grecord-gcc-schakelaars voor een andere manier om compileropties op te slaan in
het objectbestand.

-fpic
Genereer positie-onafhankelijke code (PIC) die geschikt is voor gebruik in een gedeelde bibliotheek, als
ondersteund voor de doelcomputer. Een dergelijke code heeft toegang tot alle constante adressen via a
globale offsettabel (GOT). De dynamische lader lost de GOT-vermeldingen op wanneer de
programma start (de dynamische lader maakt geen deel uit van GCC; het maakt deel uit van de
systeem). Als de GOT-grootte voor het gekoppelde uitvoerbare bestand een machinespecifiek maximum overschrijdt
size, krijg je een foutmelding van de linker die aangeeft dat: -fpic werkt niet; in
in dat geval, hercompileer met -fPIC in plaats daarvan. (Deze maxima zijn 8k op de SPARC en 32k
op de m68k en RS/6000. De 386 heeft zo'n limiet niet.)

Positie-onafhankelijke code vereist speciale ondersteuning en werkt daarom alleen op
bepaalde automaten. Voor de 386 ondersteunt GCC PIC voor System V, maar niet voor de Sun
386i. Code gegenereerd voor de IBM RS/6000 is altijd positie-onafhankelijk.

Wanneer deze vlag is ingesteld, worden de macro's "__pic__" en "__PIC__" gedefinieerd als 1.

-fPIC
Indien ondersteund voor de doelmachine, zend positie-onafhankelijke code uit, geschikt voor:
dynamisch koppelen en het vermijden van enige limiet op de grootte van de globale offset-tabel. Dit
optie maakt een verschil op de m68k, PowerPC en SPARC.

Positie-onafhankelijke code vereist speciale ondersteuning en werkt daarom alleen op
bepaalde automaten.

Wanneer deze vlag is ingesteld, worden de macro's "__pic__" en "__PIC__" gedefinieerd als 2.

-fpie
-fPIE
Deze opties zijn vergelijkbaar met: -fpic en -fPIC, maar gegenereerde positie-onafhankelijke code
kan alleen worden gekoppeld aan uitvoerbare bestanden. Meestal worden deze opties gebruikt wanneer: -taart GCC
optie zal worden gebruikt tijdens het koppelen.

-fpie en -fPIE beide definiëren de macro's "__pie__" en "__PIE__". De macro's hebben de
waarde 1 voor -fpie en 2 voor -fPIE.

-fno-jump-tafels
Gebruik geen jump-tabellen voor switch-statements, zelfs niet waar dit efficiënter zou zijn
dan andere strategieën voor het genereren van codes. Deze optie is nuttig in combinatie met:
-fpic or -fPIC voor het bouwen van code die deel uitmaakt van een dynamische linker en niet kan
verwijzen naar het adres van een sprongtabel. Op sommige doelen hebben springtafels geen
GOT en deze optie is niet nodig.

-fvast-reg
Behandel het register met de naam reg als vast register; gegenereerde code mag nooit verwijzen naar:
het (behalve misschien als stapelaanwijzer, frameaanwijzer of in een andere vaste rol).

reg moet de naam van een register zijn. De geaccepteerde registernamen zijn machinespecifiek
en worden gedefinieerd in de macro "REGISTER_NAMES" in het macrobestand van de machinebeschrijving.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fcall-gebruikt-reg
Behandel het register met de naam reg als een toewijsbaar register dat door functie wordt beklad
belt. Het kan worden toegewezen aan tijdelijke of variabelen die niet over een
telefoongesprek. Functies die op deze manier zijn gecompileerd, zullen het register niet opslaan en herstellen reg.

Het is een fout om deze vlag te gebruiken met de frame-aanwijzer of stapelaanwijzer. Gebruik hiervan
vlag voor andere registers die vaste doordringende rollen hebben in de uitvoering van de machine
model zal rampzalige resultaten opleveren.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fcall-opgeslagen-reg
Behandel het register met de naam reg als een toewijsbaar register opgeslagen door functies. Het kan zijn
toegewezen, zelfs voor tijdelijke of variabelen die in een gesprek leven. Functies
op deze manier gecompileerd zal het register opslaan en herstellen reg als ze het gebruiken.

Het is een fout om deze vlag te gebruiken met de frame-aanwijzer of stapelaanwijzer. Gebruik hiervan
vlag voor andere registers die vaste doordringende rollen hebben in de uitvoering van de machine
model zal rampzalige resultaten opleveren.

Een ander soort ramp zal het gevolg zijn van het gebruik van deze vlag voor een register in
welke functiewaarden kunnen worden geretourneerd.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fpack-structuur[=n]
Pak alle constructiedelen zonder gaten samen zonder een opgegeven waarde. Wanneer een
waarde is opgegeven (die een kleine macht van twee moet zijn), pack-structuurleden
volgens deze waarde, die de maximale uitlijning vertegenwoordigt (dat wil zeggen, objecten met
standaarduitlijningsvereisten die groter zijn dan dit, worden mogelijk niet-uitgelijnd uitgevoerd
op de eerstvolgende paslocatie.

Waarschuwing: de -fpack-structuur switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Bovendien maakt het de code
suboptimaal. Gebruik het om te voldoen aan een niet-standaard binaire applicatie-interface.

-finstrument-functies
Genereer instrumentatie-oproepen voor toegang en vertrek naar functies. Net na functie
binnenkomst en vlak voor het verlaten van de functie, worden de volgende profileringsfuncties aangeroepen
met het adres van de huidige functie en de aanroepsite. (Op sommige platforms
"__builtin_return_address" werkt niet verder dan de huidige functie, dus de oproepsite
informatie is anders mogelijk niet beschikbaar voor de profileringsfuncties.)

ongeldig __cyg_profile_func_enter (ongeldig *this_fn,
ongeldig *call_site);
void __cyg_profile_func_exit (ongeldig *this_fn,
ongeldig *call_site);

Het eerste argument is het adres van het begin van de huidige functie, wat kan zijn:
precies opgezocht in de symbolentabel.

Deze instrumentatie wordt ook gedaan voor functies die inline worden uitgebreid in andere functies.
De profileringsoproepen geven aan waar, conceptueel, de inline-functie wordt ingevoerd
en verliet. Dit betekent dat adresseerbare versies van dergelijke functies beschikbaar moeten zijn.
Als al uw gebruik van een functie inline wordt uitgebreid, kan dit een extra betekenen
uitbreiding van de codegrootte. Als je gebruikt extern inline in uw C-code, een adresseerbaar
versie van dergelijke functies moet worden verstrekt. (Dit is normaal gesproken sowieso het geval, maar
als je geluk hebt en de optimizer de functies altijd inline uitbreidt, heb je dat misschien
weggekomen zonder statische kopieën te verstrekken.)

Een functie kan het attribuut "no_instrument_function" krijgen, in welk geval dit
instrumentatie zal niet worden gedaan. Dit kan bijvoorbeeld worden gebruikt voor de profilering
bovenstaande functies, interrupt-routines met hoge prioriteit en alle functies waarvan:
de profileringsfuncties kunnen niet veilig worden aangeroepen (misschien signaalbehandelaars, als de
profileringsroutines genereren output of wijzen geheugen toe).

-finstrument-functions-exclude-file-list=filet,filet, ...
Stel de lijst met functies in die zijn uitgesloten van instrumentatie (zie de beschrijving
van "-finstrument-functies"). Als het bestand dat een functiedefinitie bevat overeenkomt met
met een van filet, dan is die functie niet geïnstrumenteerd. De wedstrijd is gedaan op
substrings: als de filet parameter is een substring van de bestandsnaam, wordt beschouwd als
een match zijn.

Bijvoorbeeld:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

sluit alle inline-functies uit die zijn gedefinieerd in bestanden waarvan de padnamen "/bits/stl" bevatten
of "include/sys".

Als u om de een of andere reden de letter ',' wilt opnemen in een van sym, schrijven ','. Voor
bijvoorbeeld "-finstrument-functions-exclude-file-list=',,tmp'" (let op het enkele aanhalingsteken
rond de optie).

-finstrument-functions-exclude-function-list=sym,sym, ...
Dit is vergelijkbaar met "-finstrument-functions-exclude-file-list", maar deze optie stelt
de lijst met functienamen die van instrumentatie moeten worden uitgesloten. De functienaam om
overeenkomen is de voor de gebruiker zichtbare naam, zoals "vector blah(const vector &)",
niet de interne verminkte naam (bijv. "_Z4blahRSt6vectorIiSaIiEE"). De wedstrijd is gedaan
op substrings: als de sym parameter is een substring van de functienaam, het is
als een wedstrijd beschouwd. Voor uitgebreide id's van C99 en C++ is de functienaam
moet worden opgegeven in UTF-8, waarbij geen universele tekennamen worden gebruikt.

-fstack-controle
Genereer code om te controleren of u niet verder gaat dan de grens van de stapel. Jij
moet deze vlag specificeren als u in een omgeving met meerdere threads werkt,
maar hoeft het slechts zelden te specificeren in een single-threaded omgeving sinds stack
overflow wordt automatisch gedetecteerd op bijna alle systemen als er maar één stack is.

Merk op dat deze omschakeling er niet echt toe leidt dat er wordt gecontroleerd; de operationele
systeem of de taalruntime moet dat doen. De schakelaar zorgt ervoor dat het genereren van code:
zorg ervoor dat ze zien dat de stapel wordt uitgebreid.

U kunt bovendien een stringparameter specificeren: "no" betekent geen controle, "generic"
betekent het gebruik van ouderwetse controle forceren, "specifiek" betekent de beste controle gebruiken
methode en is gelijk aan bare -fstack-controle.

Controle in oude stijl is een generiek mechanisme waarvoor geen specifieke doelondersteuning nodig is
de compiler, maar heeft de volgende nadelen:

1. Aangepaste toewijzingsstrategie voor grote objecten: deze worden altijd toegewezen
dynamisch als hun grootte een vaste drempel overschrijdt.

2. Vaste limiet voor de grootte van het statische frame van functies: wanneer het wordt bekroond door a
bepaalde functie, is de stapelcontrole niet betrouwbaar en wordt er een waarschuwing gegeven door de
compiler.

3. Inefficiëntie: vanwege zowel de gewijzigde allocatiestrategie als de generieke
uitvoering worden de prestaties van de code belemmerd.

Merk op dat stapelcontrole in oude stijl ook de fallback-methode is voor "specifiek" indien nee
target-ondersteuning is toegevoegd in de compiler.

-fstack-limiet-register=reg
-fstack-limiet-symbool=sym
-fno-stack-limiet
Genereer code om ervoor te zorgen dat de stapel ook niet boven een bepaalde waarde groeit
de waarde van een register of het adres van een symbool. Als de stapel verder zou groeien
de waarde, wordt er een signaal afgegeven. Voor de meeste doelen wordt het signaal verhoogd voordat de
stack overschrijdt de grens, dus het is mogelijk om het signaal te vangen zonder te nemen
speciale voorzorgsmaatregelen.

Als de stapel bijvoorbeeld begint op het absolute adres 0x80000000 en groeit naar beneden,
je kunt de vlaggen gebruiken -fstack-limit-symbol=__stack_limit en
-Wl,--defsym,__stack_limit=0x7ffe0000 om een ​​stapellimiet van 128 KB af te dwingen. Let daar op
dit werkt mogelijk alleen met de GNU-linker.

-fsplitstack
Genereer code om de stapel automatisch te splitsen voordat deze overloopt. Het resultaat
programma heeft een niet-aangrenzende stapel die alleen kan overlopen als het programma dat niet kan
nog meer geheugen toewijzen. Dit is vooral handig bij het uitvoeren van programma's met een thread, omdat het
is niet langer nodig om voor elke thread een goede stapelgrootte te berekenen. Dit is
momenteel alleen geïmplementeerd voor de i386 en x86_64 back-ends met GNU/Linux.

Wanneer code gecompileerd met -fsplitstack roept code gecompileerd zonder -fsplitstacker
er is mogelijk niet veel stapelruimte beschikbaar om de laatste code uit te voeren. Als je alles compileert
code, inclusief bibliotheekcode, met -fsplitstack is geen optie, dan kan de linker
repareer deze aanroepen zodat de code is gecompileerd zonder -fsplitstack heeft altijd een grote
stapel. Ondersteuning hiervoor is geïmplementeerd in de gouden linker in GNU binutils release
2.21 en later.

-fleading-onderstrepingsteken
Deze optie en zijn tegenhanger, -fno-leidende-underscore, verander met geweld de manier waarop C
symbolen worden weergegeven in het objectbestand. Eén gebruik is om te helpen koppelen met legacy
montagecode.

Waarschuwing: de -fleading-onderstrepingsteken switch zorgt ervoor dat GCC code genereert die dat niet is
binair compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan a
niet-standaard applicatie binaire interface. Niet alle doelen bieden volledige ondersteuning
voor deze schakelaar.

-ftls-model=model
Wijzig het te gebruiken thread-lokale opslagmodel. De model argument zou een van moeten zijn
"global-dynamic", "local-dynamic", "initial-exec" of "local-exec".

De standaard zonder -fpic is "initial-exec"; met -fpic de standaard is
"globaal-dynamisch".

-fzichtbaarheid=standaard|intern|verborgen|beschermd
Stel de standaard zichtbaarheid van ELF-afbeeldingssymbolen in op de opgegeven optie --- alle symbolen zullen dat doen
worden hiermee gemarkeerd, tenzij deze binnen de code worden overschreven. Het gebruik van deze functie kan heel
de koppelings- en laadtijden van gedeelde objectbibliotheken aanzienlijk verbeteren, meer produceren
geoptimaliseerde code, bieden bijna perfecte API-export en voorkomen symboolbotsingen. Het is
sterk aanbevolen dat u dit gebruikt in alle gedeelde objecten die u distribueert.

Ondanks de nomenclatuur betekent "standaard" altijd openbaar; dat wil zeggen, beschikbaar om te worden gekoppeld
tegen van buiten het gedeelde object. "beschermd" en "intern" zijn vrij nutteloos
bij gebruik in de echte wereld, dus de enige andere veelgebruikte optie is "verborgen". De
standaard als -fzichtbaarheid niet is opgegeven is "standaard", dwz maak elk symbool
public --- dit veroorzaakt hetzelfde gedrag als eerdere versies van GCC.

Een goede uitleg van de voordelen die worden geboden door ervoor te zorgen dat ELF-symbolen de juiste
zichtbaarheid wordt gegeven door "How To Write Shared Libraries" door Ulrich Drepper (wat kan zijn:
gevonden bijhttp://people.redhat.com/~drepper/>) --- maar een superieure oplossing gemaakt
mogelijk door deze optie om dingen verborgen te markeren wanneer de standaard openbaar is om te maken
de standaard verborgen en markeer dingen openbaar. Dit is de norm met DLL's op Windows en
Met -fzichtbaarheid=verborgen en "__attribute__ ((visibility("default")))" in plaats van
"__declspec(dllexport)" krijg je bijna identieke semantiek met identieke syntaxis.
Dit is een grote zegen voor degenen die met platformonafhankelijke projecten werken.

Voor degenen die zichtbaarheidsondersteuning toevoegen aan bestaande code, vindt u misschien: #pragma GCC
zichtbaarheid bruikbaar. Dit werkt door u de aangiften die u wilt instellen bij te voegen
zichtbaarheid voor met (bijvoorbeeld) #pragma GCC zichtbaarheid duwen (verborgen) en #pragma GCC
zichtbaarheid knal. Houd er rekening mee dat de zichtbaarheid van symbolen moet worden bekeken as deel of de
API interface contract en dus moet alle nieuwe code altijd zichtbaarheid specificeren wanneer het
is niet de standaard; dat wil zeggen, declaraties die alleen voor gebruik binnen de lokale DNB zijn, moeten: altijd
expliciet gemarkeerd worden als verborgen om PLT indirecte overheadkosten te vermijden --- waardoor dit
overduidelijk helpt ook de leesbaarheid en zelfdocumentatie van de code. Let daar op
vanwege ISO C++ specificatie-eisen, operator new en operator delete must
altijd standaard zichtbaar zijn.

Houd er rekening mee dat headers van buiten uw project, in het bijzonder systeemheaders en
headers van een andere bibliotheek die u gebruikt, verwacht mogelijk niet te worden gecompileerd met
zichtbaarheid anders dan de standaard. Misschien moet je expliciet zeggen: #pragma GCC
zichtbaarheid duwen (standaard) voordat u dergelijke koppen opneemt.

extern declaraties worden niet beïnvloed door: -fzichtbaarheid, dus er kan veel code zijn
opnieuw gecompileerd met -fzichtbaarheid=verborgen zonder aanpassingen. Dit betekent echter dat
oproepen naar extern functies zonder expliciete zichtbaarheid gebruiken de PLT, dus het is meer
effectief in gebruik __attribuut ((zichtbaarheid)) en / of #pragma GCC zichtbaarheid om het te vertellen
compiler die extern declaraties moeten als verborgen worden behandeld.

Merk op dat -fzichtbaarheid heeft invloed op C ++ vage koppelingsentiteiten. Dit betekent dat voor
bijvoorbeeld, een uitzonderingsklasse die tussen DSO's wordt gegenereerd, moet expliciet zijn
gemarkeerd met standaard zichtbaarheid zodat de type_info knooppunten worden verenigd tussen de
DNB's.

Een overzicht van deze technieken, hun voordelen en hoe ze te gebruiken is op
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-vluchtige-bitfields
Deze optie moet worden gebruikt als toegang tot vluchtige bitvelden (of een andere structuur)
velden, hoewel de compiler die typen meestal toch respecteert) een single
toegang tot de breedte van het veldtype, indien mogelijk uitgelijnd met een natuurlijke uitlijning.
Bijvoorbeeld, doelen met geheugen-mapped perifere registers kunnen al deze nodig hebben
toegangen tot 16 bits breed; met deze vlag kon de gebruiker alle perifere bit-
velden als "unsigned short" (ervan uitgaande dat short 16 bits is op deze doelen) om GCC te forceren
om 16-bits toegangen te gebruiken in plaats van misschien een efficiëntere 32-bits toegang.

Als deze optie is uitgeschakeld, gebruikt de compiler de meest efficiënte instructie. In
in het vorige voorbeeld zou dat een 32-bits laadinstructie kunnen zijn, ook al is dat wel het geval
toegangsbytes die geen enkel deel van het bitveld bevatten, of die in het geheugen zijn toegewezen
registers die geen verband houden met degene die wordt bijgewerkt.

Als het doel strikte uitlijning vereist, en het respecteren van het veldtype zou vereisen:
bij overtreding van deze uitlijning wordt een waarschuwing afgegeven. Als het veld het kenmerk "packed" heeft,
de toegang wordt gedaan zonder het veldtype te respecteren. Als het veld niet heeft
"packed" attribuut, wordt de toegang gedaan met inachtneming van het veldtype. In beide gevallen, GCC
gaat ervan uit dat de gebruiker iets weet over de doelhardware waarvan hij zich niet bewust is.

De standaardwaarde van deze optie wordt bepaald door de binaire toepassingsinterface voor:
de doelprocessor.

MILIEU


In dit gedeelte worden verschillende omgevingsvariabelen beschreven die van invloed zijn op de werking van GCC. Sommige
van hen werken door mappen of voorvoegsels op te geven die moeten worden gebruikt bij het zoeken naar verschillende soorten
van bestanden. Sommige worden gebruikt om andere aspecten van de compilatieomgeving te specificeren.

Merk op dat u ook plaatsen kunt specificeren om te zoeken met behulp van opties zoals -B, -I en -L.
Deze hebben voorrang op plaatsen die zijn gespecificeerd met behulp van omgevingsvariabelen, die op hun beurt
hebben voorrang op die gespecificeerd door de configuratie van GCC.

TAAL
LC_CTYPE
LC_MESSAGES
LC_ALL
Deze omgevingsvariabelen bepalen de manier waarop GCC lokalisatie-informatie gebruikt
waardoor GCC kan werken met verschillende nationale conventies. GCC inspecteert de locatie
categorieën LC_CTYPE en LC_MESSAGES als het is geconfigureerd om dit te doen. deze locale
categorieën kunnen worden ingesteld op elke waarde die door uw installatie wordt ondersteund. Een typische waarde is
en_GB.UTF-8 voor Engels in het Verenigd Koninkrijk gecodeerd in UTF-8.

De LC_CTYPE omgevingsvariabele specificeert karakterclassificatie. GCC gebruikt het om
bepaal de karaktergrenzen in een string; dit is nodig voor sommige multibyte
coderingen die aanhalingstekens en escape-tekens bevatten die anders zouden worden geïnterpreteerd
als een string end of escape.

De LC_MESSAGES omgevingsvariabele specificeert de taal die moet worden gebruikt bij diagnostiek
berichten.

Indien de LC_ALL omgevingsvariabele is ingesteld, overschrijft deze de waarde van LC_CTYPE en
LC_MESSAGES; anders, LC_CTYPE en LC_MESSAGES standaard ingesteld op de waarde van de TAAL
omgevingsvariabele. Als geen van deze variabelen is ingesteld, wordt GCC standaard ingesteld op traditioneel
C Engels gedrag.

TMPDIR
If TMPDIR is ingesteld, specificeert het de map die moet worden gebruikt voor tijdelijke bestanden. GCC gebruikt
tijdelijke bestanden om de uitvoer van één compilatiestadium te bewaren die moet worden gebruikt als
invoer naar de volgende fase: bijvoorbeeld de uitvoer van de preprocessor, de
invoer naar de eigenlijke compiler.

GCC_COMPARE_DEBUG
omgeving GCC_COMPARE_DEBUG is bijna gelijk aan passeren -fvergelijk-foutopsporing aan de
compiler-stuurprogramma. Zie de documentatie van deze optie voor meer details.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX is ingesteld, specificeert het een voorvoegsel dat moet worden gebruikt in de namen van de
subprogramma's uitgevoerd door de compiler. Er wordt geen schuine streep toegevoegd wanneer dit voorvoegsel wordt gecombineerd
met de naam van een subprogramma, maar u kunt een voorvoegsel opgeven dat eindigt met een schuine streep als
u dat wenst.

If GCC_EXEC_PREFIX niet is ingesteld, zal GCC proberen een geschikt voorvoegsel te vinden voor
gebruiken op basis van de padnaam waarmee het werd aangeroepen.

Als GCC het subprogramma met het opgegeven voorvoegsel niet kan vinden, probeert het te zoeken in de
gebruikelijke plaatsen voor het subprogramma.

De standaardwaarde van GCC_EXEC_PREFIX is voorvoegsel/lib/gcc/ WAAR voorvoegsel is het voorvoegsel voor
de geïnstalleerde compiler. Vaak voorvoegsel is de waarde van "prefix" toen je de . uitvoerde
configureer scripts.

Andere voorvoegsels gespecificeerd met -B hebben voorrang op dit voorvoegsel.

Dit voorvoegsel wordt ook gebruikt voor het vinden van bestanden zoals: crt0.o die worden gebruikt om te linken.

Bovendien wordt het voorvoegsel op een ongebruikelijke manier gebruikt bij het vinden van de te doorzoeken mappen
voor header-bestanden. Voor elk van de standaardmappen waarvan de naam normaal begint
Met /usr/local/lib/gcc (meer precies, met de waarde van GCC_INCLUDE_DIR), probeert GCC
dat vervangen dat begint met het opgegeven voorvoegsel om een ​​alternatieve map te produceren
naam. Dus, met -Bfoo/, gaat GCC zoeken foe/bar waar het normaal zou zoeken
/usr/local/lib/bar. Deze alternatieve mappen worden eerst doorzocht; de standaard
mappen komen daarna. Als een standaarddirectory begint met de geconfigureerd voorvoegsel harte
de waarde van voorvoegsel is vervangen door GCC_EXEC_PREFIX bij het zoeken naar header-bestanden.

COMPILER_PATH
De waarde van COMPILER_PATH is een door dubbele punten gescheiden lijst van mappen, net als PATH.
GCC probeert de aldus gespecificeerde mappen bij het zoeken naar subprogramma's, als dat niet lukt
vind de subprogramma's met GCC_EXEC_PREFIX.

LIBRARY_PATH
De waarde van LIBRARY_PATH is een door dubbele punten gescheiden lijst van mappen, net als PATH.
Wanneer geconfigureerd als een native compiler, probeert GCC de aldus gespecificeerde mappen wanneer:
zoeken naar speciale linker-bestanden, als het ze niet kan vinden met behulp van GCC_EXEC_PREFIX.
Koppelen met GCC gebruikt deze mappen ook bij het zoeken naar gewone bibliotheken
voor de -l optie (maar mappen gespecificeerd met -L eerst komen).

TAAL
Deze variabele wordt gebruikt om locale-informatie door te geven aan de compiler. Een manier waarop
deze informatie wordt gebruikt om te bepalen welke tekenset moet worden gebruikt wanneer teken
letterlijke, letterlijke tekenreeksen en opmerkingen worden geparseerd in C en C++. Wanneer de compiler is
geconfigureerd om multibyte-tekens toe te staan, de volgende waarden voor: TAAL zijn
erkend:

C-JIS
Herken JIS-tekens.

C-SJIS
Herken SJIS-tekens.

C-EUCJP
Herken EUCJP-tekens.

If TAAL niet is gedefinieerd, of als het een andere waarde heeft, dan zal de compiler gebruiken
mblen en mbtowc zoals gedefinieerd door de standaard locale om multibyte te herkennen en te vertalen
tekens.

Sommige aanvullende omgevingsvariabelen beïnvloeden het gedrag van de preprocessor.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
De waarde van elke variabele is een lijst met mappen gescheiden door een speciaal teken, veel
als PATH, waarin u naar headerbestanden kunt zoeken. Het bijzondere karakter,
"PATH_SEPARATOR", is doelafhankelijk en wordt bepaald tijdens het bouwen van de GCC. Voor Microsoft
Op Windows gebaseerde doelen is het een puntkomma, en voor bijna alle andere doelen is het een
dikke darm.

CPATH specificeert een lijst met te doorzoeken mappen alsof deze is opgegeven met -I, Maar
na alle paden gegeven met -I opties op de opdrachtregel. Deze omgevingsvariabele
wordt gebruikt, ongeacht welke taal wordt voorbewerkt.

De overige omgevingsvariabelen zijn alleen van toepassing bij het voorbewerken van de specifieke
taal aangegeven. Elk specificeert een lijst met mappen die moeten worden doorzocht alsof
gespecificeerd met -isysteem, maar na alle paden gegeven met -isysteem opties op de
opdrachtregel.

In al deze variabelen instrueert een leeg element de compiler om zijn huidige . te doorzoeken
werkmap. Lege elementen kunnen aan het begin of einde van een pad verschijnen. Voor
bijvoorbeeld, als de waarde van CPATH is ":/special/include", dat hetzelfde effect heeft als
-IK. -Ik/speciaal/omvat.

DEPENDENCIES_OUTPUT
Als deze variabele is ingesteld, specificeert de waarde ervan hoe afhankelijkheden moeten worden uitgevoerd voor Make based
op de niet-systeemheaderbestanden die door de compiler worden verwerkt. Systeemkopbestanden zijn
genegeerd in de afhankelijkheidsuitvoer.

De waarde van DEPENDENCIES_OUTPUT kan gewoon een bestandsnaam zijn, in welk geval de Make-regels
worden naar dat bestand geschreven, waarbij de doelnaam wordt geraden uit de naam van het bronbestand. Of de
waarde kan de vorm hebben filet doel, in welk geval de regels naar het bestand worden geschreven filet
gebruik doel als de doelnaam.

Met andere woorden, deze omgevingsvariabele is gelijk aan het combineren van de opties -MM
en -MF, met een optionele -MT schakelen ook.

SUNPRO_DEPENDENCIES
Deze variabele is hetzelfde als DEPENDENCIES_OUTPUT (zie hierboven), behalve dat systeem
header-bestanden worden niet genegeerd, dus het impliceert: -M dan -MM. Echter, de
afhankelijkheid van het hoofdinvoerbestand wordt weggelaten.

Gebruik g++-4.7 online met onworks.net-services


Gratis servers en werkstations

Windows- en Linux-apps downloaden

  • 1
    Turkse devops
    Turkse devops
    TurkDevOps en kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Team
    Tarafunda desteklenmektir..
    Kenmerken:https://github.com/turkdevopshttps://turkdevops.g...
    Turkdevops downloaden
  • 2
    asamdf
    asamdf
    *asammdf* is een snelle Python-parser en
    redacteur voor ASAM (Association for
    Standaardisatie van automatisering en
    Meetsystemen) MDF / MF4
    (Meetgegevensformaat...
    Asammdf downloaden
  • 3
    LAME (lame is geen mp3-encoder)
    LAME (lame is geen mp3-encoder)
    LAME is een educatief hulpmiddel om te gebruiken
    voor meer informatie over MP3-codering. De
    doel van het LAME-project is om te verbeteren
    de psycho-akoestiek, kwaliteit en snelheid
    van MP...
    LAME downloaden (Lame is geen MP3-encoder)
  • 4
    wxPython
    wxPython
    Een set Python-uitbreidingsmodules die
    verpak de platformonafhankelijke GUI-klassen van
    wxWidgets.. Publiek: Ontwikkelaars. Gebruiker
    interface: X Window-systeem (X11), Win32 ...
    WxPython downloaden
  • 5
    packfilemanager
    packfilemanager
    Dit is de bestandsbeheerder van het Total War-pakket
    project, vanaf versie 1.7. EEN
    korte introductie in Warscape
    modificatie: ...
    Packfilemanager downloaden
  • 6
    IPerf2
    IPerf2
    Een tool voor netwerkverkeer om te meten
    TCP- en UDP-prestaties met metrische gegevens
    rond zowel doorvoer als latentie. De
    doelen zijn onder meer het onderhouden van een actieve
    iperf kabeljauw...
    IPerf2 downloaden
  • Meer "

Linux-commando's

Ad