InglesPransesEspanyol

Ad


OnWorks favicon

g++-4.7 - Online sa Cloud

Patakbuhin ang g++-4.7 sa OnWorks na libreng hosting provider sa Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

Ito ang command na g++-4.7 na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

PROGRAMA:

NAME


gcc - GNU project C at C++ compiler

SINOPSIS


gcc [-c|-S|-E] [-std=pamantayan]
[-g] [-pg] [-Oantas]
[-Wbalaan...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-fopsyon...] [-mmachine-opsyon...]
[-o outfile] [@file] infile...

Ang mga pinakakapaki-pakinabang na opsyon lamang ang nakalista dito; tingnan sa ibaba para sa natitira. g ++ tumatanggap
karamihan sa parehong mga pagpipilian bilang gcc.

DESCRIPTION


Kapag nag-invoke ka ng GCC, karaniwan itong nagsasagawa ng preprocessing, compilation, assembly at linking.
Ang "pangkalahatang mga opsyon" ay nagbibigay-daan sa iyo na ihinto ang prosesong ito sa isang intermediate na yugto. Para sa
halimbawa, ang -c sinasabi ng opsyon na huwag patakbuhin ang linker. Pagkatapos ang output ay binubuo ng object
mga file na output ng assembler.

Ang iba pang mga opsyon ay ipinapasa sa isang yugto ng pagproseso. Kinokontrol ng ilang mga opsyon ang
preprocessor at iba pa ang compiler mismo. Ngunit ang iba pang mga opsyon ay kumokontrol sa assembler at
linker; karamihan sa mga ito ay hindi nakadokumento dito, dahil bihira mong gamitin ang alinman sa mga ito.

Karamihan sa mga opsyon sa command-line na magagamit mo sa GCC ay kapaki-pakinabang para sa mga C program; kailan
Ang isang opsyon ay kapaki-pakinabang lamang sa ibang wika (karaniwan ay C++), ang paliwanag ay nagsasabi nito
tahasan. Kung ang paglalarawan para sa isang partikular na opsyon ay hindi nagbabanggit ng pinagmulan
wika, maaari mong gamitin ang opsyong iyon sa lahat ng sinusuportahang wika.

Ang gcc tumatanggap ang program ng mga opsyon at mga pangalan ng file bilang mga operand. Maraming mga opsyon ang may multi-
mga pangalan ng titik; samakatuwid maramihang mga pagpipilian sa solong titik ay maaaring hindi mapangkat: -dv ay lubos na
Iba sa -d -v.

Maaari mong paghaluin ang mga pagpipilian at iba pang mga argumento. Para sa karamihan, ang order na iyong ginagamit ay hindi
bagay. Ang order ay mahalaga kapag gumamit ka ng ilang mga opsyon ng parehong uri; halimbawa, kung
tukuyin mo -L higit sa isang beses, ang mga direktoryo ay hinahanap sa pagkakasunud-sunod na tinukoy. Gayundin,
ang paglalagay ng -l makabuluhan ang pagpipilian.

Maraming mga pagpipilian ang may mahabang pangalan na nagsisimula sa -f o may -W---Halimbawa,
-fmove-loop-invariants, -Wformat at iba pa. Karamihan sa mga ito ay may parehong positibo at negatibo
mga form; ang negatibong anyo ng -ffoo ay magiging -fno-foo. Ang manwal na ito ay nagdodokumento lamang ng isa sa
ang dalawang form na ito, alinman ang hindi default.

Opsyon


Opsyon Buod
Narito ang isang buod ng lahat ng mga opsyon, na nakapangkat ayon sa uri. Ang mga paliwanag ay nasa mga sumusunod
seksyon.

Pangkalahatang Options
-c -S -E -o file -walang-canonical-prefix -pipe -pass-exit-codes -x wika -v
-### - Tumulong[=klase[, ...]] --target-tulong --bersyon -pambalot @file -fplugin=file
-fplugin-arg-pangalan=arg -fdump-ada-spec[-payat] -fdump-go-spec=file

C Wika Options
-ansi -std=pamantayan -fgnu89-inline -aux-info filename
-fallow-parameterless-variadic-functions -fno-asm -fno-buitin -fno-built-tungkulin
-fhosted -pagkakasundo -fopenmp -fms-extension -fplan9-extension -trigraphs
-no-integrated-cpp -tradisyonal -tradisyonal-cpp -fallow-single-precision
-fcond-mismatch -flax-vector-conversions -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C + + Wika Options
-fabi-bersyon=n -fno-access-control -fcheck-bago -fconserve-space
-fconstexpr-depth=n -ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs
-para sa saklaw -fno-para sa saklaw -fno-gnu-mga keyword -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-extension
-fno-nonansi-builtins -fnothrow-opt -fno-operator-pangalan -fno-optional-diags
-mapagpasensya -fno-pretty-templates -frepo -fno-rtti -fstats -ftemplate-depth=n
-fno-threadsafe-statics -fuse-cxa-atexit -fno-mahina -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -Wabi -Wconversion-null
-Wctor-dtor-privacy -Wdelete-non-virtual-dtor -Wnarrowing -Wnoexcept
-Wnon-virtual-dtor -Wreorder -Weffc++ -Wstrict-null-sentinel
-Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions
-Wsign-promo

Layunin-C at Layunin-C++ Wika Options
-fconstant-string-class=pangalan ng klase -fgnu-runtime -fnext-runtime -fno-nil-receiver
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-exceptions
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept -Wno-protocol -Wselector -Wstrict-selector-match
-Wundeclared-selector

Wika Malaya Options
-fmessage-haba=n -fdiagnostics-show-location=[minsan|bawat linya]
-fno-diagnostics-show-option

babala Options
-fsyntax-lamang -fmax-errors=n -pedantic -pedantic-errors -w -Wextra -Pader
-Waddress -Waggregate-return -Warray-bounds -Wno-mga katangian
-Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual
-Wchar-subscripts -Wclobbered -Wcomment -Wconversion -Wcoverage-mismatch -Wno-cpp
-Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero
-Wdouble-promosyon -Wempty-body -Wenum-kumpara -Wno-endif-label -Werror -Werror=*
-Wfatal-mga pagkakamali -Wfloat-pantay -Wformat -Wformat=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-hindi literal -Wformat-seguridad -Wformat-y2k
-Wframe-mas malaki-kaysa=Len -Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int
-Winit-sarili -Winline -Wmaybe-uninitialized -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=Len -Wunsafe-loop-optimizations
-Wlogical-op -Wlong-long -Wmain -Wmaybe-uninitialized -Wmissing-braces
-Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs
-Wno-mudflap -Wno-multichar -Wnonnull -Wno-overflow -Woverlength-strings -Nakabalot
-Wpacked-bitfield-compat -Wpadded -Mga panaklong -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
-Wreturn-type -Wsequence-point -Wshadow -Wsign-ihambing -Wsign-conversion
-Wstack-tagapagtanggol -Wstack-usage=Len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overflow -Wstrict-overflow=n -Wsuggest-attribute=[dalisay|const|Walang balikan]
-Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand -Wsystem-header -Wtrampolines
-Wtrigraphs -Wtype-limitasyon -Wundef -Wuninitialized -Wunknown-pragmas -Wno-pragmas
-Wunsuffixed-float-constants -Wunused -Wunused-function -Wunused-label
-Wunused-local-typedefs -Wunused-parameter -Wno-unused-resulta -Wunused-halaga
-Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
-Wvariadic-macros -Wvector-operasyon-pagganap -Wvla -Wvolatile-register-var
-Magsulat-mga string -Wzero-bilang-null-pointer-constant

C at Layunin-C-lamang babala Options
-Wbad-function-cast -Wmissing-deklarasyon -Wmissing-parameter-type
-Wmissing-prototypes -Wnested-externs -Wold-style-deklarasyon -Wold-style-kahulugan
-Mahigpit na mga prototype -Wtradisyonal -Wtradisyonal-pagbabagong-loob
-Wdeclaration-after-statement -Wpointer-sign

Pag-debug Options
-dtitik -dumpspecs -dumpmachine -dumpversion -fdbg-cnt-list -fdbg-cnt=kontra-
listahan ng halaga -fdisable-ipa-pass_name -fdisable-rtl-pass_name -fdisable-rtl-pumasa-
pangalan=hanay-listahan -fdisable-tree-pass_name -fdisable-tree-pass-name=hanay-listahan
-fdump-noaddr -fdump-walang numero -fdump-unnumbered-links -fdump-translation-unit[-n]
-fdump-class-hierarchy[-n] -fdump-ipa-lahat -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-passes -fdump-statistics -fdump-tree-lahat -fdump-tree-orihinal[-n]
-fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[-hilaw] -fdump-tree-mudflap[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-lababo -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=file -fcompare-debug[=opts] -fcompare-debug-second
-feliminate-dwarf2-dups -felimate-unused-debug-types
-felimate-unused-debug-symbols -femit-class-debug-laging -kalabanin-uri-pumasa
-kalabanin-uri-pumasa=hanay-listahan -fdebug-types-section -fmem-ulat -fpre-ipa-mem-ulat
-fpost-ipa-mem-ulat -fprofile-arcs -frandom-seed=pisi -fsched-verbose=n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-paggamit
-ftest-saklaw -ftime-ulat -fvar-tracking -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gantas -gtoggle -gcoff -gdwarf-bersyon -ggdb
-grecord-gcc-switch -gno-record-gcc-switch -gstabs -gstabs+ -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=luma=bago -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detalyadong[=spec-list] -p -pg
-print-file-name=aklatan -print-libgcc-file-name -print-multi-directory
-print-multi-lib -print-multi-os-directory -print-prog-name=programa
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -save-temps
-save-temps=cwd -save-temps=obj -panahon[=file]

Optimization Options
-falign-functions[=n] -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
-fassociative-math -fauto-inc-dec -fbranch-probability -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fbtr-bb-eksklusibo -fcaller-nagse-save -fcheck-data-deps
-fcombine-stack-adjustments -fconserve-stack -fcompare-elim -fcprop-nagparehistro
-fcrossjumping -fcse-follow-jumps -fcse-skip-block -fcx-fortran-rules
-fcx-limited-range -fdata-seksyon -fdce -fdelayed-branch -fdelete-null-pointer-checks
-fdevirtualize -fdse -takot-inlining -fipa-sra -fexpensive-optimizations
-ffat-lto-mga bagay -ffast-math -ffinite-math-lamang -float-store
-fexcess-precision=estilo -fforward-propagate -ffp-contract=estilo -ffunction-seksyon
-fgcse -fgcse-pagkatapos-reload -fgcse-las -fgcse-lm -fgraphite-pagkakakilanlan -fgcse-sm
-fif-conversion -fif-conversion2 -findirect-inlining -finline-function
-finline-functions-called-once -finline-limit=n -finline-small-functions -fipa-cp
-fipa-cp-clone -fipa-matrix-reorg -fipa-pta -fipa-profile -fipa-pure-const
-fipa-reference -fira-algorithm=algorithm -fira-rehiyon=rehiyon -fira-loop-presyon
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -fivopts
-fkeep-inline-functions -fkeep-static-consts -floop-block -floop-flatten
-floop-interchange -floop-strip-mine -floop-parallelize-lahat -flto
-flto-compression-level -flto-partition=algae -flto-ulat -fmerge-all-constant
-fmerge-constant -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants
fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline
-fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zero -fno-toplevel-reorder -fno-trap-math
-fno-zero-initialized-sa-bss -fomit-frame-pointer -foptimize-register-move
-foptimize-sibling-calls -fpartial-inlining -fpeel-loops -fpredictive-commoning
-fprefetch-loop-arrays -fprofile-pagwawasto -fprofile-dir=landas -fprofile-bumuo
-fprofile-generate=landas -fprofile-gamitin -fprofile-use=landas -fprofile-mga halaga
-freciprocal-math -libre -fregmove -frename-register -freorder-block
-freorder-block-and-partition -freorder-function -frerun-cse-after-loop
-freschedule-modulo-scheduled-loops -frounding-math -fsched2-use-superblocks
-fsched-presyon -fsched-spec-load -fsched-spec-load-delikado
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-group-heuristic
-fsched-critical-path-heuristic -fsched-spec-insn-heuristic -fsched-rank-heuristic
-fsched-last-insn-heuristic -fsched-dep-count-heuristic -fschedule-insns
-fschedule-insns2 -fsection-anchor -fselective-scheduling -fselective-scheduling2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fstack-tagapagtanggol -fstack-protector-lahat -mahigpit-aliasing
-mahigpit-apaw -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-free-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -free-copy-prop
-free-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-free-fre -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -free-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-parallelize-loops=n
-free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc -free-lababo -ftree-sra
-free-switch-conversion -free-tail-merge -ftree-ter -ftree-vect-loop-bersyon
-free-vectorize -ftree-vrp -funit-sa-isang-panahon -funroll-all-loops -funroll-loops
-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb -fbuong-programa -fwpa
-fuse-ld=Link -fuse-linker-plugin --param pangalan=halaga -O -O0 -O1 -O2 -O3 -Os
-Ofast

Preprocessor Options
-Atanong=sagutin -MAY-tanong[=sagutin] -C -DD -dI -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -isama file -imacros file -iprefix file -iwithprefix dir
-iwithprefixbefore dir -isystem dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory
-mapa muli -trigraphs -undef -Umacro -Wp,opsyon -Xpreprocessor opsyon

Assembler Opsyon
-Wa,opsyon -Xassembler opsyon

Link Options
object-file-name -laklatan -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic -s
-static -static-libgcc -static-libstdc++ -ibinahagi -shared-libgcc -simboliko -T script
-Wl,opsyon -Xlinker opsyon -u simbolo

Directory Options
-Bunlapi -Idir -iplugindir=dir -iquotedir -Ldir -specs=file -Ako- --sysroot=dir

Makina Umaasa Options
AAArch64 Options -big-endian -mlittle-endian -mggeneral-regs-lamang -mcmodel=maliit
-mcmodel=maliit -mcmodel=malaki -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=tradisyonal -martsa=pangalan
-mcpu=pangalan -mtune=pangalan

Adapeva pista ng tatlong hari Options -mhalf-reg-file -mprefer-short-insn-regs -mbranch-cost=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=num -mround-pinakalapit -mlong-tawag -mshort-calls -msmall16 -mfp-mode=paraan
-mvect-doble -max-vect-align=num -msplit-vecmove-maaga -m1reg-reg

Braso Options -mapcs-frame -mno-apcs-frame -mabi=pangalan -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -big-endian
-mwords-little-endian -mfloat-abi=pangalan -mfpe -mfp16-format=pangalan -mthumb-interwork
-mno-thumb-interwork -mcpu=pangalan -martsa=pangalan -mfpu=pangalan -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-tawag -mno-mahabang-tawag -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-function-name -thumb -marm -mtpcs-frame
-mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking -mtp=pangalan
-mtls-dialect=dialect -mword-relocations -mfix-cortex-m3-ldrd -munaligned-access
-mneon-para-64bits

AVR Options -mmcu=mcu -maccumulate-args -mbranch-cost=gastos -mcall-prologues -mint8
-mno-interrupts -magpahinga -mshort-calls -mstrict-X -mtiny-stack

Blackfin Options -mcpu=CPU[-sirevision] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-anomalya -mno-specld-anomalya -mcsync-anomalya
-mno-csync-anomalya -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-data -mno-sep-data -mlong-tawag -mno-mahabang-tawag
-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb

C6X Options -big-endian -mlittle-endian -martsa=CPU -msim -msdata=uri ng sdata

CRIS Options -mcpu=CPU -martsa=CPU -mtune=CPU -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects
-mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit
-mno-prologue-epilogue -mno-gotplt - melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-workaround -mno-mul-bug-workaround

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

Darwin Options -all_load -allowable_client -arko -arch_errors_fatal -arch_only
-bind_at_load -bundle -bundle_loader -Pangalan ng kliyente -compatibility_version
-kasalukuyang_bersyon -dead_strip -dependency-file -dylib_file -dylinker_install_name
-dynamic -dynamiclib -exported_symbols_list -filelist -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -sa loob -install_name -keep_private_externs -multi_module
-multiply_defined -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezero_size -prebind -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobjectsymbols -bakit nagload -seg1addr -sectcreate
-sectobjectsymbols -sektor -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -iisang_module -static -sub_library -sub_umbrella
-twolevel_namespace -payong -hindi natukoy -unexported_symbols_list
-weak_reference_mismatches -whatsloaded -F -gused -busog -mmacosx-version-min=bersyon
-mkernel -mone-byte-bool

Disyembre Alpha Options -mno-fp-regs -msoft-float -malpha-as -mgas -meeee
-meeee-with-inexact -meeee-conformant -mfp-trap-mode=paraan -mfp-rounding-mode=paraan
-mtrap-precision=paraan -mbuild-constant -mcpu=uri ng cpu -mtune=uri ng cpu -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -meexplicit-relocs -msmall-data -mlarge-data
-msmall-text -mlarge-text -mmemory-latency=oras

Disyembre Alpha/VMS Options -mvms-return-codes -mdebug-main=unlapi -mmalloc64

FR30 Options -msmall-modelo -mno-lsim

FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdoble -mno-doble -mmedia -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
-mlinked-fp -mlong-tawag -malign-label -mlibrary-pic -macc-4 -macc-8 -pack
-mno-pack -mno-flag -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=CPU

GNU / Linux Options -mglibc -muclibc -mbionic -android -tno-android-cc -tno-android-ld

H8 / 300 Options -magpahinga -mh -MS -mn -mint32 -malign-300

HPPA Options -martsa=uri ng arkitektura -big-switch -mdisable-fpregs
-i-disable-indexing -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld
-mfixed-range=rehistro-saklaw -mjump-in-delay -mlinker-opt -mlong-tawag
-mlong-load-store -mno-malaking-switch -mno-disable-fpregs -mno-disable-indexing
-mno-fast-indirect-calls -mno-gas -mno-jump-in-delay -mno-long-load-store
-mno-portable-runtime -mno-malambot-float -mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=uri ng cpu -mspace-regs
-msio -mwsio -munix=unix-std -nolibdld -static - mga thread

i386 at x86-64 Options -mtune=uri ng cpu -martsa=uri ng cpu -mfpmath=yunit -masm=dialect
-mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd
-malign-doble -preferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mreci -mreci=opt -mvzeroupper -mprefer-avx128 -mmmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -minline-all-stringops
-minline-stringops-dynamically -mstringop-diskarte=algae -mpush-args
-maccumulate-outgoing-args -m128bit-long-doble -m96bit-long-doble -mregparm=num
-msseregparm -mveclibabi=uri -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-modelo
-mabi=pangalan -maddress-mode=paraan -m32 -m64 -mx32 -mlarge-data-threshold=num -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaaligned-load -mavx256-split-unaaligned-store

i386 at x86-64 Windows Options -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows -fno-set-stack-executable

IA-64 Options -big-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -magrehistro-mga pangalan -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-baliw -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mfixed-range=rehistro-saklaw -mtls-size=tls-size -mtune=uri ng cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-pagkatapos-bawat-ikot
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

IA-64/VMS Options -mvms-return-codes -mdebug-main=unlapi -mmalloc64

LM32 Options -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
-msign-extend-enabled -muser-enabled

M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops -mno-align-loops
-missue-rate=numero -mbranch-cost=numero -mmodel=code-size-model-type -msdata=sdata-
uri -mno-flush-func -mflush-func=pangalan -mno-flush-trap -mflush-trap=numero -G num

M32C Options -mcpu=CPU -msim -meregs=numero

M680x0 Options -martsa=arko -mcpu=CPU -mtune=magtono -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -msshort -mno-maikli -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-data -mno-sep-data -mshared-library-id=n
-mid-shared-library -mno-id-shared-library -mxgot -mno-xgot

MCore Options -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-agad
-mno-relax-agad -mwide-bitfields -mno-wide-bitfields -m4byte-function
-mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -big-endian -m210 -m340
-mstack-increment

MeP Options -mabsdiff -mall-opts -maverage -based=n -mbitops -mc=n -mclip
-mconfig=pangalan -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatile -ml
-mleadz -mm -mminmax -mult -mno-opts -ulitin -MS -msatur -msdram -msim -msimnovec
-mtf -mtiny=n

MicroBlaze Options -msoft-float -mhard-float -msmall-divides -mcpu=CPU -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mxl-mode-modelo ng app

MIPS Options -ANG -EB -martsa=arko -mtune=arko -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicalls -mno-abicalls
-mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=uri ng fpu -msmartmips -mno-smartmips -may kapansanan-single
-mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt -naka-embed na-data
-mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-readable=pagtatakda ng -msplit-address -mno-split-address -meexplicit-relocs
-mno-explicit-relocs -mcheck-zero-division -mno-check-zero-division -mdivide-traps
-mdivide-breaks -mmemcpy -mno-memcpy -mlong-tawag -mno-mahabang-tawag -mmad -mno-baliw
-mfused-baliw -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=func -mno-flush-func -mbranch-cost=num -malamang
-mno-branch-malamang -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address

MMIX Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-mga simbolo - melf -mbranch-hula
-mno-branch-predict -mbase-address -mno-base-address -msingle-exit
-mno-single-exit

MN10300 Options -mult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=cpu-
uri -mreturn-pointer-on-d0 -mno-crt0 -magpahinga -mliw -msetlb

PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-built -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-mahal -mbranch-mura
-munix-asm -mdec-asm

picoChip Options -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-mno-inefficient-babala

PowerPC Options Tingnan ang RS/6000 at PowerPC Options.

RL78 Options -msim -mmul=wala -mmul=g13 -mmul=rl78

RS / 6000 at PowerPC Options -mcpu=uri ng cpu -mtune=uri ng cpu -mcmodel=code-modelo -makapangyarihan
-mno-kapangyarihan -kapangyarihan2 -mno-kapangyarihan2 -mpowerpc -mpowerpc64 -mno-powerpc -maltivec
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
-mnew-mnemonics -amag-mnemonics -mfull-toc -mminimal-toc -mno-fp-in-toc
-mno-sum-in-toc -m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-power
-malign-natural -msoft-float -mhard-float -marami -mno-marami -msingle-float
-mdouble-float -msimple-fpu -mstring -mno-kuwerdas -mupdate -mno-update
-mavoid-indexed-address -mno-avoid-indexed-addresses -mfused-baliw -mno-fused-madd
-mbit-align -mno-bit-align -mstrict-align -mno-strict-align -malilipat
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -maliit
-mlittle-endian -malaki -big-endian -mdynamic-no-pic -maltivec -mswdiv
-msingle-pic-base -prioritize-restricted-insns=karapatang mauna
-msched-costly-dep=dependence_type -minsert-sched-nops=pamamaraan -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=oo -misel=hindi -mspe
-mno-spe -mspe=oo -mpe=hindi -may kapansanan -mgen-cell-microcode -mwarn-cell-microcode
-mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=oo
-mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=doble -prototype -mno-prototype
-msim -mmvme -mga baliw -myellowknife -memb -msdata -msdata=opt -mvxworks -G num
-pthread -mreci -mreci=opt -mno-recipe -mrecip-katumpakan -mno-recip-precision
-mveclibabi=uri -mfriz -mno-friz -pointers-to-nested-functions
-mno-pointers-to-nested-functions -msave-toc-indirect -mno-save-toc-indirect

RX Options -m64bit-doble -m32bit-doble -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-magpahinga -mmax-constant-size= -mint-register= -mpid -msave-acc-in-interrupts

S / 390 at zSerye Options -mtune=uri ng cpu -martsa=uri ng cpu -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -naka-pack na-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-baliw -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-laki ng mstack -mstack-guard

Puntos Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-lamang -m2a-single -m2a -m3 -m3e
-m4-nofpu -m4-single-lamang -m4-iisa -m4 -m4a-nofpu -m4a-single-lamang -m4a-single
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -mdalign -magpahinga -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -meeee -mno-ieee -mbitops -misize -minline-ic_invalidate
-mpadstruct -mspace -prefergot -musermode -multcost=numero -mdiv=estratehiya
-mdivsi3_libfunc=pangalan -mfixed-range=rehistro-saklaw -madjust-unroll
-mindexed-addressing -mgettrcost=numero -mpt-naayos -maccumulate-outgoing-args
-minvalid-mga simbolo -msoft-atomic -mbranch-cost=num -mcbranchdi -mcmpeqdi -mfused-baliw
-pagpanggap-cmove

Solaris 2 Options -mimpure-text -mno-impure-text - mga thread -pthread

SPARC Options -mcpu=uri ng cpu -mtune=uri ng cpu -mcmodel=code-modelo -mmemory-modelo=mem-
modelo -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-double
-mno-unaaligned-doubles -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-pahiwatig
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=rehistro-saklaw -mea32 -mea64
-maddress-space-conversion -mno-address-space-conversion -mcache-size=laki ng cache
-matomic-update -mno-atomic-update

Sistema V Options -Qy -Qn -YP,mga landas -Ym,dir

TILE-Gx Options -mcpu=CPU -m32 -m64

TILEPro Options -mcpu=CPU -m32

V850 Options -mlong-tawag -mno-mahabang-tawag -mep -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-i-disable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -big-switch

VAX Options -mg -mgnu -munix

VxWorks Options -mrtp -hindi static -Bstatic -Bdynamic -Xbind-tamad -Xbind-ngayon

x86-64 Options Tingnan ang i386 at x86-64 Options.

Xstormy16 Options -msim

Xtensa Options -mconst16 -mno-const16 -mfused-baliw -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literal
-mno-text-section-literal -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSerye Options Tingnan ang S/390 at zSeries Options.

kodigo Henerasyon Options
-fcall-save-reg -fcall-ginamit-reg -nakadikit-reg -fexceptions -fnon-call-exceptions
-funwind-table -fasynchronous-unwind-tables -finhibit-size-directive
- mga function ng instrumento -finstrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=file,file, ... -fno-karaniwan -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-switch
-freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=reg -fstack-limit-symbol=sym
-fno-stack-limit -fsplit-stack -fleading-underscore -ftls-model=modelo -ftrapv
-fwrapv -fbounds-check - kakayahang makita -fstrict-volatile-bitfields

Options Pagkontrol ang Anak of Pagbubuhos
Maaaring magsama ng hanggang apat na yugto ang compilation: preprocessing, compilation proper, assembly at
nagli-link, palaging nasa ganoong pagkakasunud-sunod. Ang GCC ay may kakayahang mag-preprocess at mag-compile ng ilan
mga file alinman sa ilang assembler input file, o sa isang assembler input file; pagkatapos
bawat assembler input file ay gumagawa ng object file, at ang pag-link ay pinagsasama ang lahat ng object
mga file (mga bagong pinagsama-sama, at ang mga tinukoy bilang input) sa isang executable na file.

Para sa anumang ibinigay na input file, tinutukoy ng suffix ng pangalan ng file kung anong uri ng compilation
tapos na:

file.c
C source code na dapat ma-preprocess.

file.i
C source code na hindi dapat i-preprocess.

file.ii
C++ source code na hindi dapat i-preprocess.

file.m
Objective-C source code. Tandaan na dapat kang mag-link sa libobjc aklatan upang makagawa ng isang
Objective-C program na gawain.

file.mi
Objective-C source code na hindi dapat i-preprocess.

file.mm
file.M
Layunin-C++ source code. Tandaan na dapat kang mag-link sa libobjc library na gagawin
isang Objective-C++ program work. Tandaan na .M ay tumutukoy sa literal na kapital na M.

file.mii
Objective-C++ source code na hindi dapat i-preprocess.

file.h
C, C++, Objective-C o Objective-C++ header file na gagawing precompiled
header (default), o C, C++ header file na gagawing Ada spec (sa pamamagitan ng
-fdump-ada-spec lumipat).

file. Cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C
C++ source code na dapat ma-preprocess. Tandaan na sa .cxx, ang huling dalawang titik
dapat parehong literal x. Gayundin, .C tumutukoy sa literal na kapital C.

file.mm
file.M
Objective-C++ source code na dapat na na-preprocess.

file.mii
Objective-C++ source code na hindi dapat i-preprocess.

file.hh
file.H
file.hp
file.hxx
file.hpp
file.HPP
file.h++
file.tcc
C++ header file na gagawing precompiled header o Ada spec.

file.f
file.para sa
file.ftn
Inayos ang form na Fortran source code na hindi dapat i-preprocess.

file.F
file.PARA
file.fpp
file.FPP
file.FTN
Fixed form Fortran source code na dapat iproseso (na may tradisyonal
preprocessor).

file.f90
file.f95
file.f03
file.f08
Libreng form na Fortran source code na hindi dapat i-preprocess.

file.F90
file.F95
file.F03
file.F08
Libreng form na Fortran source code na dapat ma-preprocessed (na may tradisyonal
preprocessor).

file.go
Pumunta sa source code.

file.mga ad
May source code file na naglalaman ng deklarasyon ng unit ng library (isang deklarasyon ng a
package, subprogram, o generic, o isang generic instantiation), o isang library unit
pagpapalit ng pangalan ng deklarasyon (isang package, generic, o subprogram na deklarasyon sa pagpapalit ng pangalan). ganyan
tinatawag din ang mga file panoorin.

file.adb
May source code file na naglalaman ng isang library unit body (isang subprogram o package body).
Ang ganitong mga file ay tinatawag din katawan.

file.s
Code ng assembler.

file.S
file.sx
Assembler code na dapat ma-preprocess.

iba
Isang object file na ipapakain nang diretso sa pag-link. Anumang pangalan ng file na hindi nakikilala
ang suffix ay ginagamot sa ganitong paraan.

Maaari mong tahasang tukuyin ang input na wika gamit ang -x opsiyon:

-x wika
Tahasang tukuyin ang wika para sa mga sumusunod na input file (sa halip na hayaan ang
compiler pumili ng isang default batay sa suffix ng pangalan ng file). Nalalapat ang opsyong ito sa lahat
sumusunod na mga input file hanggang sa susunod -x opsyon. Mga posibleng halaga para sa wika ay:

c c-header na cpp-output
c++ c++-header c++-cpp-output
layunin-c layunin-c-header layunin-c-cpp-output
layunin-c++ layunin-c++-header layunin-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
Dyaba

-x wala
I-off ang anumang detalye ng isang wika, para mapangasiwaan ang mga kasunod na file
ayon sa kanilang mga suffix ng pangalan ng file (bilang sila ay kung -x hindi pa nagagamit).

-pass-exit-codes
Karaniwan ang gcc lalabas ang program na may code na 1 kung anumang yugto ng compiler
nagbabalik ng hindi matagumpay na return code. Kung tinukoy mo -pass-exit-codes, ang gcc programa
sa halip ay babalik na may pinakamataas na error ayon sa numero na ginawa ng anumang yugto na bumalik
isang indikasyon ng error. Ang C, C++, at Fortran frontend ay nagbabalik ng 4, kung isang panloob
Nagkaroon ng error sa compiler.

Kung gusto mo lamang ng ilan sa mga yugto ng compilation, maaari mong gamitin -x (o mga suffix ng filename)
sabihin gcc kung saan magsisimula, at isa sa mga pagpipilian -c, -S, O -E para sabihin kung saan gcc ay upang
huminto. Tandaan na ang ilang kumbinasyon (halimbawa, -x cpp-output -E) magturo gcc gawin
wala talaga.

-c I-compile o tipunin ang mga source file, ngunit huwag i-link. Ang yugto ng pag-uugnay ay simple lang
hindi tapos. Ang pinakahuling output ay nasa anyo ng isang object file para sa bawat source file.

Bilang default, ang object file name para sa isang source file ay ginawa sa pamamagitan ng pagpapalit ng suffix .c,
.i, .s, atbp., kasama ang .o.

Ang hindi nakikilalang mga input file, na hindi nangangailangan ng compilation o assembly, ay binabalewala.

-S Huminto pagkatapos ng yugto ng tamang compilation; huwag mag-ipon. Ang output ay nasa
anyo ng isang assembler code file para sa bawat non-assembler input file na tinukoy.

Bilang default, ang pangalan ng assembler file para sa isang source file ay ginawa sa pamamagitan ng pagpapalit ng suffix
.c, .i, atbp., kasama ang .s.

Ang mga input file na hindi nangangailangan ng compilation ay binabalewala.

-E Huminto pagkatapos ng yugto ng preprocessing; huwag patakbuhin ang compiler ng maayos. Ang output ay nasa
ang anyo ng preprocessed source code, na ipinadala sa karaniwang output.

Ang mga input na file na hindi nangangailangan ng preprocessing ay binabalewala.

-o file
Ilagay ang output sa file file. Nalalapat ito anuman ang anumang uri ng output
na ginagawa, ito man ay isang executable na file, isang object file, isang assembler file o
preprocessed C code.

If -o ay hindi tinukoy, ang default ay maglagay ng executable file a.labas, ang bagay
file para sa pinagmulan.panlapi in pinagmulan.o, ang assembler file nito sa pinagmulan.s, isang precompiled
header file sa source.suffix.gch, at lahat ng preprocessed na C source sa karaniwang output.

-v I-print (sa karaniwang error na output) ang mga utos na isinagawa upang patakbuhin ang mga yugto ng
compilation. I-print din ang numero ng bersyon ng compiler driver program at ng
preprocessor at ang compiler proper.

-###
katulad -v maliban kung ang mga utos ay hindi naisakatuparan at ang mga argumento ay sinipi maliban kung sila
naglalaman lamang ng mga alphanumeric na character o "./-_". Ito ay kapaki-pakinabang para sa mga script ng shell
makuha ang mga linya ng command na binuo ng driver.

-pipe
Gumamit ng mga tubo sa halip na pansamantalang mga file para sa komunikasyon sa pagitan ng iba't ibang yugto ng
compilation. Nabigo itong gumana sa ilang system kung saan hindi nababasa ng assembler
mula sa isang tubo; ngunit ang GNU assembler ay walang problema.

- Tumulong
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na naiintindihan ng
gcc. Kung ang -v ang pagpipilian ay tinukoy din pagkatapos - Tumulong ipapasa din sa
iba't ibang proseso na hinihimok ng gcc, upang maipakita nila ang mga opsyon sa command-line
tinatanggap nila. Kung ang -Wextra ang opsyon ay tinukoy din (bago ang - Tumulong
opsyon), pagkatapos ay mga opsyon sa command-line na walang dokumentasyong nauugnay sa kanila
ipapakita rin.

--target-tulong
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na tukoy sa target
para sa bawat kasangkapan. Para sa ilang mga target, maaari ding magkaroon ng karagdagang impormasyon na partikular sa target
nakalimbag

--help={klase|[^]maging karapat-dapat}[, ...]
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na naiintindihan ng
ang compiler na umaangkop sa lahat ng tinukoy na klase at qualifier. Ito ang mga
mga suportadong klase:

mga optimizer
Ipapakita nito ang lahat ng mga opsyon sa pag-optimize na sinusuportahan ng compiler.

babala
Ipapakita nito ang lahat ng mga opsyon sa pagkontrol sa mga mensahe ng babala na ginawa ng
tagatala

target
Ipapakita nito ang mga opsyon na partikular sa target. hindi katulad ng --target-tulong opsyon
gayunpaman, ang mga opsyon na partikular sa target ng linker at assembler ay hindi magiging
ipinapakita. Ito ay dahil ang mga tool na iyon ay kasalukuyang hindi sumusuporta sa pinalawig
--tulong= Syntax.

param
Ipapakita nito ang mga halagang kinikilala ng --param pagpipilian.

wika
Ipapakita nito ang mga opsyon na sinusuportahan para sa wika, Kung saan wika ang pangalan
ng isa sa mga wikang sinusuportahan sa bersyong ito ng GCC.

pangkaraniwan
Ipapakita nito ang mga opsyon na karaniwan sa lahat ng mga wika.

Ito ang mga sinusuportahang qualifier:

undocumented
Ipakita lamang ang mga opsyon na hindi dokumentado.

sumali
Mga opsyon sa pagpapakita na kumukuha ng argumento na lumilitaw pagkatapos ng pantay na pag-sign sa parehong
tuluy-tuloy na piraso ng teksto, tulad ng: --help=target.

hiwalay
Mga opsyon sa pagpapakita na kumukuha ng argumento na lumalabas bilang hiwalay na salita kasunod ng
orihinal na opsyon, tulad ng: -o output-file.

Kaya halimbawa upang ipakita ang lahat ng mga hindi dokumentadong switch na tukoy sa target na sinusuportahan ng
ang compiler ay maaaring gamitin ang mga sumusunod:

--help=target, undocumented

Ang kahulugan ng isang qualifier ay maaaring baligtarin sa pamamagitan ng prefixing ito ng ^ karakter, kaya para sa
halimbawa upang ipakita ang lahat ng binary na mga opsyon sa babala (ibig sabihin, ang mga naka-on o naka-off
at hindi kumukuha ng argumento) na may paglalarawan, gamitin ang:

--help=warnings,^joined,^undocumented

Ang argumento sa --tulong= hindi dapat binubuo lamang ng inverted qualifiers.

Ang pagsasama-sama ng ilang mga klase ay posible, bagaman ito ay karaniwang naghihigpit sa output sa pamamagitan ng
napakarami na walang maipapakita. Ang isang kaso kung saan ito gumagana gayunpaman ay kung kailan
isa sa mga klase ay target. Kaya halimbawa upang ipakita ang lahat ng target-specific
mga opsyon sa pag-optimize ang mga sumusunod ay maaaring gamitin:

--help=target, mga optimizer

Ang --tulong= ang opsyon ay maaaring ulitin sa command line. Ang bawat sunod-sunod na paggamit ay
ipakita ang hinihiling nitong klase ng mga opsyon, na nilalaktawan ang mga nagawa na
ipinakita

Kung ang -Q lilitaw ang opsyon sa command line bago ang --tulong= opsyon, pagkatapos ay ang
descriptive text na ipinakita ni --tulong= ay nagbago. Sa halip na ilarawan ang ipinapakita
mga opsyon, ang isang indikasyon ay ibinibigay kung ang opsyon ay pinagana, hindi pinagana o nakatakda
sa isang tiyak na halaga (ipagpalagay na alam ito ng compiler sa punto kung saan ang
--tulong= ginagamit ang opsyon).

Narito ang isang pinutol na halimbawa mula sa ARM port ng gcc:

% gcc -Q -mabi=2 --help=target -c
Ang mga sumusunod na opsyon ay partikular sa target:
-mabi= 2
-mabort-on-noreturn [naka-disable]
-mapcs [naka-disable]

Ang output ay sensitibo sa mga epekto ng nakaraang mga opsyon sa command-line, kaya para sa
halimbawa posibleng malaman kung aling mga pag-optimize ang pinagana -O2 sa pamamagitan ng paggamit ng:

-Q -O2 --help=optimizers

Bilang kahalili maaari mong matuklasan kung aling mga binary optimization ang pinagana ng -O3 sa pamamagitan ng paggamit ng:

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 | pinagana ang grep

-walang-canonical-prefix
Huwag palawakin ang anumang mga simbolikong link, lutasin ang mga sanggunian sa /../ or /./, o gumawa ng landas
absolute kapag bumubuo ng isang relative prefix.

--bersyon
Ipakita ang numero ng bersyon at mga copyright ng na-invoke na GCC.

-pambalot
I-invoke ang lahat ng mga subcommand sa ilalim ng isang wrapper program. Ang pangalan ng wrapper program at
ang mga parameter nito ay ipinasa bilang isang listahan na pinaghihiwalay ng kuwit.

gcc -c tc -wrapper gdb,--args

I-invoke nito ang lahat ng mga subprogram ng gcc sa ilalim gdb --args, kaya ang panawagan ng cc1
ay gdb --args cc1 ....

-fplugin=pangalan.so
I-load ang plugin code sa file pangalan.so, ipinapalagay na isang nakabahaging bagay na dapat i-dlopen
ang compiler. Ang batayang pangalan ng nakabahaging object file ay ginagamit upang matukoy ang plugin
para sa mga layunin ng pag-parse ng argumento (Tingnan -fplugin-arg-pangalan-susi=halaga sa ibaba). Bawat isa
Dapat tukuyin ng plugin ang mga function ng callback na tinukoy sa Plugins API.

-fplugin-arg-pangalan-susi=halaga
Tukuyin ang tinatawag na argumento susi na may halaga ng halaga para sa tinatawag na plugin pangalan.

-fdump-ada-spec[-payat]
Para sa C at C++ source at isama ang mga file, bumuo ng kaukulang mga spec ng Ada.

-fdump-go-spec=file
Para sa mga input file sa anumang wika, bumuo ng kaukulang mga deklarasyon sa Go file. ito
bumubuo ng mga deklarasyon ng Go "const", "type", "var", at "func" na maaaring isang kapaki-pakinabang na paraan
upang magsimulang magsulat ng interface ng Go sa code na nakasulat sa ibang wika.

@file
Basahin ang mga opsyon sa command-line mula sa file. Ang mga opsyon na nabasa ay ipinasok sa lugar ng
orihinal @file pagpipilian Kung file ay hindi umiiral, o hindi mababasa, pagkatapos ay ang opsyon
literal na ituturing, at hindi aalisin.

Mga pagpipilian sa file ay pinaghihiwalay ng whitespace. Maaaring may kasamang whitespace na character
sa isang opsyon sa pamamagitan ng pagpapaligid sa buong opsyon sa alinman sa isa o dobleng panipi. Anuman
character (kabilang ang isang backslash) ay maaaring isama sa pamamagitan ng paglalagay ng prefix sa magiging character
kasama ng backslash. Ang file maaaring maglaman ng karagdagang @file mga pagpipilian; anuman
ang mga ganitong opsyon ay ipoproseso nang paulit-ulit.

Pinagsasama-sama C + + Programa
Karaniwang ginagamit ng mga C++ source file ang isa sa mga suffix .C, . Cc, .cpp, .CPP, .c++, .cp, O
.cxx; Madalas na ginagamit ng mga C++ header file .hh, .hpp, .H, o (para sa nakabahaging template code) .tcc, At
Ang mga preprocessed na C++ na file ay gumagamit ng suffix .ii. Kinikilala ng GCC ang mga file na may ganitong mga pangalan at
kino-compile ang mga ito bilang mga programang C++ kahit na tinawag mo ang compiler sa parehong paraan tulad ng para sa pag-compile
C programs (karaniwang may pangalan gcc).

Gayunpaman, ang paggamit ng gcc ay hindi nagdaragdag ng C++ library. g ++ ay isang programa na tumatawag sa GCC at
treats .c, .h at .i mga file bilang C++ source file sa halip na C source file maliban kung -x is
ginamit, at awtomatikong tinutukoy ang pag-link laban sa C++ library. Ang programang ito ay din
kapaki-pakinabang kapag nag-precompile ng isang C header file na may a .h extension para sa paggamit sa C++ compilations.
Sa maraming sistema, g ++ ay naka-install din na may pangalan c ++.

Kapag nag-compile ka ng mga programang C++, maaari mong tukuyin ang marami sa parehong mga opsyon sa command-line na
ginagamit mo para sa pag-compile ng mga programa sa anumang wika; o mga opsyon sa command-line na makabuluhan para sa C
at mga kaugnay na wika; o mga opsyon na makabuluhan lamang para sa mga programang C++.

Options Pagkontrol C Dialect
Kinokontrol ng mga sumusunod na opsyon ang diyalekto ng C (o mga wikang nagmula sa C, gaya ng C++,
Objective-C at Objective-C++) na tinatanggap ng compiler:

-ansi
Sa C mode, ito ay katumbas ng -std=c90. Sa C++ mode, ito ay katumbas ng
-std=c++98.

Ino-off nito ang ilang partikular na feature ng GCC na hindi tugma sa ISO C90 (kapag
pag-compile ng C code), o ng karaniwang C++ (kapag nag-compile ng C++ code), gaya ng "asm" at
"typeof" na mga keyword, at mga paunang natukoy na macro gaya ng "unix" at "vax" na tumutukoy sa
uri ng system na iyong ginagamit. Binibigyang-daan din nito ang hindi kanais-nais at bihirang ginagamit na ISO
tampok na trigraph. Para sa C compiler, hindi nito pinapagana ang pagkilala sa istilo ng C++ //
mga komento pati na rin ang "inline" na keyword.

Ang mga kahaliling keyword na "__asm__", "__extension__", "__inline__" at "__typeof__"
patuloy na magtrabaho sa kabila -ansi. Hindi mo nais na gamitin ang mga ito sa isang ISO C program,
siyempre, ngunit kapaki-pakinabang na ilagay ang mga ito sa mga file ng header na maaaring isama sa
compilations tapos na sa -ansi. Mga kahaliling paunang natukoy na macro gaya ng "__unix__" at
Available din ang "__vax__", mayroon man o wala -ansi.

Ang -ansi ang opsyon ay hindi nagiging sanhi ng mga programang hindi ISO na tanggihan nang walang bayad. Para sa
na, -pedantic ay kinakailangan bilang karagdagan sa -ansi.

Ang macro na "__STRICT_ANSI__" ay paunang natukoy kapag ang -ansi ginagamit ang opsyon. Ilang header
Maaaring mapansin ng mga file ang macro na ito at pigilin ang pagdedeklara ng ilang partikular na function o pagtukoy
ilang mga macro na hindi tinatawag ng pamantayang ISO; ito ay upang maiwasan ang pakikialam
sa anumang mga program na maaaring gumamit ng mga pangalang ito para sa iba pang mga bagay.

Mga function na karaniwang binuo ngunit walang semantics na tinukoy ng ISO C
(tulad ng "alloca" at "ffs") ay hindi mga built-in na function kapag -ansi Ginagamit.

-std=
Tukuyin ang pamantayan ng wika. Ang opsyong ito ay kasalukuyang sinusuportahan lamang kapag
pag-compile ng C o C++.

Ang compiler ay maaaring tumanggap ng ilang mga batayang pamantayan, tulad ng c90 or c++98, at mga diyalekto ng GNU
ng mga pamantayang iyon, tulad ng gnu90 or gnu++98. Sa pamamagitan ng pagtukoy ng isang batayang pamantayan, ang
tatanggapin ng compiler ang lahat ng mga programa na sumusunod sa pamantayang iyon at ang mga gumagamit ng GNU
mga extension na hindi sumasalungat dito. Halimbawa, -std=c90 naka-off ang tiyak
mga feature ng GCC na hindi tugma sa ISO C90, gaya ng "asm" at "typeof"
mga keyword, ngunit hindi ang iba pang mga extension ng GNU na walang kahulugan sa ISO C90, gaya ng
inaalis ang gitnang termino ng isang "?:" na expression. Sa kabilang banda, sa pamamagitan ng pagtukoy ng isang GNU
diyalekto ng isang pamantayan, lahat ng mga tampok na sinusuportahan ng compiler ay pinagana, kahit na ang mga iyon
binabago ng mga tampok ang kahulugan ng batayang pamantayan at ilang mahigpit na pagsunod sa mga programa
maaaring tanggihan. Ang partikular na pamantayan ay ginagamit ng -pedantic upang matukoy kung alin
Ang mga tampok ay mga extension ng GNU na ibinigay sa bersyong iyon ng pamantayan. Halimbawa -std=gnu90
-pedantic ay magbabala tungkol sa istilo ng C++ // komento, habang -std=gnu99 -pedantic gusto
hindi.

Dapat magbigay ng halaga para sa opsyong ito; posibleng mga halaga ay

c90
c89
iso9899:1990
Suportahan ang lahat ng ISO C90 programs (ilang mga extension ng GNU na sumasalungat sa ISO C90
ay may kapansanan). Katulad ng -ansi para sa C code.

iso9899:199409
ISO C90 na binago sa amendment 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Tandaan na ang pamantayang ito ay hindi pa ganap na sinusuportahan; tingnan mo
<http://gcc.gnu.org/gcc-4.7/c99status.html> para sa karagdagang impormasyon. Ang mga pangalan c9x
at iso9899:199x ay hindi na ginagamit.

c11
c1x
iso9899:2011
ISO C11, ang 2011 na rebisyon ng ISO C standard. Ang suporta ay hindi kumpleto at
pang-eksperimento. Ang pangalan c1x ay hindi na ginagamit.

gnu90
gnu89
GNU dialect ng ISO C90 (kabilang ang ilang feature ng C99). Ito ang default para sa C
code.

gnu99
gnu9x
GNU dialect ng ISO C99. Kapag ang ISO C99 ay ganap na ipinatupad sa GCC, ito ay
maging default. Ang pangalan gnu9x ay hindi na ginagamit.

gnu11
gnu1x
GNU dialect ng ISO C11. Ang suporta ay hindi kumpleto at eksperimental. Ang pangalan gnu1x
ay hindi na ginagamit.

c++98
Ang 1998 ISO C++ standard plus amendments. Katulad ng -ansi para sa C++ code.

gnu++98
GNU dialect ng -std=c++98. Ito ang default para sa C++ code.

c++11
Ang 2011 ISO C++ standard plus amendments. Ang suporta para sa C++11 ay nananatili pa rin
pang-eksperimento, at maaaring magbago sa mga hindi tugmang paraan sa mga paglabas sa hinaharap.

gnu++11
GNU dialect ng -std=c++11. Eksperimento pa rin ang suporta para sa C++11, at maaaring magbago
sa mga hindi tugmang paraan sa mga paglabas sa hinaharap.

-fgnu89-inline
Ang pagpipilian -fgnu89-inline nagsasabi sa GCC na gamitin ang tradisyonal na GNU semantics para sa "inline"
gumagana kapag nasa C99 mode.
Ang opsyong ito ay tinatanggap at binabalewala ng mga bersyon ng GCC 4.1.3 hanggang ngunit hindi kasama
4.3. Sa GCC na bersyon 4.3 at mas bago nito binabago ang gawi ng GCC sa C99 mode. Gamit
ang opsyong ito ay halos katumbas ng pagdaragdag ng katangian ng function na "gnu_inline" sa lahat
mga inline na function.

Ang pagpipilian -fno-gnu89-inline tahasang sinasabi sa GCC na gamitin ang C99 semantics para sa
"inline" kapag nasa C99 o gnu99 mode (ibig sabihin, tinutukoy nito ang default na gawi). Ito
ang opsyon ay unang suportado sa GCC 4.3. Hindi sinusuportahan ang opsyong ito sa -std=c90 or
-std=gnu90 mode.

Maaaring gamitin ang preprocessor macros na "__GNUC_GNU_INLINE__" at "__GNUC_STDC_INLINE__"
upang suriin kung aling mga semantika ang may bisa para sa mga "inline" na function.

-aux-info filename
Output sa ibinigay na filename prototyped deklarasyon para sa lahat ng mga function na ipinahayag at/o
tinukoy sa isang unit ng pagsasalin, kabilang ang mga nasa mga file ng header. Ang pagpipiliang ito ay
tahimik na binabalewala sa anumang wika maliban sa C.

Bukod sa mga deklarasyon, ipinapahiwatig ng file, sa mga komento, ang pinagmulan ng bawat deklarasyon
(source file at linya), kung ang deklarasyon ay implicit, prototype o
unprototyped (I, N para sa bago o O para sa matanda, ayon sa pagkakabanggit, sa unang karakter pagkatapos
ang numero ng linya at ang tutuldok), at kung ito ay nagmula sa isang deklarasyon o isang kahulugan
(C or F, ayon sa pagkakabanggit, sa sumusunod na character). Sa kaso ng pag-andar
kahulugan, isang K&R-style na listahan ng mga argumento na sinusundan ng kanilang mga deklarasyon ay din
ibinigay, sa loob ng mga komento, pagkatapos ng deklarasyon.

-fallow-parameterless-variadic-functions
Tanggapin ang mga variadic function na walang pinangalanang mga parameter.

Bagama't posibleng tukuyin ang gayong function, hindi ito masyadong kapaki-pakinabang
hindi posible na basahin ang mga argumento. Ito ay sinusuportahan lamang para sa C dahil ang construct na ito ay
pinapayagan ng C++.

-fno-asm
Huwag kilalanin ang "asm", "inline" o "typeof" bilang isang keyword, upang magamit ng code ang mga ito
mga salita bilang pantukoy. Maaari mong gamitin ang mga keyword na "__asm__", "__inline__" at
"__typeof__" sa halip. -ansi nagpapahiwatig -fno-asm.

Sa C++, ang switch na ito ay nakakaapekto lamang sa "typeof" na keyword, dahil ang "asm" at "inline" ay
karaniwang mga keyword. Baka gusto mong gamitin ang -fno-gnu-mga keyword bandila sa halip, na mayroon
ang parehong epekto. Sa C99 mode (-std=c99 or -std=gnu99), ang switch na ito ay nakakaapekto lamang sa
"asm" at "typeof" na mga keyword, dahil ang "inline" ay isang karaniwang keyword sa ISO C99.

-fno-buitin
-fno-built-tungkulin
Huwag makilala ang mga built-in na function na hindi nagsisimula sa __buitin_ bilang unlapi.

Karaniwang bumubuo ang GCC ng espesyal na code para pangasiwaan ang ilang partikular na built-in na function
mahusay; halimbawa, ang mga tawag sa "alloca" ay maaaring maging mga iisang tagubilin na
direktang ayusin ang stack, at ang mga tawag sa "memcpy" ay maaaring maging inline na mga loop ng kopya. Ang
ang resultang code ay madalas na parehong mas maliit at mas mabilis, ngunit dahil ang function ay tumatawag sa no
mas matagal na lumalabas bilang ganoon, hindi ka makakapagtakda ng breakpoint sa mga tawag na iyon, at hindi ka rin makapagbabago
ang pag-uugali ng mga function sa pamamagitan ng pag-link sa ibang library. Bilang karagdagan, kapag
ang isang function ay kinikilala bilang isang built-in na function, GCC ay maaaring gumamit ng impormasyon tungkol doon
function upang balaan ang tungkol sa mga problema sa mga tawag sa function na iyon, o upang makabuo ng higit pa
mahusay na code, kahit na ang resultang code ay naglalaman pa rin ng mga tawag sa function na iyon. Para sa
halimbawa, ang mga babala ay ibinigay kasama ng -Wformat para sa masamang tawag sa "printf", kapag ang "printf" ay
built in, at ang "strlen" ay kilala na hindi nagbabago ng pandaigdigang memorya.

Kasama ang -fno-built-tungkulin opsyon lamang ang built-in na function tungkulin ay hindi pinagana.
tungkulin hindi dapat magsimula sa __buitin_. Kung ang isang function ay pinangalanan na hindi built-in
sa bersyong ito ng GCC, binabalewala ang opsyong ito. Walang katumbas
-fbuitin-tungkulin opsyon; kung nais mong paganahin ang mga built-in na function nang pili kung kailan
paggamit -fno-buitin or -pagkakasundo, maaari mong tukuyin ang mga macro gaya ng:

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

-fhosted
Igiit na ang compilation ay nagaganap sa isang naka-host na kapaligiran. Ito ay nagpapahiwatig -fbuitin.
Ang isang naka-host na kapaligiran ay isa kung saan ang buong karaniwang library ay magagamit, at sa
kung aling "pangunahing" ang may uri ng pagbabalik ng "int". Ang mga halimbawa ay halos lahat maliban sa a
kernel. Ito ay katumbas ng -fno-freestanding.

-pagkakasundo
Igiit na ang compilation ay nagaganap sa isang freestanding na kapaligiran. Ito ay nagpapahiwatig
-fno-buitin. Ang isang freestanding na kapaligiran ay isa kung saan ang karaniwang aklatan ay maaaring hindi
umiiral, at ang pagsisimula ng programa ay maaaring hindi kinakailangang nasa "pangunahing". Ang pinaka-halatang halimbawa
ay isang OS kernel. Ito ay katumbas ng -fno-host.

-fopenmp
I-enable ang pangangasiwa sa mga direktiba ng OpenMP na "#pragma omp" sa C/C++ at "!$omp" sa Fortran.
Kailan -fopenmp ay tinukoy, ang compiler ay bumubuo ng parallel code ayon sa
OpenMP Application Program Interface v3.0http://www.openmp.org/>. Ang pagpipiliang ito
nagpapahiwatig -pthread, at sa gayon ay sinusuportahan lamang sa mga target na may suporta para sa
-pthread.

-fgnu-tm
Kapag ang pagpipilian -fgnu-tm ay tinukoy, ang compiler ay bubuo ng code para sa Linux
variant ng kasalukuyang Transactional Memory ABI na dokumento ng detalye ng Intel (Revision
1.1, Mayo 6 2009). Isa itong pang-eksperimentong feature na maaaring magbago ang interface
mga bersyon sa hinaharap ng GCC, habang nagbabago ang opisyal na detalye. Mangyaring tandaan na hindi
lahat ng mga arkitektura ay suportado para sa tampok na ito.

Para sa higit pang impormasyon sa suporta ng GCC para sa transactional memory,

Tandaan na ang feature na transactional memory ay hindi suportado ng mga non-call exception
(-fnon-call-exceptions).

-fms-extension
Tanggapin ang ilang hindi karaniwang mga konstruksyon na ginagamit sa mga file ng header ng Microsoft.

Sa C++ code, pinapayagan nito ang mga pangalan ng miyembro sa mga istruktura na maging katulad ng mga nakaraang uri
mga deklarasyon.

typedef int UOW;
struct ABC {
UOW UOW;
};

Ang ilang mga kaso ng hindi pinangalanang mga field sa mga istruktura at unyon ay tinatanggap lamang kasama nito
pagpipilian.

-fplan9-extension
Tanggapin ang ilang hindi karaniwang konstruksyon na ginamit sa Plan 9 code.

Ito ay nagbibigay-daan -fms-extension, pinahihintulutan ang pagpasa ng mga pointer sa mga istrukturang may anonymous
field sa mga function na umaasa sa mga pointer sa mga elemento ng uri ng field, at
mga permit na tumutukoy sa mga hindi kilalang field na ipinahayag gamit ang isang typedef. Ito ay lamang
suportado para sa C, hindi C++.

-trigraphs
Suportahan ang mga ISO C trigraph. Ang -ansi opsyon (at -std mga opsyon para sa mahigpit na ISO C
conformance) ay nagpapahiwatig -trigraphs.

-no-integrated-cpp
Nagsasagawa ng compilation sa dalawang pass: preprocessing at compiling. Pinapayagan ng pagpipiliang ito
isang user ang nagbigay ng "cc1", "cc1plus", o "cc1obj" sa pamamagitan ng -B opsyon. Ang gumagamit ay ibinigay
Ang hakbang sa pag-compile ay maaaring magdagdag ng karagdagang hakbang sa pag-preprocess pagkatapos ng normal
preprocessing ngunit bago i-compile. Ang default ay gamitin ang pinagsamang cpp
(panloob na cpp)

Magbabago ang semantics ng opsyong ito kung pinagsama ang "cc1", "cc1plus", at "cc1obj."

-tradisyonal
-tradisyonal-cpp
Dati, ang mga opsyong ito ay naging dahilan upang subukan ng GCC na tularan ang isang pre-standard na C compiler.
Sila ngayon ay sinusuportahan lamang ng -E lumipat. Ang preprocessor ay patuloy na sumusuporta
isang pre-standard na mode. Tingnan ang manual ng GNU CPP para sa mga detalye.

-fcond-mismatch
Payagan ang mga conditional na expression na may mga hindi tugmang uri sa pangalawa at pangatlong argumento.
Ang halaga ng naturang pagpapahayag ay walang bisa. Ang opsyon na ito ay hindi suportado para sa C++.

-flax-vector-conversions
Payagan ang mga implicit na conversion sa pagitan ng mga vector na may magkakaibang bilang ng mga elemento at/o
hindi tugmang mga uri ng elemento. Hindi dapat gamitin ang opsyong ito para sa bagong code.

-funsigned-char
Hayaan ang uri na "char" na hindi naka-sign, tulad ng "unsigned char".

Ang bawat uri ng makina ay may default para sa kung ano dapat ang "char". Ito ay alinman sa
"unsigned char" bilang default o gaya ng "signed char" bilang default.

Sa isip, ang isang portable na programa ay dapat palaging gumamit ng "signed char" o "unsigned char" kapag ito
depende sa signedness ng isang bagay. Ngunit maraming mga programa ang isinulat upang gamitin
plain "char" at asahan na ito ay lalagdaan, o asahan na ito ay hindi pirmado, depende sa
mga makina kung saan sila isinulat. Ang pagpipiliang ito, at ang kabaligtaran nito, ay nagbibigay-daan sa iyong gumawa ng ganoong a
gumagana ang program na may kabaligtaran na default.

Ang uri na "char" ay palaging isang natatanging uri mula sa bawat isa sa "signed char" o "unsigned
char", kahit na ang ugali nito ay palaging katulad ng isa sa dalawang iyon.

-fsigned-char
Hayaang mapirmahan ang uri na "char", tulad ng "signed char".

Tandaan na ito ay katumbas ng -fno-unsigned-char, na negatibong anyo ng
-funsigned-char. Gayundin, ang pagpipilian -fno-sign-char ay katumbas ng
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-sign-bitfields
-fno-unsigned-bitfields
Kinokontrol ng mga opsyong ito kung ang isang bit-field ay nilagdaan o hindi nalagdaan, kapag ang deklarasyon
ay hindi gumagamit ng alinman sa "nalagdaan" o "hindi nalagdaan". Bilang default, ang naturang bit-field ay nilagdaan,
dahil pare-pareho ito: ang mga pangunahing uri ng integer gaya ng "int" ay mga naka-sign na uri.

Options Pagkontrol C + + Dialect
Inilalarawan ng seksyong ito ang mga opsyon sa command-line na makabuluhan lamang para sa mga programang C++;
ngunit maaari mo ring gamitin ang karamihan sa mga opsyon ng GNU compiler anuman ang iyong wika
ang program ay nasa. Halimbawa, maaari kang mag-compile ng file na "firstClass.C" tulad nito:

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

Sa halimbawang ito, lamang -frepo ay isang opsyon para lamang sa mga C++ program; maaari mong gamitin ang
iba pang mga opsyon sa anumang wikang sinusuportahan ng GCC.

Narito ang isang listahan ng mga opsyon na lamang para sa pag-compile ng mga programang C++:

-fabi-bersyon=n
Gumamit ng bersyon n ng C++ ABI. Ang bersyon 2 ay ang bersyon ng C++ ABI na una
lumitaw sa G++ 3.4. Ang Bersyon 1 ay ang bersyon ng C++ ABI na unang lumabas sa
G++ 3.2. Ang Bersyon 0 ay palaging magiging bersyon na pinaka malapit sa C++
Pagtutukoy ng ABI. Samakatuwid, ang ABI na nakuha gamit ang bersyon 0 ay magbabago bilang ABI
naayos ang mga bug.

Ang default ay bersyon 2.

Itinutuwid ng Bersyon 3 ang isang error sa pag-mangling ng isang pare-parehong address bilang argumento ng template.

Ang Bersyon 4, na unang lumabas sa G++ 4.5, ay nagpapatupad ng karaniwang mangling para sa vector
mga uri.

Bersyon 5, na unang lumabas sa G++ 4.6, ay nagwawasto sa mangling ng attribute
const/volatile sa mga uri ng function pointer, decltype ng isang plain decl, at paggamit ng a
function na parameter sa deklarasyon ng isa pang parameter.

Ang Bersyon 6, na unang lumabas sa G++ 4.7, ay nagwawasto sa pag-uugali ng promosyon ng C++11
scoped enums at ang mangling ng template argument pack, const/static_cast, prefix ++
at --, at isang function na saklaw ng klase na ginamit bilang argumento ng template.

Tingnan din -Wabi.

-fno-access-control
I-off ang lahat ng pagsuri sa pag-access. Ang switch na ito ay pangunahing kapaki-pakinabang para sa pag-aayos ng mga bug
ang access control code.

-fcheck-bago
Suriin na ang pointer na ibinalik ng "operator new" ay hindi null bago subukan
baguhin ang inilaan na imbakan. Ang pagsusuring ito ay karaniwang hindi kailangan dahil ang C++
Ang pamantayan ay tumutukoy na ang "bagong operator" ay magbabalik lamang ng 0 kung ito ay idineklara ihagis(),
kung saan ang compiler ay palaging susuriin ang return value kahit na wala ito
opsyon. Sa lahat ng iba pang mga kaso, kapag ang "bagong operator" ay may hindi walang laman na exception
detalye, ang pagkaubos ng memorya ay senyales sa pamamagitan ng paghagis ng "std::bad_alloc". Tingnan din
bago (nothrow).

-fconserve-space
Ilagay ang hindi nasimulan o run-time-initialized global variable sa karaniwang segment, bilang
Ginagawa ni C. Makakatipid ito ng espasyo sa executable sa halaga ng hindi pag-diagnose ng duplicate
mga kahulugan. Kung nag-compile ka sa flag na ito at misteryosong nag-crash ang iyong program
pagkatapos makumpleto ang "main()", maaari kang magkaroon ng isang bagay na sinisira nang dalawang beses
dahil dalawang kahulugan ang pinagsama.

Hindi na kapaki-pakinabang ang opsyong ito sa karamihan ng mga target, ngayong naidagdag na ang suporta para sa
paglalagay ng mga variable sa BSS nang hindi ginagawang karaniwan ang mga ito.

-fconstexpr-depth=n
Itakda ang maximum na nested evaluation depth para sa C++11 constexpr function sa n. Isang limitasyon
ay kinakailangan upang makita ang walang katapusang recursion sa panahon ng patuloy na pagsusuri ng expression. Ang
minimum na tinukoy ng pamantayan ay 512.

-fdeduce-init-list
Paganahin ang pagbabawas ng isang parameter ng uri ng template bilang std::initializer_list mula sa isang brace-
nakapaloob na listahan ng initializer, ibig sabihin

template auto forward(T t) -> decltype (realfn (t))
{
bumalik realfn (t);
}

walang bisa f()
{
pasulong ({1,2}); // call forward >
}

Ang bawas na ito ay ipinatupad bilang posibleng pagpapalawig sa orihinal na iminungkahing
semantics para sa pamantayang C++11, ngunit hindi bahagi ng panghuling pamantayan, kaya nga
hindi pinagana bilang default. Hindi na ginagamit ang opsyong ito, at maaaring alisin sa hinaharap
bersyon ng G++.

-ffriend-injection
Mag-inject ng mga function ng kaibigan sa nakapaloob na namespace, upang makita ang mga ito sa labas
ang saklaw ng klase kung saan sila idineklara. Naidokumento ang mga function ng kaibigan
upang gumana sa ganitong paraan sa lumang Annotated C++ Reference Manual, at mga bersyon ng G++ dati
4.1 palaging gumagana sa ganoong paraan. Gayunpaman, sa ISO C++ isang function ng kaibigan na hindi
na ipinahayag sa isang nakapaloob na saklaw ay makikita lamang gamit ang paghahanap na umaasa sa argumento.
Ang pagpipiliang ito ay nagiging sanhi ng mga kaibigan na ma-injected bilang sila ay sa mga naunang release.

Ang opsyong ito ay para sa compatibility, at maaaring alisin sa hinaharap na release ng G++.

-fno-elide-constructors
Ang pamantayan ng C++ ay nagbibigay-daan sa isang pagpapatupad na alisin ang paggawa ng pansamantalang iyon lamang
ginagamit upang simulan ang isa pang bagay na may parehong uri. Ang pagtukoy sa opsyong ito ay hindi pinapagana
ang pag-optimize na iyon, at pinipilit ang G++ na tawagan ang tagabuo ng kopya sa lahat ng kaso.

-fno-enforce-eh-specs
Huwag bumuo ng code upang tingnan kung may paglabag sa mga detalye ng pagbubukod sa oras ng pagtakbo.
Ang pagpipiliang ito ay lumalabag sa pamantayan ng C++, ngunit maaaring maging kapaki-pakinabang para sa pagbabawas ng laki ng code sa
pagbuo ng produksyon, katulad ng pagtukoy NDEBUG. Hindi ito nagbibigay ng pahintulot ng user code
maghagis ng mga eksepsiyon na lumalabag sa mga detalye ng pagbubukod; gagawin ng compiler
nag-optimize pa rin batay sa mga pagtutukoy, kaya ang paghahagis ng hindi inaasahang pagbubukod
nagreresulta sa hindi natukoy na pag-uugali.

-para sa saklaw
-fno-para sa saklaw
If -para sa saklaw ay tinukoy, ang saklaw ng mga variable na ipinahayag sa a para-init-pahayag
ay limitado sa para loop mismo, tulad ng tinukoy ng pamantayan ng C++. Kung
-fno-para sa saklaw ay tinukoy, ang saklaw ng mga variable na ipinahayag sa a para-init-pahayag
umaabot hanggang sa dulo ng nakapaloob na saklaw, tulad ng nangyari sa mga lumang bersyon ng G++, at
iba pang (tradisyonal) na pagpapatupad ng C++.

Ang default kung alinman sa bandila ay hindi ibinigay upang sundin ang pamantayan, ngunit upang payagan at magbigay ng a
babala para sa lumang istilong code na kung hindi man ay hindi wasto, o may iba
pag-uugali.

-fno-gnu-mga keyword
Huwag kilalanin ang "typeof" bilang isang keyword, para magamit ng code ang salitang ito bilang isang
identifier. Maaari mong gamitin ang keyword na "__typeof__" sa halip. -ansi nagpapahiwatig
-fno-gnu-mga keyword.

-fno-implicit-templates
Huwag kailanman maglalabas ng code para sa mga non-inline na template na implicited (ibig sabihin, ni
gamitin); naglalabas lamang ng code para sa mga tahasang instantiations.

-fno-implicit-inline-templates
Huwag maglabas ng code para sa mga implicit na instantiation ng mga inline na template, alinman. Ang default
ay upang pangasiwaan ang mga inline sa ibang paraan upang mag-compile nang may at walang pag-optimize
kailangan ang parehong hanay ng mga tahasang instantiations.

-fno-implement-inlines
Upang makatipid ng espasyo, huwag maglabas ng mga out-of-line na kopya ng mga inline na function na kinokontrol ng
#pragma pagsasakatuparan. Magdudulot ito ng mga error sa linker kung hindi ang mga function na ito
inline kung saan man sila tinatawag.

-fms-extension
I-disable ang pedantic na babala tungkol sa mga construct na ginagamit sa MFC, gaya ng implicit int at
pagkuha ng pointer sa function ng miyembro sa pamamagitan ng hindi karaniwang syntax.

-fno-nonansi-builtins
I-disable ang mga built-in na deklarasyon ng mga function na hindi ipinag-uutos ng ANSI/ISO C. Ang mga ito
isama ang "ffs", "alloca", "_exit", "index", "bzero", "conjf", at iba pang nauugnay
function.

-fnothrow-opt
Tratuhin ang isang "throw()" na detalye ng pagbubukod na parang ito ay isang "noexcept" na detalye
upang bawasan o alisin ang laki ng teksto sa itaas na nauugnay sa isang function na walang pagbubukod
espesipikasyon. Kung ang function ay may mga lokal na variable ng mga uri na may non-trivial
mga destructors, ang detalye ng pagbubukod ay talagang gagawing mas maliit ang function
dahil ang mga EH cleanup para sa mga variable na iyon ay maaaring i-optimize. Ang semantiko
Ang epekto ay ang isang exception na itinapon sa labas ng isang function na may tulad na exception
ang pagtutukoy ay magreresulta sa isang tawag na "wakas" sa halip na "hindi inaasahang".

-fno-operator-pangalan
Huwag ituring ang mga keyword ng pangalan ng operator na "at", "bitand", "bitor", "compl", "hindi", "o"
at "xor" bilang kasingkahulugan bilang mga keyword.

-fno-optional-diags
Huwag paganahin ang mga diagnostic na sinasabi ng pamantayan na hindi kailangang ilabas ng isang compiler.
Sa kasalukuyan, ang tanging naturang diagnostic na ibinigay ng G++ ay ang isa para sa pagkakaroon ng isang pangalan
maraming kahulugan sa loob ng isang klase.

-mapagpasensya
I-downgrade ang ilang diagnostic tungkol sa nonconformant code mula sa mga error patungo sa mga babala. kaya,
paggamit -mapagpasensya ay magbibigay-daan sa ilang nonconforming code na mag-compile.

-fno-pretty-templates
Kapag ang isang mensahe ng error ay tumutukoy sa isang espesyalisasyon ng isang function na template, ang compiler
ay karaniwang magpi-print ng lagda ng template na sinusundan ng mga argumento ng template
at anumang mga typedef o typename sa lagda (hal. "void f(T) [with T = int]" sa halip
kaysa sa "void f(int)") para malinaw kung aling template ang kasangkot. Kapag may error
Ang mensahe ay tumutukoy sa isang espesyalisasyon ng isang template ng klase, aalisin ng compiler ang anuman
mga argumento ng template na tumutugma sa mga default na argumento ng template para sa template na iyon. Kung
alinman sa mga gawi na ito ay nagpapahirap na maunawaan ang mensahe ng error kaysa
mas madali, gamit -fno-pretty-templates ay hindi paganahin ang mga ito.

-frepo
Paganahin ang awtomatikong instantiation ng template sa oras ng pag-link. Ang pagpipiliang ito ay nagpapahiwatig din
-fno-implicit-templates.

-fno-rtti
Huwag paganahin ang pagbuo ng impormasyon tungkol sa bawat klase na may mga virtual na function para magamit ni
ang mga tampok ng pagkilala sa uri ng C++ run-time (Dynamic_cast at Type). Kung hindi mo gagawin
gamitin ang mga bahaging iyon ng wika, makakatipid ka ng kaunting espasyo sa pamamagitan ng paggamit ng bandilang ito. Tandaan
ang paghawak ng exception na iyon ay gumagamit ng parehong impormasyon, ngunit bubuo ito kung kinakailangan.
Ang Dynamic_cast magagamit pa rin ang operator para sa mga cast na hindi nangangailangan ng run-time
i-type ang impormasyon, ibig sabihin, nag-cast sa "void *" o sa hindi malabo na mga base class.

-fstats
Maglabas ng mga istatistika tungkol sa front-end na pagproseso sa dulo ng compilation. Ito
Ang impormasyon sa pangkalahatan ay kapaki-pakinabang lamang sa pangkat ng pagbuo ng G++.

-fstrict-enums
Pahintulutan ang compiler na mag-optimize gamit ang pagpapalagay na isang halaga ng enumerated type
maaari lamang maging isa sa mga halaga ng enumeration (tulad ng tinukoy sa pamantayan ng C++;
karaniwang, isang halaga na maaaring kinakatawan sa pinakamababang bilang ng mga bit na kailangan
kumakatawan sa lahat ng mga enumerator). Maaaring hindi wasto ang pagpapalagay na ito kung gumagamit ang program
isang cast upang i-convert ang isang arbitrary na halaga ng integer sa enumerated na uri.

-ftemplate-depth=n
Itakda ang maximum na lalim ng instantiation para sa mga klase ng template n. Isang limitasyon sa
kailangan ang lalim ng instantiation ng template para matukoy ang walang katapusang recursion sa panahon ng template
instantiation ng klase. Ang mga programang sumusunod sa ANSI/ISO C++ ay hindi dapat umasa sa maximum
depth na higit sa 17 (binago sa 1024 sa C++11). Ang default na halaga ay 900, bilang ang
maaaring maubusan ng stack space ang compiler bago maabot ang 1024 sa ilang sitwasyon.

-fno-threadsafe-statics
Huwag maglabas ng dagdag na code para magamit ang mga gawaing tinukoy sa C++ ABI para sa thread-
ligtas na pagsisimula ng mga lokal na static. Maaari mong gamitin ang opsyong ito upang bawasan ang laki ng code
bahagyang nasa code na hindi kailangang maging thread-safe.

-fuse-cxa-atexit
Magrehistro ng mga destructor para sa mga bagay na may static na tagal ng imbakan gamit ang "__cxa_atexit"
function sa halip na ang function na "atexit". Ang pagpipiliang ito ay kinakailangan para sa ganap
pagsunod sa mga pamantayan sa paghawak ng mga static na destructor, ngunit gagana lamang kung ang iyong C
Sinusuportahan ng library ang "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
Huwag gamitin ang "__cxa_get_exception_ptr" runtime routine. Magdudulot ito ng
"std::uncaught_exception" ay hindi tama, ngunit kinakailangan kung ang runtime routine ay
hindi magagamit.

-fvisibility-inlines-hidden
Ipinapahayag ng switch na ito na hindi sinusubukan ng user na ihambing ang mga pointer sa inline
function o pamamaraan kung saan ang mga address ng dalawang function ay kinuha sa magkaibang
nakabahaging mga bagay.

Ang epekto nito ay maaaring, epektibong markahan ng GCC ang mga inline na pamamaraan sa
"__attribute__ ((visibility ("nakatago")))" para hindi lumabas ang mga ito sa export
talahanayan ng isang DSO at hindi nangangailangan ng PLT indirection kapag ginamit sa loob ng DSO.
Ang pagpapagana sa opsyong ito ay maaaring magkaroon ng malaking epekto sa mga oras ng pag-load at pag-link ng isang DSO tulad nito
malawakang binabawasan ang laki ng dynamic na export table kapag naging mabigat ang library
paggamit ng mga template.

Ang pag-uugali ng switch na ito ay hindi katulad ng pagmamarka sa mga pamamaraan bilang nakatago
direkta, dahil hindi ito nakakaapekto sa mga static na variable na lokal sa function o sanhi
ang compiler upang ihinuha na ang function ay tinukoy sa isang nakabahaging bagay lamang.

Maaari mong markahan ang isang paraan bilang may tahasang pagpapakita upang pawalang-bisa ang epekto ng
lumipat para sa pamamaraang iyon. Halimbawa, kung gusto mong ihambing ang mga pointer sa a
partikular na inline na paraan, maaari mo itong markahan bilang may default na visibility. Pagmamarka ng
Ang pagsasama ng klase na may tahasang visibility ay walang epekto.

Ang mga tahasang ginawang inline na pamamaraan ay hindi naaapektuhan ng opsyong ito bilang linkage ng mga ito
maaaring tumawid sa isang nakabahaging hangganan ng library.

-fvisibility-ms-compat
Sinusubukan ng flag na ito na gumamit ng mga setting ng visibility para gawin ang C++ linkage model ng GCC
tugma sa Microsoft Visual Studio.

Ginagawa ng flag ang mga pagbabagong ito sa modelo ng linkage ng GCC:

1. Itinatakda nito ang default na visibility sa "nakatago", tulad ng -fvisibility=hidden.

2. Ang mga uri, ngunit hindi ang kanilang mga miyembro, ay hindi nakatago bilang default.

3. Ang One Definition Rule ay maluwag para sa mga uri na walang tahasang visibility
mga pagtutukoy na tinukoy sa higit sa isang magkakaibang ibinahaging bagay: mga
pinahihintulutan ang mga deklarasyon kung pinahihintulutan sila noong ang opsyong ito
hindi ginagamit.

Sa bagong code ito ay mas mahusay na gamitin -fvisibility=hidden at i-export ang mga klase na iyon
nilayon upang makita sa labas. Sa kasamaang palad, posibleng umasa ang code,
marahil hindi sinasadya, sa pag-uugali ng Visual Studio.

Kabilang sa mga kahihinatnan ng mga pagbabagong ito ay ang mga static na miyembro ng data ng parehong uri
na may parehong pangalan ngunit tinukoy sa iba't ibang mga shared object ay magiging iba, kaya
ang pagbabago ng isa ay hindi magbabago sa isa pa; at iyon ay tumuturo sa mga function na tinukoy ng mga miyembro
sa iba't ibang mga nakabahaging bagay ay maaaring hindi maghambing ng pantay. Kapag ang watawat na ito ay ibinigay, ito ay a
paglabag sa ODR upang tukuyin ang mga uri na may parehong pangalan sa ibang paraan.

-fno-mahina
Huwag gumamit ng mahinang suporta sa simbolo, kahit na ito ay ibinigay ng linker. Bilang default, G++
gagamit ng mga mahihinang simbolo kung magagamit ang mga ito. Ang pagpipiliang ito ay umiiral lamang para sa pagsubok, at
hindi dapat gamitin ng mga end-user; magreresulta ito sa mababang code at walang benepisyo.
Maaaring alisin ang opsyong ito sa hinaharap na release ng G++.

-nostdinc++
Huwag maghanap ng mga file ng header sa mga karaniwang direktoryo na partikular sa C++, ngunit gawin mo
hanapin pa rin ang iba pang karaniwang mga direktoryo. (Ginagamit ang opsyong ito kapag binubuo ang
C++ library.)

Bilang karagdagan, ang mga opsyon sa pag-optimize, babala, at pagbuo ng code na ito ay may mga kahulugan lamang
para sa mga programang C++:

-fno-default-inline
Wag umasa inline para sa mga function na tinukoy sa loob ng saklaw ng klase.
Tandaan na ang mga function na ito ay magkakaroon ng linkage tulad ng mga inline na function; hindi lang nila gagawin
maging inline bilang default.

-Wabi (C, Objective-C, C++ at Objective-C++ lang)
Magbabala kapag nakabuo ang G++ ng code na malamang na hindi tugma sa vendor-neutral
C++ ABI. Kahit na ang isang pagsisikap ay ginawa upang balaan ang tungkol sa lahat ng mga naturang kaso, mayroon
marahil ang ilang mga kaso na hindi binigyan ng babala, kahit na ang G++ ay bumubuo
hindi tugmang code. Maaaring mayroon ding mga kaso kung saan naglalabas ng mga babala kahit na ang
magiging tugma ang code na nabuo.

Dapat mong muling isulat ang iyong code upang maiwasan ang mga babalang ito kung nag-aalala ka tungkol sa
katotohanan na ang code na nabuo ng G++ ay maaaring hindi binary compatible sa code na binuo ni
iba pang mga compiler.

Ang mga kilalang hindi pagkakatugma sa -fabi-bersyon=2 (ang default) ay kinabibilangan ng:

· Ang isang template na may hindi uri na parameter ng template ng uri ng sanggunian ay sira
hindi tama:

panlabas int N;
template struct S {};
walang bisa n (S ) {2}

Ito ay naayos sa -fabi-bersyon=3.

· Ang mga uri ng vector ng SIMD na idineklara gamit ang "__attribute ((vector_size))" ay ginulo sa isang
non-standard na paraan na hindi pinapayagan ang overloading ng mga function na kumukuha ng mga vectors
ng iba't ibang laki.

Ang mangling ay napalitan -fabi-bersyon=4.

Ang mga kilalang hindi pagkakatugma sa -fabi-bersyon=1 ay kinabibilangan ng:

· Maling paghawak ng tail-padding para sa mga bit-field. Maaaring subukan ng G++ na mag-pack ng data
sa parehong byte bilang isang base class. Halimbawa:

struct A { virtual void f(); int f1 : 1; };
struct B : pampublikong A { int f2 : 1; };

Sa kasong ito, ilalagay ng G++ ang "B::f2" sa parehong byte bilang"A::f1"; iba pang mga compiler
ay hindi. Maiiwasan mo ang problemang ito sa pamamagitan ng tahasang paglalagay ng "A" upang ang laki nito
ay isang maramihang laki ng byte sa iyong platform; na magiging sanhi ng G++ at iba pa
compiler sa layout "B" magkapareho.

· Maling paghawak ng tail-padding para sa mga virtual na base. Ang G++ ay hindi gumagamit ng buntot
padding kapag naglalagay ng mga virtual na base. Halimbawa:

struct A { virtual void f(); char c1; };
struct B { B(); char c2; };
struct C : pampublikong A, pampublikong virtual B {};

Sa kasong ito, hindi ilalagay ng G++ ang "B" sa tail-padding para sa "A"; iba pa
gagawin ng mga compiler. Maiiwasan mo ang problemang ito sa pamamagitan ng tahasang paglalagay ng "A" upang ito ay
ang laki ay isang maramihang pagkakahanay nito (hindi pinapansin ang mga virtual na baseng klase); iyon ay
maging sanhi ng G++ at iba pang mga compiler sa layout ng "C" nang magkapareho.

· Maling paghawak ng mga bit-field na may mga ipinahayag na lapad na mas malaki kaysa sa kanilang
pinagbabatayan na mga uri, kapag lumitaw ang mga bit-field sa isang unyon. Halimbawa:

unyon U { int i : 4096; };

Ipagpalagay na ang isang "int" ay walang 4096 bits, gagawin ng G++ na masyadong maliit ang unyon
sa pamamagitan ng bilang ng mga bit sa isang "int".

· Ang mga walang laman na klase ay maaaring ilagay sa mga maling offset. Halimbawa:

struct A {};

struct B {
A a;
virtual void f ();
};

struct C : pampubliko B, pampubliko A {};

Ilalagay ng G++ ang "A" base class ng "C" sa isang nonzero offset; dapat itong ilagay
sa offset zero. Nagkamali ang G++ na naniniwala na ang "A" na miyembro ng data ng "B" ay
nasa offset zero na.

· Mga pangalan ng mga function ng template na ang mga uri ay kinabibilangan ng "typename" o template ng template
Ang mga parameter ay maaaring masira nang hindi tama.

template
void f(typename Q::X) {}

template klase Q>
void f(typename Q ::X) {}

Maaaring mali ang pagkakasira ng mga instantasyon ng mga template na ito.

Binabalaan din nito ang mga pagbabagong nauugnay sa psABI. Ang mga kilalang pagbabago sa psABI sa puntong ito ay kinabibilangan ng:

· Para sa SYSV/x86-64, kapag pumasa sa unyon na may mahabang double, ito ay binago upang pumasa sa
memorya tulad ng tinukoy sa psABI. Halimbawa:

unyon U {
mahabang double ld;
int i;
};

Ang "union U" ay palaging ipapasa sa alaala.

-Wctor-dtor-privacy (C++ at Objective-C++ lang)
Magbabala kapag ang isang klase ay tila hindi magagamit dahil ang lahat ng mga constructor o destructors ay naroroon
pribado ang klase, at wala itong mga kaibigan o pampublikong static na function ng miyembro.

-Wdelete-non-virtual-dtor (C++ at Objective-C++ lang)
Babala kung kailan alisin ay ginagamit upang sirain ang isang halimbawa ng isang klase na may mga virtual function
at non-virtual destructor. Hindi ligtas na tanggalin ang isang instance ng isang nagmula na klase
sa pamamagitan ng isang pointer sa isang base class kung ang base class ay walang virtual
maninira. Ang babalang ito ay pinagana ng -Pader.

-Wnarrowing (C++ at Objective-C++ lang)
Magbabala kapag may lumiit na conversion na ipinagbabawal ng C++11 na nangyari sa loob { }, halimbawa

int i = { 2.2 }; // error: pagpapaliit mula double hanggang int

Ang watawat na ito ay kasama sa -Pader at -Wc++11-compat.

Sa -std=c++11, -Wno-narrowing pinipigilan ang diagnostic na kinakailangan ng pamantayan.
Tandaan na hindi ito nakakaapekto sa kahulugan ng mahusay na nabuong code; pagpapaliit ng mga conversion
ay itinuturing pa ring hindi maayos sa konteksto ng SFINAE.

-Wnoexcept (C++ at Objective-C++ lang)
Magbabala kapag ang isang noexcept-expression ay naging false dahil sa isang tawag sa isang function
na walang non-throwing exception specification (hal ihagis() or noexcept)
ngunit kilala ng compiler na hindi kailanman magtapon ng exception.

-Wnon-virtual-dtor (C++ at Objective-C++ lang)
Magbabala kapag ang isang klase ay may mga virtual na function at naa-access na hindi virtual na destructor, sa
kung saan posible ngunit hindi ligtas na tanggalin ang isang instance ng isang nagmula na klase
sa pamamagitan ng isang pointer sa base class. Ang babalang ito ay pinagana rin kung -Weffc++ is
tinukoy.

-Wreorder (C++ at Objective-C++ lang)
Magbabala kapag ang pagkakasunud-sunod ng mga initializer ng miyembro na ibinigay sa code ay hindi tumugma sa pagkakasunud-sunod
kung saan dapat silang isagawa. Halimbawa:

struct A {
int i;
int j;
A(): j (0), i (1) { }
};

Ang compiler ay muling ayusin ang mga initializer ng miyembro para sa i at j upang tumugma sa
utos ng deklarasyon ng mga miyembro, na naglalabas ng babala sa ganoong epekto. Ang babalang ito ay
pinagana ng -Pader.

Ang mga sumusunod na -W... ang mga opsyon ay hindi apektado ng -Pader.

-Weffc++ (C++ at Objective-C++ lang)
Babala tungkol sa mga paglabag sa mga sumusunod na alituntunin sa istilo mula sa Scott Meyers' Mabisa
C++, Pangalawa Edisyon libro:

· Item 11: Tukuyin ang isang copy constructor at isang assignment operator para sa mga klase na may
dynamic na inilaan na memorya.

· Item 12: Mas gusto ang pagsisimula sa pagtatalaga sa mga konstruktor.

· Item 14: Gawing virtual ang mga destructor sa mga base class.

· Aytem 15: Ibalik ang "operator=" ng reference sa *ito.

· Aytem 23: Huwag subukang magbalik ng reference kapag kailangan mong ibalik ang isang bagay.

Magbabala rin tungkol sa mga paglabag sa mga sumusunod na alituntunin sa istilo mula sa Scott Meyers' pa
Mabisa C + + libro:

· Aytem 6: Matukoy ang pagkakaiba sa pagitan ng prefix at postfix na mga anyo ng pagtaas at pagbaba
mga operator.

· Item 7: Huwag kailanman mag-overload ang "&&", "||", o ",".

Kapag pinipili ang opsyong ito, tandaan na ang mga karaniwang header ng library ay hindi sumusunod sa lahat
ng mga alituntuning ito; gamitin grep -v upang salain ang mga babalang iyon.

-Wstrict-null-sentinel (C++ at Objective-C++ lang)
Magbabala din tungkol sa paggamit ng isang hindi naka-cast na "NULL" bilang sentinel. Kapag pinagsama-sama lamang sa
GCC ito ay isang wastong sentinel, dahil ang "NULL" ay tinukoy sa "__null". Bagaman ito ay isang null
pointer constant hindi null pointer, ito ay garantisadong kasing laki ng a
panturo. Ngunit ang paggamit na ito ay hindi portable sa iba't ibang compiler.

-Wno-non-template-friend (C++ at Objective-C++ lang)
Huwag paganahin ang mga babala kapag ang mga hindi na-templatize na function ng kaibigan ay idineklara sa loob ng isang template.
Dahil ang pagdating ng tahasang suporta sa detalye ng template sa G++, kung ang pangalan ng
ang kaibigan ay isang hindi kwalipikadong-id (ibig sabihin, kaibigan foo(int)), ang detalye ng wikang C++
hinihingi ng kaibigan na ipahayag o tukuyin ang isang ordinaryong, nontemplate function. (Seksyon
14.5.3). Bago ipatupad ng G++ ang tahasang detalye, maaaring maging unqualified-id
binibigyang-kahulugan bilang isang partikular na espesyalisasyon ng isang naka-templat na function. Dahil ito
Ang hindi sumusunod na gawi ay hindi na ang default na gawi para sa G++,
-Wnon-template-kaibigan nagbibigay-daan sa compiler na suriin ang umiiral na code para sa potensyal na problema
mga spot at naka-on bilang default. Maaaring i-off ang bagong gawi ng compiler na ito gamit ang
-Wno-non-template-friend, na nagpapanatili sa conformant compiler code ngunit hindi pinapagana ang
kapaki-pakinabang na babala.

-Wold-style-cast (C++ at Objective-C++ lang)
Magbabala kung ang isang lumang-style (C-style) na cast sa isang non-void na uri ay ginagamit sa loob ng isang C++ na programa.
Ang mga bagong istilong cast (Dynamic_cast, static_cast, reinterpret_cast, at Const_cast) ay
hindi gaanong mahina sa mga hindi sinasadyang epekto at mas madaling hanapin.

-Woverloaded-virtual (C++ at Objective-C++ lang)
Magbabala kapag ang isang function na deklarasyon ay nagtatago ng mga virtual na function mula sa isang base class. Para sa
halimbawa, sa:

struct A {
virtual void f();
};

struct B: pampublikong A {
walang bisa f(int);
};

ang "A" na bersyon ng klase ng "f" ay nakatago sa "B", at ang code tulad ng:

B* b;
b->f();

ay mabibigo sa pag-compile.

-Wno-pmf-conversions (C++ at Objective-C++ lang)
Huwag paganahin ang diagnostic para sa pag-convert ng bound pointer sa function ng miyembro sa isang plain
pointer

-Wsign-promo (C++ at Objective-C++ lang)
Magbabala kapag ang overload na resolution ay pumili ng isang promosyon mula sa hindi napirmahan o enumerated na uri hanggang
isang naka-sign na uri, sa isang conversion sa isang hindi naka-sign na uri ng parehong laki. Nakaraang
Ang mga bersyon ng G++ ay susubukan na mapanatili ang unsignedness, ngunit ang pamantayan ay nag-uutos sa
kasalukuyang pag-uugali.

struct A {
operator int ();
A& operator = (int);
};

pangunahing ()
{
A a,b;
a = b;
}

Sa halimbawang ito, mag-synthesize ang G++ ng default A& opereytor = (const A&);, habang cfront
gagamit ng user-defined opereytor =.

Options Pagkontrol Layunin-C at Layunin-C++ Mga dayalekto
(TANDAAN: Hindi inilalarawan ng manwal na ito ang mga wikang Objective-C at Objective-C++
kanilang sarili.

Inilalarawan ng seksyong ito ang mga opsyon sa command-line na makabuluhan lamang para sa Objective-C
at mga programang Objective-C++, ngunit maaari mo ring gamitin ang karamihan sa wikang independiyenteng GNU
mga pagpipilian sa compiler. Halimbawa, maaari kang mag-compile ng file na "some_class.m" tulad nito:

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

Sa halimbawang ito, -fgnu-runtime ay isang opsyon para lamang sa Objective-C at Objective-C++
mga programa; maaari mong gamitin ang iba pang mga opsyon sa anumang wikang sinusuportahan ng GCC.

Tandaan na dahil ang Objective-C ay isang extension ng C language, ang Objective-C compilations
maaari ring gumamit ng mga opsyon na partikular sa C front-end (hal, -Wtradisyonal). Katulad nito,
Ang mga compilation ng Objective-C++ ay maaaring gumamit ng mga opsyon na partikular sa C++ (hal., -Wabi).

Narito ang isang listahan ng mga opsyon na lamang para sa pag-compile ng Objective-C at Objective-C++
mga programa:

-fconstant-string-class=pangalan ng klase
paggamit pangalan ng klase bilang pangalan ng klase upang i-instantiate para sa bawat literal na string
tinukoy na may syntax na "@"..."". Ang default na pangalan ng klase ay "NXConstantString" kung
ang GNU runtime ay ginagamit, at "NSConstantString" kung ang NeXT runtime ay ginagawa
ginamit (tingnan sa ibaba). Ang -fconstant-cfstrings opsyon, kung mayroon din, ay i-override ang
-fconstant-string-class setting at maging sanhi ng "@"..."" literal na inilatag bilang pare-pareho
Mga string ng CoreFoundation.

-fgnu-runtime
Bumuo ng object code na tugma sa karaniwang GNU Objective-C runtime. Ito ay
ang default para sa karamihan ng mga uri ng system.

-fnext-runtime
Bumuo ng output na tugma sa NeXT runtime. Ito ang default para sa NeXT-based
system, kabilang ang Darwin at Mac OS X. Ang macro na "__NEXT_RUNTIME__" ay paunang natukoy kung
(at kung) ginagamit ang opsyong ito.

-fno-nil-receiver
Ipagpalagay na ang lahat ng Objective-C na mensahe ay nagpapadala ("[receiver message: arg]") dito
tinitiyak ng unit ng pagsasalin na ang receiver ay hindi "nil". Ito ay nagbibigay-daan para sa higit pa
mahusay na mga entry point sa runtime na gagamitin. Available lang ang opsyong ito sa
kasabay ng NeXT runtime at ABI version 0 o 1.

-fobjc-abi-version=n
Gumamit ng bersyon n ng Objective-C ABI para sa napiling runtime. Ang pagpipiliang ito ay
kasalukuyang sinusuportahan lamang para sa NeXT runtime. Sa kasong iyon, ang Bersyon 0 ay ang
tradisyonal (32-bit) ABI na walang suporta para sa mga ari-arian at iba pang Objective-C 2.0
mga karagdagan. Ang Bersyon 1 ay ang tradisyonal (32-bit) na ABI na may suporta para sa mga property at
iba pang mga karagdagan sa Layunin-C 2.0. Ang Bersyon 2 ay ang modernong (64-bit) na ABI. Kung wala naman
tinukoy, ang default ay Bersyon 0 sa 32-bit na target na machine, at Bersyon 2 sa 64-bit
target na mga makina.

-fobjc-call-cxx-cdtors
Para sa bawat klase ng Objective-C, suriin kung ang alinman sa mga instance variable nito ay isang C++ object
na may di-maliit na default na tagabuo. Kung gayon, mag-synthesize ng isang espesyal na "- (id)
.cxx_construct" instance method na magpapatakbo ng hindi walang kuwentang default na mga constructor sa alinman
tulad ng mga variable na halimbawa, sa pagkakasunud-sunod, at pagkatapos ay ibalik ang "sarili". Katulad nito, suriin kung mayroon man
instance variable ay isang C++ object na may non-trivial destructor, at kung gayon, synthesize
isang espesyal na "- (void) .cxx_destruct" na paraan na tatakbo sa lahat ng naturang default na mga destructor,
sa reverse order.

Ang "- (id) .cxx_construct" at "- (void) .cxx_destruct" na mga pamamaraan na nabuo sa gayon ay
gumagana lamang sa mga variable na halimbawa na idineklara sa kasalukuyang klase ng Objective-C, at hindi
ang mga minana mula sa mga superclass. Responsibilidad ng Objective-C
runtime upang i-invoke ang lahat ng ganoong pamamaraan sa inheritance hierarchy ng isang object. Ang "- (id)
Ang mga pamamaraan ng .cxx_construct" ay ipapatawag kaagad ng runtime pagkatapos ng isang bagong bagay
instance ay inilalaan; ang "- (void) .cxx_destruct" na pamamaraan ay gagamitin
kaagad bago ang runtime deallocates isang object instance.

Sa pagsulat na ito, tanging ang NeXT runtime sa Mac OS X 10.4 at mas bago ang may suporta para sa
paggamit ng "- (id) .cxx_construct" at "- (void) .cxx_destruct" na pamamaraan.

-fobjc-direct-dispatch
Payagan ang mabilis na pagtalon sa dispatcher ng mensahe. Sa Darwin ito ay nagagawa sa pamamagitan ng
comm page.

-fobjc-exceptions
I-enable ang syntactic na suporta para sa structured exception handling sa Objective-C, katulad ng
kung ano ang inaalok ng C++ at Java. Ang opsyong ito ay kinakailangan para magamit ang Objective-C
mga keyword na @try, @throw, @catch, @finally at @synchronize. Available ang opsyong ito
na may parehong GNU runtime at NeXT runtime (ngunit hindi magagamit kasabay ng
ang NeXT runtime sa Mac OS X 10.2 at mas maaga).

-fobjc-gc
Paganahin ang pangongolekta ng basura (GC) sa mga programang Objective-C at Objective-C++. Ang pagpipiliang ito
ay magagamit lamang sa NeXT runtime; ang GNU runtime ay may ibang basura
pagpapatupad ng koleksyon na hindi nangangailangan ng mga espesyal na flag ng compiler.

-fobjc-nilcheck
Para sa NeXT runtime na may bersyon 2 ng ABI, tingnan kung may nil na receiver sa paraan
invocations bago gawin ang aktwal na method call. Ito ang default at maaaring maging
may kapansanan sa paggamit -fno-objc-nilcheck. Ang mga paraan ng klase at mga super call ay hindi nasusuri
para sa wala sa ganitong paraan kahit na ano ang flag na ito ay nakatakda. Sa kasalukuyan, ginagawa ng watawat na ito
wala kapag ang GNU runtime, o isang mas lumang bersyon ng NeXT runtime ABI, ay ginamit.

-fobjc-std=objc1
Alinsunod sa syntax ng wika ng Objective-C 1.0, ang wikang kinikilala ng GCC 4.0.
Nakakaapekto lamang ito sa mga pagdaragdag ng Objective-C sa wikang C/C++; hindi ito nakakaapekto
pagsunod sa mga pamantayan ng C/C++, na kinokontrol ng hiwalay na diyalektong C/C++
mga flag ng opsyon. Kapag ginamit ang opsyong ito sa Objective-C o Objective-C++
compiler, anumang Objective-C syntax na hindi kinikilala ng GCC 4.0 ay tinatanggihan. Ito
ay kapaki-pakinabang kung kailangan mong tiyakin na ang iyong Objective-C code ay maaaring isama
mas lumang bersyon ng GCC.

-freplace-objc-classes
Maglabas ng espesyal na marker na nagtuturo ld(1) huwag mag-static na mag-link sa resultang object
file, at payagan si dyld(1) sa halip na i-load ito sa oras ng pagtakbo. Ito ay ginagamit sa
kasabay ng Fix-and-Continue debugging mode, kung saan nakalagay ang object file
ang tanong ay maaaring i-recompile at dynamic na i-reload sa kurso ng programa
execution, nang hindi kailangang i-restart ang program mismo. Sa kasalukuyan, Ayusin-at-
Available lang ang continue functionality kasabay ng NeXT runtime sa Mac
OS X 10.3 at mas bago.

-fzero-link
Kapag nag-compile para sa NeXT runtime, karaniwang pinapalitan ng compiler ang mga tawag sa
"objc_getClass("...")" (kapag ang pangalan ng klase ay kilala sa oras ng pag-compile) na may
mga static na sanggunian sa klase na nasisimulan sa oras ng pag-load, na nagpapahusay sa run-time
pagganap. Tinutukoy ang -fzero-link pinipigilan ng bandila ang pag-uugali at sanhi na ito
mga tawag sa "objc_getClass("...")" na pananatilihin. Ito ay kapaki-pakinabang sa Zero-Link
debugging mode, dahil pinapayagan nito ang mga indibidwal na pagpapatupad ng klase na mabago
sa panahon ng pagpapatupad ng programa. Ang runtime ng GNU ay kasalukuyang nagpapanatili ng mga tawag sa
"objc_get_class("...")" anuman ang mga opsyon sa command-line.

-gen-decls
I-dump ang mga deklarasyon ng interface para sa lahat ng klase na nakikita sa source file sa isang file na pinangalanan
sourcename.decl.

-Wassign-intercept (Objective-C at Objective-C++ lang)
Magbabala sa tuwing ang isang Objective-C assignment ay naharang ng basurero.

-Wno-protocol (Objective-C at Objective-C++ lang)
Kung ang isang klase ay idineklara na magpatupad ng isang protocol, isang babala ang ibibigay para sa bawat pamamaraan
sa protocol na hindi ipinatupad ng klase. Ang default na pag-uugali ay sa
maglabas ng babala para sa bawat paraan na hindi tahasang ipinatupad sa klase, kahit na a
Ang pagpapatupad ng pamamaraan ay minana mula sa superclass. Kung gagamitin mo ang -Wno-protocol
opsyon, kung gayon ang mga pamamaraan na minana mula sa superclass ay itinuturing na ipinatupad,
at walang babala na inilabas para sa kanila.

-Wselector (Objective-C at Objective-C++ lang)
Magbabala kung maraming paraan ng iba't ibang uri para sa parehong tagapili ay makikita habang
compilation. Ang pagsusuri ay isinasagawa sa listahan ng mga pamamaraan sa huling yugto ng
compilation. Bilang karagdagan, ang isang pagsusuri ay isinasagawa para sa bawat tagapili na lumilitaw sa a
"@selector(...)" expression, at ang isang kaukulang pamamaraan para sa selector na iyon ay naging
natagpuan sa panahon ng compilation. Dahil ang mga pagsusuring ito ay ini-scan lamang ang talahanayan ng pamamaraan sa dulo
ng compilation, ang mga babalang ito ay hindi ginawa kung ang huling yugto ng compilation ay
hindi naabot, halimbawa dahil may nakitang error sa panahon ng compilation, o dahil ang
-fsyntax-lamang ginagamit ang opsyon.

-Wstrict-selector-match (Objective-C at Objective-C++ lang)
Magbabala kung maraming paraan na may magkakaibang argumento at/o mga uri ng pagbabalik ay matatagpuan para sa a
ibinigay na selector kapag sinusubukang magpadala ng mensahe gamit ang selector na ito sa isang receiver ng
i-type ang "id" o "Class". Kapag naka-off ang flag na ito (na siyang default na gawi), ang
aalisin ng compiler ang mga naturang babala kung ang anumang pagkakaiba na natagpuan ay nakakulong sa mga uri na iyon
ibahagi ang parehong laki at pagkakahanay.

-Wundeclared-selector (Objective-C at Objective-C++ lang)
Magbabala kung may nakitang expression na "@selector(...)" na tumutukoy sa isang hindi nadeklarang selector. A
Itinuturing na hindi idineklara ang tagapili kung walang paraan na may pangalang iyon ang naideklara dati
ang "@selector(...)" na expression, alinman sa tahasan sa isang @interface o @protocol
deklarasyon, o pahiwatig sa isang seksyong @implementation. Ang pagpipiliang ito ay palaging gumaganap
ang mga pagsusuri nito sa sandaling makita ang isang "@selector(...)" na expression, habang -Wselector lamang
nagsasagawa ng mga pagsusuri nito sa huling yugto ng compilation. Ito rin ang nagpapatupad ng coding
style convention na ang mga pamamaraan at tagapili ay dapat ideklara bago gamitin.

-print-objc-runtime-info
Bumuo ng C header na naglalarawan sa pinakamalaking istraktura na ipinapasa ng halaga, kung mayroon man.

Options sa Kontrolin Tanda post Formatting
Ayon sa kaugalian, ang mga diagnostic na mensahe ay na-format nang hindi isinasaalang-alang ang output device
aspeto (hal. ang lapad nito, ...). Ang mga opsyon na inilarawan sa ibaba ay maaaring gamitin upang kontrolin ang
algorithm sa pag-format ng mga diagnostic na mensahe, hal. kung gaano karaming mga character bawat linya, gaano kadalas
dapat iulat ang impormasyon ng lokasyon ng pinagmulan. Sa ngayon, ang C++ na front end lang ang pwede
igalang ang mga pagpipiliang ito. Gayunpaman, inaasahan, sa malapit na hinaharap, na ang natitirang harap
ang mga dulo ay maaaring matunaw ang mga ito nang tama.

-fmessage-haba=n
Subukang i-format ang mga mensahe ng error upang magkasya ang mga ito sa mga linya ng tungkol sa n mga tauhan Ang
Ang default ay 72 character para sa g ++ at 0 para sa natitirang mga dulo sa harap na sinusuportahan ng
GCC. Kung n ay zero, pagkatapos ay walang line-wrapping na gagawin; lalabas ang bawat mensahe ng error
sa isang linya.

-fdiagnostics-show-location=isang beses
Makahulugan lamang sa line-wrapping mode. Nagtuturo sa tagapag-ulat ng diagnostic na mensahe
naglalabas minsan pinagmumulan ng impormasyon sa lokasyon; iyon ay, kung sakaling ang mensahe ay masyadong mahaba upang magkasya
sa isang pisikal na linya at kailangang balutin, ang lokasyon ng pinagmulan ay hindi ilalabas
(bilang prefix) muli, paulit-ulit, sa mga susunod na linya ng pagpapatuloy. Ito ang
default na pag-uugali.

-fdiagnostics-show-location=bawat-linya
Makahulugan lamang sa line-wrapping mode. Nagtuturo sa tagapag-ulat ng diagnostic na mensahe
naglalabas ng parehong impormasyon sa lokasyon ng pinagmulan (bilang prefix) para sa mga pisikal na linya na nagreresulta
mula sa proseso ng pagsira ng mensahe na masyadong mahaba para magkasya sa isang linya.

-fno-diagnostics-show-option
Bilang default, ang bawat diagnostic na ilalabas ay may kasamang text na nagsasaad ng command-line na opsyon
na direktang kumokontrol sa diagnostic (kung ang ganitong opsyon ay kilala sa diagnostic
makinarya). Tinutukoy ang -fno-diagnostics-show-option pinipigilan iyon ng bandila
pag-uugali.

Options sa Hiling or Pigilan Babala
Ang mga babala ay mga diagnostic na mensahe na nag-uulat ng mga konstruksyon na hindi likas
mali ngunit ito ay mapanganib o iminumungkahi na maaaring may pagkakamali.

Hindi pinapagana ng mga sumusunod na opsyon na independiyente sa wika ang mga partikular na babala ngunit kinokontrol ang
mga uri ng diagnostic na ginawa ng GCC.

-fsyntax-lamang
Suriin ang code para sa mga error sa syntax, ngunit huwag gumawa ng anumang bagay na higit pa doon.

-fmax-errors=n
Nililimitahan ang maximum na bilang ng mga mensahe ng error sa n, sa puntong ito ay nagpiyansa ang GCC
kaysa sa pagtatangka na ipagpatuloy ang pagproseso ng source code. Kung n ay 0 (ang default),
walang limitasyon sa bilang ng mga error na mensahe na ginawa. Kung -Wfatal-mga pagkakamali ding
tinukoy, kung gayon -Wfatal-mga pagkakamali inuuna ang pagpipiliang ito.

-w Pigilan ang lahat ng mga mensahe ng babala.

-Werror
Gawing mali ang lahat ng babala.

-Werror=
Gawing error ang tinukoy na babala. Ang specifier para sa isang babala ay idinagdag,
halimbawa -Werror=switch pinipihit ang mga babala na kinokontrol ng -Wswitch sa mga pagkakamali.
Ang switch na ito ay tumatagal ng isang negatibong anyo, na gagamitin upang kontrahin -Werror para sa mga tiyak na babala,
halimbawa -Wno-error=switch Ginagawang -Wswitch ang mga babala ay hindi mga pagkakamali, kahit na kailan -Werror
ay may bisa.

Kasama sa mensahe ng babala para sa bawat nakokontrol na babala ang opsyong kumokontrol
ang babala. Ang opsyon na iyon ay maaaring gamitin sa -Werror= at -Wno-error= Tulad ng inilarawan
sa itaas. (Ang pag-print ng opsyon sa mensahe ng babala ay maaaring hindi paganahin gamit ang
-fno-diagnostics-show-option bandila.)

Tandaan na ang pagtukoy -Werror=foo awtomatikong nagpapahiwatig -Wfoo. Gayunpaman, -Wno-error=foo
ay hindi nagpapahiwatig ng anuman.

-Wfatal-mga pagkakamali
Ang pagpipiliang ito ay nagiging sanhi ng compiler upang i-abort ang compilation sa unang error na naganap
sa halip na subukang magpatuloy at mag-print ng karagdagang mga mensahe ng error.

Maaari kang humiling ng maraming partikular na babala na nagsisimula sa mga opsyon -W, Halimbawa -Wimplicit
upang humiling ng mga babala sa mga implicit na deklarasyon. Ang bawat isa sa mga partikular na opsyon sa babala din
ay may negatibong anyo na nagsisimula -Wno- upang patayin ang mga babala; Halimbawa, -Wno-implicit.
Ang manwal na ito ay naglilista lamang ng isa sa dalawang form, alinman ang hindi default. Para sa karagdagang,
tumutukoy din sa mga opsyong partikular sa wika C + + Dialect Options at Layunin-C at
Layunin-C++ Dialect Options.

Kapag hiniling ang isang hindi nakikilalang opsyon sa babala (hal., -Wunknown-babala), maglalabas ang GCC
isang diagnostic na nagsasaad na ang opsyon ay hindi kinikilala. Gayunpaman, kung ang -Wno- anyo ay
ginamit, bahagyang naiiba ang pag-uugali: Walang gagawing diagnostic para sa
-Wno-unknown-babala maliban kung ang ibang mga diagnostic ay ginagawa. Ito ay nagpapahintulot sa paggamit ng
bago -Wno- mga opsyon sa mga lumang compiler, ngunit kung may mali, babala ng compiler
na ginamit ang isang hindi nakikilalang opsyon.

-pedantic
Ibigay ang lahat ng babala na hinihingi ng mahigpit na ISO C at ISO C++; tanggihan ang lahat ng mga programa na
gumamit ng mga ipinagbabawal na extension, at ilang iba pang mga program na hindi sumusunod sa ISO C at ISO
C++. Para sa ISO C, sumusunod sa bersyon ng pamantayang ISO C na tinukoy ng alinman -std
ginamit na opsyon.

Ang wastong ISO C at ISO C++ na mga programa ay dapat na mag-compile nang maayos mayroon man o wala ang opsyong ito
(bagaman ang isang bihirang iilan ay mangangailangan -ansi o isang -std opsyon na tumutukoy sa kinakailangang bersyon
ng ISO C). Gayunpaman, kung wala ang pagpipiliang ito, ilang mga extension ng GNU at tradisyonal na C at
Ang mga tampok ng C++ ay sinusuportahan din. Sa pagpipiliang ito, tinanggihan sila.

-pedantic ay hindi nagiging sanhi ng mga mensahe ng babala para sa paggamit ng mga kahaliling keyword na
ang mga pangalan ay nagsisimula at nagtatapos sa __. Naka-disable din ang mga pedantic na babala sa expression
na sumusunod sa "__extension__". Gayunpaman, ang mga file ng header ng system lamang ang dapat gumamit ng mga ito
daan para makalikas; dapat iwasan ng mga programa ng aplikasyon ang mga ito.

Sinusubukan ng ilang mga gumagamit na gamitin -pedantic upang suriin ang mga programa para sa mahigpit na pagsunod sa ISO C. sila
sa lalong madaling panahon ay nalaman na hindi nito nagagawa ang gusto nila: nakakahanap ito ng ilang hindi ISO na kasanayan,
ngunit hindi lahat---lamang ang para sa ISO C nangangailangan isang diagnostic, at ilang iba pa para sa
kung aling mga diagnostic ang naidagdag.

Ang isang tampok na mag-ulat ng anumang pagkabigo sa pagsunod sa ISO C ay maaaring maging kapaki-pakinabang sa ilang mga pagkakataon,
ngunit mangangailangan ng malaking karagdagang trabaho at magiging kaiba sa
-pedantic. Wala kaming planong suportahan ang naturang feature sa malapit na hinaharap.

Kung saan tinukoy ang pamantayan sa -std kumakatawan sa isang GNU extended dialect ng C, tulad ng
gnu90 or gnu99, may katumbas base pamantayan, ang bersyon ng ISO C kung saan
ang GNU extended dialect ay nakabatay. Mga babala mula sa -pedantic ibinibigay kung nasaan sila
kinakailangan ng batayang pamantayan. (Hindi makatwiran para sa mga ganitong babala na ibigay
para lamang sa mga tampok na wala sa tinukoy na GNU C dialect, dahil sa kahulugan ay ang GNU
Kasama sa mga dayalekto ng C ang lahat ng mga tampok na sinusuportahan ng compiler sa ibinigay na opsyon, at
walang dapat bigyan ng babala.)

-pedantic-errors
katulad -pedantic, maliban na ang mga error ay ginawa sa halip na mga babala.

-Pader
Ito ay nagbibigay-daan sa lahat ng mga babala tungkol sa mga konstruksyon na isinasaalang-alang ng ilang mga gumagamit
kaduda-dudang, at iyon ay madaling iwasan (o baguhin upang maiwasan ang babala), kahit na sa
kasabay ng macros. Nagbibigay-daan din ito sa ilang mga babala na partikular sa wika na inilarawan
in C + + Dialect Options at Layunin-C at Layunin-C++ Dialect Options.

-Pader Ino-on ang sumusunod na mga flag ng babala:

-Waddress -Warray-bounds (kasama lamang -O2) -Wc++11-compat -Wchar-subscripts
-Wenum-kumpara (sa C/Objc; ito ay naka-on bilang default sa C++) -Wimplicit-int (C at
Layunin-C lamang) -Wimplicit-function-declaration (C at Objective-C lang) -Wcomment
-Wformat -Wmain (para lang sa C/ObjC at maliban kung -pagkakasundo) -Wmaybe-uninitialized
-Wmissing-braces -Wnonnull -Mga panaklong -Wpointer-sign -Wreorder -Wreturn-type
-Wsequence-point -Wsign-ihambing (sa C++ lang) -Wstrict-aliasing -Wstrict-overflow=1
-Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function
-Wunused-label -Wunused-halaga -Wunused-variable -Wvolatile-register-var

Tandaan na ang ilang mga flag ng babala ay hindi ipinahiwatig ng -Pader. Ang ilan sa kanila ay nagbabala tungkol sa
mga konstruksyon na karaniwang hindi itinuturing ng mga gumagamit na kaduda-dudang, ngunit alin
paminsan-minsan baka gusto mong suriin para sa; ang iba ay nagbabala tungkol sa mga konstruksyon na
kinakailangan o mahirap iwasan sa ilang mga kaso, at walang simpleng paraan upang baguhin ang
code upang sugpuin ang babala. Ang ilan sa mga ito ay pinagana ng -Wextra ngunit marami sa kanila
dapat paganahin nang paisa-isa.

-Wextra
Nagbibigay-daan ito sa ilang dagdag na mga flag ng babala na hindi pinagana ng -Pader. (Ginamit ang opsyong ito
tatawagin -W. Ang mas lumang pangalan ay sinusuportahan pa rin, ngunit ang mas bagong pangalan ay higit pa
naglalarawan.)

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C lang) -Wold-style-deklarasyon (C lang) -Woverride-init
-Wsign-ihambing -Wtype-limitasyon -Wuninitialized -Wunused-parameter (kasama lamang -Wunused or
-Pader) -Wunused-but-set-parameter (kasama lamang -Wunused or -Pader)

Ang pagpipilian -Wextra nagpi-print din ng mga mensahe ng babala para sa mga sumusunod na kaso:

· Ang isang pointer ay inihambing laban sa integer zero sa <, <=, >, O >=.

· (C++ lang) Ang isang enumerator at isang hindi-enumerator ay parehong lumalabas sa isang kondisyon
pagpapahayag.

· (C++ lang) Mga hindi maliwanag na virtual na base.

· (C++ lang) Pag-subscribe sa isang array na naideklara na magparehistro.

· (C++ lang) Pagkuha ng address ng isang variable na idineklara magparehistro.

· (C++ lang) Ang isang batayang klase ay hindi pinasimulan sa isang nagmula na klase na tagabuo ng kopya.

-Wchar-subscripts
Magbabala kung ang isang array subscript ay may uri na "char". Ito ay isang karaniwang sanhi ng error, bilang
Madalas nalilimutan ng mga programmer na ang ganitong uri ay nilagdaan sa ilang mga makina. Ang babalang ito ay
pinagana ng -Pader.

-Wcomment
Magbabala sa tuwing may sequence ng pagsisimula ng komento /* lilitaw sa a /* komento, o kahit kailan a
Lumilitaw ang Backslash-Newline sa a // komento. Ang babalang ito ay pinagana ng -Pader.

-Wno-coverage-mismatch
Magbabala kung hindi tumutugma ang mga profile ng feedback kapag ginagamit ang -fprofile-gamitin opsyon. Kung ang
binago ang source file sa pagitan ng -fprofile-gen at -fprofile-gamitin, ang mga file na may
Maaaring hindi tumugma ang feedback sa profile sa source file at hindi magagamit ng GCC ang profile
impormasyon ng feedback. Bilang default, ang babalang ito ay pinagana at itinuturing bilang isang error.
-Wno-coverage-mismatch ay maaaring gamitin upang huwag paganahin ang babala o
-Wno-error=coverage-mismatch maaaring gamitin upang hindi paganahin ang error. Hindi pagpapagana ng error
para sa babalang ito ay maaaring magresulta sa hindi magandang na-optimize na code at ito ay kapaki-pakinabang lamang sa kaso ng
napakaliit na pagbabago gaya ng mga pag-aayos ng bug sa isang umiiral nang code-base. Ganap na hindi pinapagana
ang babala ay hindi inirerekomenda.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ at Fortran lang)

Pigilan ang mga mensahe ng babala na ibinubuga ng "#warning" na mga direktiba.

-Wdouble-promosyon (C, C++, Objective-C at Objective-C++ lang)
Magbigay ng babala kapag ang isang halaga ng uri na "float" ay tahasang na-promote sa "double". Mga CPU
na may 32-bit na "single-precision" na floating-point unit ay nagpapatupad ng "float" sa hardware,
ngunit tularan ang "doble" sa software. Sa naturang makina, gumagawa ng mga pagkalkula gamit
Ang mga "double" na halaga ay mas mahal dahil sa overhead na kinakailangan para sa software
pagtulad.

Madaling aksidenteng gumawa ng mga computations na may "double" dahil floating-point
literal ay implicitly ng uri ng "doble". Halimbawa, sa:

float area (float radius)
{
bumalik 3.14159 * radius * radius;
}

gagawin ng compiler ang buong computation na may "doble" dahil ang lumulutang-
point literal ay isang "doble".

-Wformat
Suriin ang mga tawag sa "printf" at "scanf", atbp., upang matiyak na ang mga argumento ay ibinigay
may mga uri na naaangkop sa format na string na tinukoy, at ang mga conversion
may katuturan ang tinukoy sa string ng format. Kabilang dito ang mga karaniwang function, at
ang iba ay tinukoy ng mga katangian ng format, sa "printf", "scanf", "strftime" at
"strfmon" (isang X/Open extension, wala sa C standard) mga pamilya (o iba pang target-
mga partikular na pamilya). Aling mga function ang sinusuri nang walang mga katangian ng format
ang tinukoy ay depende sa karaniwang bersyon na napili, at ang mga naturang pagsusuri ng mga function
nang walang tinukoy na katangian ay hindi pinagana ni -pagkakasundo or -fno-buitin.

Sinusuri ang mga format laban sa mga tampok ng format na sinusuportahan ng bersyon 2.2 ng GNU libc.
Kabilang dito ang lahat ng feature ng ISO C90 at C99, pati na rin ang mga feature mula sa Single Unix
Pagtutukoy at ilang extension ng BSD at GNU. Maaaring hindi ang ibang mga pagpapatupad ng library
suportahan ang lahat ng mga tampok na ito; Hindi sinusuportahan ng GCC ang babala tungkol sa mga feature na higit pa
mga limitasyon ng isang partikular na aklatan. Gayunpaman, kung -pedantic ay ginagamit sa -Wformat,
ibibigay ang mga babala tungkol sa mga feature ng format na wala sa napiling karaniwang bersyon (ngunit
hindi para sa mga "strfmon" na format, dahil wala ang mga iyon sa anumang bersyon ng pamantayang C).

Dahil sa -Wformat sinusuri din ang mga null format na argumento para sa ilang mga function, -Wformat
nagpapahiwatig din -Wnonnull.

-Wformat ay kasama sa -Pader. Para sa higit pang kontrol sa ilang aspeto ng pagsuri sa format,
ang mga pagpipilian -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length,
-Wformat-hindi literal, -Wformat-seguridad, at -Wformat=2 ay magagamit, ngunit hindi
kasama sa -Pader.

TANDAAN: Sa Ubuntu 8.10 at mas bagong mga bersyon ang opsyong ito ay pinagana bilang default para sa C, C++,
ObjC, ObjC++. Upang huwag paganahin, gamitin -Wformat=0.

-Wformat-y2k
If -Wformat ay tinukoy, nagbabala din tungkol sa mga format na "strftime" na maaaring magbunga lamang ng a
dalawang-digit na taon.

-Wno-format-contains-nul
If -Wformat ay tinukoy, huwag magbigay ng babala tungkol sa mga string ng format na naglalaman ng mga NUL byte.

-Wno-format-extra-args
If -Wformat ay tinukoy, huwag magbigay ng babala tungkol sa labis na mga argumento sa isang "printf" o "scanf"
pag-andar ng format. Ang pamantayang C ay tumutukoy na ang mga naturang argumento ay binabalewala.

Kung saan ang mga hindi nagamit na argumento ay nasa pagitan ng mga ginamit na argumento na tinukoy sa $
mga pagtutukoy ng numero ng operand, karaniwang nagbibigay pa rin ng mga babala, dahil ang
hindi malaman ng pagpapatupad kung anong uri ang ipapasa sa "va_arg" upang laktawan ang hindi nagamit
mga argumento. Gayunpaman, sa kaso ng mga "scanf" na format, pipigilan ng opsyong ito ang
babala kung ang mga hindi nagamit na argumento ay pawang mga pointer, dahil ang Single Unix Specification
nagsasabing pinapayagan ang mga hindi nagamit na argumento.

-Wno-format-zero-length
If -Wformat ay tinukoy, huwag magbabala tungkol sa mga zero-length na format. Ang pamantayang C
tumutukoy na pinapayagan ang mga zero-length na format.

-Wformat-hindi literal
If -Wformat ay tinukoy, magbabala din kung ang format na string ay hindi literal na string at
kaya't hindi masusuri, maliban kung ang format na function ay kunin ang mga argumento ng format nito bilang a
"va_list".

-Wformat-seguridad
If -Wformat ay tinukoy, nagbabala din tungkol sa paggamit ng mga function ng format na kumakatawan
posibleng mga problema sa seguridad. Sa kasalukuyan, nagbabala ito tungkol sa mga tawag sa "printf" at
Ang "scanf" ay gumagana kung saan ang format na string ay hindi literal na string at wala
format ng mga argumento, tulad ng sa "printf (foo);". Ito ay maaaring isang butas sa seguridad kung ang format
string ay nagmula sa hindi pinagkakatiwalaang input at naglalaman %n. (Ito ay kasalukuyang subset ng what
-Wformat-hindi literal nagbabala tungkol sa, ngunit sa hinaharap na mga babala ay maaaring idagdag sa
-Wformat-seguridad na hindi kasama sa -Wformat-hindi literal.)

TANDAAN: Sa Ubuntu 8.10 at mas bagong mga bersyon ang opsyong ito ay pinagana bilang default para sa C, C++,
ObjC, ObjC++. Upang huwag paganahin, gamitin -Wno-format-security, o huwag paganahin ang lahat ng babala sa format
sa -Wformat=0. Upang gawing nakamamatay ang mga babala sa seguridad sa format, tukuyin
-Werror=format-security.

-Wformat=2
Paganahin -Wformat kasama ang mga pagsusuri sa format na hindi kasama sa -Wformat. Kasalukuyang katumbas ng
-Wformat -Wformat-hindi literal -Wformat-seguridad -Wformat-y2k.

-Wnonnull
Babala tungkol sa pagpasa ng null pointer para sa mga argumentong minarkahan bilang nangangailangan ng hindi null na halaga
sa pamamagitan ng katangian ng function na "nonnull".

-Wnonnull ay kasama sa -Pader at -Wformat. Maaari itong i-disable gamit ang -Wno-nonnull
pagpipilian.

-Winit-sarili (C, C++, Objective-C at Objective-C++ lang)
Magbabala tungkol sa mga hindi nasimulang variable na nasimulan sa kanilang mga sarili. Tandaan ito
ang opsyon ay magagamit lamang sa -Wuninitialized pagpipilian.

Halimbawa, magbabala ang GCC tungkol sa "i" na hindi nasimulan sa sumusunod na snippet lang
kailan -Winit-sarili ay tinukoy:

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

-Wimplicit-int (C at Objective-C lang)
Magbabala kapag ang isang deklarasyon ay hindi tumutukoy ng isang uri. Ang babalang ito ay pinagana ng -Pader.

-Wimplicit-function-declaration (C at Objective-C lang)
Magbigay ng babala sa tuwing ginagamit ang isang function bago ideklara. Sa C99 mode
(-std=c99 or -std=gnu99), ang babalang ito ay pinagana bilang default at ito ay ginawang isang
pagkakamali ng -pedantic-errors. Ang babalang ito ay pinagana rin ng -Pader.

-Wimplicit (C at Objective-C lang)
Katulad ng -Wimplicit-int at -Wimplicit-function-declaration. Ang babalang ito ay pinagana
by -Pader.

-Wignored-qualifiers (C at C++ lang)
Magbabala kung ang uri ng pagbabalik ng isang function ay may uri ng kwalipikasyon gaya ng "const". Para sa ISO C
walang epekto ang ganitong uri ng qualifier, dahil ang halaga na ibinalik ng isang function ay hindi isang
halaga. Para sa C++, ang babala ay inilalabas lamang para sa mga uri ng scalar o "walang bisa". ISO C
ipinagbabawal ang mga kwalipikadong "walang bisa" na mga uri ng pagbabalik sa mga kahulugan ng function, kaya ang mga ganitong uri ng pagbabalik
palaging makatanggap ng babala kahit na wala ang opsyong ito.

Ang babalang ito ay pinagana rin ng -Wextra.

-Wmain
Babala kung ang uri ng pangunahin ay kahina-hinala. pangunahin dapat ay isang function na may panlabas
linkage, bumabalik na int, pagkuha ng alinman sa mga zero na argumento, dalawa, o tatlong argumento ng
angkop na mga uri. Ang babalang ito ay pinagana bilang default sa C++ at pinagana ng alinman
-Pader or -pedantic.

-Wmissing-braces
Magbabala kung hindi ganap na naka-bracket ang aggregate o union initializer. Sa mga sumusunod
halimbawa, ang initializer para sa a ay hindi ganap na naka-bracket, ngunit iyon ay para sa b ay ganap
naka-bracket.

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

Ang babalang ito ay pinagana ng -Pader.

-Wmissing-include-dirs (C, C++, Objective-C at Objective-C++ lang)
Magbabala kung walang ibinibigay na isamang direktoryo ng user.

-Mga panaklong
Magbabala kung ang mga panaklong ay tinanggal sa ilang partikular na konteksto, tulad ng kapag mayroong an
pagtatalaga sa isang konteksto kung saan inaasahan ang isang halaga ng katotohanan, o kapag ang mga operator ay naka-nest
na ang nangunguna sa mga tao ay madalas na nalilito.

Babala din kung ang isang paghahambing ay gusto x<=y<=z lilitaw; ito ay katumbas ng (x<=y ? 1 : 0)
<= z, na ibang interpretasyon mula sa ordinaryong mathematical notation.

Magbigay din ng babala tungkol sa mga konstruksyon kung saan maaaring magkaroon ng kalituhan kung aling "kung" ang pahayag an
"ibang" sangay ang nabibilang. Narito ang isang halimbawa ng ganitong kaso:

{
kung ang)
kung (b)
foo ();
iba
bar ();
}

Sa C/C++, ang bawat "iba" na sangay ay nabibilang sa pinakaloob na posibleng "kung" na pahayag, na
sa halimbawang ito ay "kung (b)". Kadalasan hindi ito ang inaasahan ng programmer, gaya ng
inilalarawan sa halimbawa sa itaas sa pamamagitan ng indentasyon na pinili ng programmer. Kapag may
ang potensyal para sa pagkalito na ito, maglalabas ang GCC ng babala kapag ang flag na ito ay
tinukoy. Upang alisin ang babala, magdagdag ng mga tahasang brace sa paligid ng pinakaloob na "kung"
pahayag kaya walang paraan na ang "iba" ay maaaring kabilang sa kalakip na "kung". Ang
magiging ganito ang resultang code:

{
kung ang)
{
kung (b)
foo ();
iba
bar ();
}
}

Magbabala din para sa mga mapanganib na paggamit ng ?: na inalis ang gitnang operand na extension ng GNU. Kailan
ang kundisyon sa ?: operator ay isang boolean na expression na ang aalisin na halaga ay magiging
palaging 1. Kadalasan ay inaasahan ng user na ito ay isang value na nakalkula sa loob ng conditional
expression sa halip.

Ang babalang ito ay pinagana ng -Pader.

-Wsequence-point
Magbabala tungkol sa code na maaaring may hindi natukoy na semantika dahil sa mga paglabag sa pagkakasunud-sunod
mga panuntunan sa punto sa mga pamantayan ng C at C++.

Ang mga pamantayan ng C at C++ ay tumutukoy sa pagkakasunud-sunod ng mga expression sa isang C/C++ na programa
nasusuri sa mga tuntunin ng pagkakasunud-sunod puntos, na kumakatawan sa isang bahagyang pagkakasunud-sunod sa pagitan ng
pagpapatupad ng mga bahagi ng programa: ang mga naisakatuparan bago ang sequence point, at ang mga iyon
isinagawa pagkatapos nito. Nangyayari ang mga ito pagkatapos ng pagsusuri ng isang buong expression (isa na
ay hindi bahagi ng isang mas malaking expression), pagkatapos ng pagsusuri ng unang operand ng a
"&&", "||", "? :" o "," (kuwit) operator, bago tawagin ang isang function (ngunit pagkatapos ng
pagsusuri ng mga argumento nito at ang expression na nagsasaad ng tinatawag na function), at sa
ilang iba pang mga lugar. Maliban sa ipinahayag ng mga panuntunan ng sequence point, ang pagkakasunud-sunod
ng pagsusuri ng mga subexpression ng isang expression ay hindi tinukoy. Lahat ng mga tuntuning ito
ilarawan lamang ang isang bahagyang pagkakasunud-sunod sa halip na isang kabuuang pagkakasunud-sunod, dahil, halimbawa, kung dalawa
function ay tinatawag sa loob ng isang expression na walang sequence point sa pagitan ng mga ito, ang
Ang pagkakasunud-sunod kung saan tinawag ang mga function ay hindi tinukoy. Gayunpaman, ang mga pamantayan
nagpasya ang komite na ang mga function call ay hindi magkakapatong.

Hindi ito tinukoy kung kailan sa pagitan ng mga sequence point na pagbabago sa mga halaga ng
magkakabisa ang mga bagay. Ang mga programa na ang pag-uugali ay nakasalalay dito ay may hindi natukoy na pag-uugali;
ang mga pamantayan ng C at C++ ay tumutukoy na "Sa pagitan ng nakaraan at susunod na sequence point an
bagay ay dapat magkaroon ng nakaimbak na halaga nito na mabago nang hindi hihigit sa isang beses sa pamamagitan ng pagsusuri ng isang
pagpapahayag. Higit pa rito, ang naunang halaga ay dapat basahin lamang upang matukoy ang halaga sa
maiimbak.". Kung ang isang programa ay lumabag sa mga panuntunang ito, ang mga resulta sa anumang partikular
ang pagpapatupad ay ganap na hindi mahuhulaan.

Ang mga halimbawa ng code na may hindi natukoy na gawi ay "a = a++;", "a[n] = b[n++]" at "a[i++] =
i;". Ang ilang mas kumplikadong mga kaso ay hindi na-diagnose ng opsyong ito, at maaari itong magbigay ng isang
paminsan-minsang maling positibong resulta, ngunit sa pangkalahatan ito ay napatunayang medyo epektibo sa
pagtuklas ng ganitong uri ng problema sa mga programa.

Ang pamantayan ay nakalilito sa mga salita, samakatuwid mayroong ilang debate tungkol sa tiyak
kahulugan ng mga tuntunin ng sequence point sa mga banayad na kaso. Mga link sa mga talakayan ng
problema, kabilang ang mga iminungkahing pormal na kahulugan, ay maaaring matagpuan sa pahina ng mga pagbabasa ng GCC,
sahttp://gcc.gnu.org/readings.html>.

Ang babalang ito ay pinagana ng -Pader para sa C at C++.

-Wreturn-type
Magbabala sa tuwing ang isang function ay tinukoy na may return-type na nagde-default sa "int". Gayundin
magbabala tungkol sa anumang "return" na pahayag na walang return-value sa isang function na may return-type
ay hindi "walang bisa" (ang pagbagsak sa dulo ng function body ay itinuturing na bumabalik
walang halaga), at tungkol sa isang "return" na pahayag na may expression sa isang function
na ang uri ng pagbabalik ay "walang bisa".

Para sa C++, ang isang function na walang uri ng pagbabalik ay palaging gumagawa ng isang diagnostic na mensahe, kahit na
kailan -Wno-return-type ay tinukoy. Ang tanging eksepsiyon ay pangunahin at pag-andar
tinukoy sa mga header ng system.

Ang babalang ito ay pinagana ng -Pader.

-Wswitch
Magbabala sa tuwing ang isang "switch" na pahayag ay may index ng enumerated type at walang "case"
para sa isa o higit pa sa mga pinangalanang code ng enumeration na iyon. (Ang pagkakaroon ng "default"
pinipigilan ng label ang babalang ito.) Mga label na "case" sa labas din ng hanay ng enumeration
pukawin ang mga babala kapag ginamit ang opsyong ito (kahit na mayroong "default" na label). Ito
babala ay pinagana ng -Pader.

-Wswitch-default
Magbabala sa tuwing ang isang "switch" na pahayag ay walang "default" na kaso.

-Wswitch-enum
Magbabala sa tuwing ang isang "switch" na pahayag ay may index ng enumerated type at walang "case"
para sa isa o higit pa sa mga pinangalanang code ng enumeration na iyon. mga label na "case" sa labas ng
Ang hanay ng enumeration ay nagdudulot din ng mga babala kapag ginamit ang opsyong ito. Ang pagkakaiba lang
sa pagitan ng -Wswitch at ang pagpipiliang ito ay ang pagpipiliang ito ay nagbibigay ng babala tungkol sa isang tinanggal
enumeration code kahit na may "default" na label.

-Wsync-nand (C at C++ lang)
Magbabala kapag ang mga built-in na function na "__sync_fetch_and_nand" at "__sync_nand_and_fetch" ay
ginamit. Binago ng mga function na ito ang semantics sa GCC 4.4.

-Wtrigraphs
Magbabala kung mayroong anumang mga trigraph na nakatagpo na maaaring magbago sa kahulugan ng programa
(Ang mga trigraph sa loob ng mga komento ay hindi binabalaan). Ang babalang ito ay pinagana ng -Pader.

-Wunused-but-set-parameter
Magbabala sa tuwing ang isang parameter ng function ay itinalaga sa, ngunit kung hindi man ay hindi ginagamit (bukod sa
deklarasyon nito).

Upang sugpuin ang babalang ito gamitin ang hindi ginagamit katangian.

Ang babalang ito ay pinagana rin ng -Wunused Kasama -Wextra.

-Wunused-but-set-variable
Magbabala sa tuwing ang isang lokal na variable ay itinalaga sa, ngunit kung hindi man ay hindi ginagamit (bukod sa nito
deklarasyon). Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito gamitin ang hindi ginagamit katangian.

Ang babalang ito ay pinagana rin ng -Wunused, na pinagana ng -Pader.

-Wunused-function
Magbabala sa tuwing idineklara ang isang static na function ngunit hindi tinukoy o isang non-inline na static
hindi ginagamit ang function. Ang babalang ito ay pinagana ng -Pader.

-Wunused-label
Magbabala sa tuwing idineklara ang isang label ngunit hindi ginagamit. Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito gamitin ang hindi ginagamit katangian.

-Wunused-local-typedefs (C, Objective-C, C++ at Objective-C++ lang)
Magbabala kapag ang isang typedef na lokal na tinukoy sa isang function ay hindi ginagamit.

-Wunused-parameter
Magbabala sa tuwing hindi ginagamit ang isang parameter ng function bukod sa deklarasyon nito.

Upang sugpuin ang babalang ito gamitin ang hindi ginagamit katangian.

-Wno-unused-resulta
Huwag magbigay ng babala kung ang tumatawag ng isang function na may markang katangian na "warn_unused_result."
huwag gamitin ang return value nito. Ang default ay -Wunused-resulta.

-Wunused-variable
Magbabala sa tuwing ang isang lokal na variable o non-constant na static na variable ay hindi ginagamit bukod sa
deklarasyon nito. Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito gamitin ang hindi ginagamit katangian.

-Wunused-halaga
Magbabala sa tuwing kinukuwenta ng isang pahayag ang isang resulta na tahasang hindi ginagamit. Pigilan
ang babalang ito ay naglagay ng hindi nagamit na ekspresyon sa walang bisa. Kabilang dito ang isang expression-statement
o ang kaliwang bahagi ng isang comma expression na walang mga side effect. Para sa
halimbawa, isang ekspresyon tulad ng x[i,j] magdudulot ng babala, habang x[(walang bisa)i,j] habilin
hindi.

Ang babalang ito ay pinagana ng -Pader.

-Wunused
Lahat ng nasa itaas -Wunused pinagsamang mga opsyon.

Upang makakuha ng babala tungkol sa isang hindi nagamit na parameter ng function, dapat mong tukuyin ang alinman
-Wextra -Wunused (tandaan na -Pader nagpapahiwatig -Wunused), o hiwalay na tukuyin
-Wunused-parameter.

-Wuninitialized
Magbabala kung ang isang awtomatikong variable ay ginagamit nang hindi muna sinisimulan o kung isang variable
maaaring ma-clobbered ng isang "setjmp" na tawag. Sa C++, bigyan ng babala kung isang non-static na sanggunian o hindi-
statik const lumilitaw ang miyembro sa isang klase na walang mga constructor.

Kung gusto mong bigyan ng babala ang tungkol sa code na gumagamit ng hindi nasimulang halaga ng variable sa
sarili nitong initializer, gamitin ang -Winit-sarili pagpipilian.

Nangyayari ang mga babalang ito para sa mga indibidwal na hindi pa nasimulan o na-clobber na mga elemento ng istraktura,
mga variable ng unyon o array gayundin para sa mga variable na hindi nasimulan o na-clobber
sa kabuuan. Hindi ito nangyayari para sa mga variable o elemento na idineklara na "volatile". kasi
ang mga babalang ito ay nakasalalay sa pag-optimize, ang eksaktong mga variable o elemento kung saan naroroon
ang mga babala ay depende sa tumpak na mga opsyon sa pag-optimize at bersyon ng GCC na ginamit.

Tandaan na maaaring walang babala tungkol sa isang variable na ginagamit lamang sa pagkalkula ng a
halaga na hindi kailanman ginagamit, dahil ang mga naturang pag-compute ay maaaring tanggalin ng daloy ng data
pagsusuri bago ilimbag ang mga babala.

-Wmaybe-uninitialized
Para sa isang awtomatikong variable, kung mayroong isang landas mula sa entry ng function sa isang paggamit ng
ang variable na nasimulan, ngunit mayroong ilang iba pang mga landas na ang variable ay hindi
nasimulan, ang compiler ay maglalabas ng babala kung hindi nito mapatunayan ang hindi nasimulan
ang mga landas ay hindi nangyayari sa oras ng pagtakbo. Ang mga babalang ito ay ginawang opsyonal dahil ang GCC ay hindi
sapat na matalino upang makita ang lahat ng mga dahilan kung bakit maaaring tama ang code sa kabila ng paglitaw nito
magkaroon ng error. Narito ang isang halimbawa kung paano ito maaaring mangyari:

{
intx;
lumipat (y)
{
kaso 1: x = 1;
masira;
kaso 2: x = 4;
masira;
kaso 3: x = 5;
}
foo (x);
}

Kung ang halaga ng "y" ay palaging 1, 2 o 3, kung gayon ang "x" ay palaging sinisimulan, ngunit GCC
hindi alam ito. Upang sugpuin ang babala, kailangan ng user na magbigay ng default na case
sa igiit(0) o katulad na code.

Nagbabala rin ang opsyong ito kapag ang isang non-volatile na awtomatikong variable ay maaaring mabago ng a
tawag sa "longjmp". Ang mga babalang ito ay posible lamang sa pag-optimize
compilation.

Ang compiler ay nakikita lamang ang mga tawag sa "setjmp". Hindi nito malalaman kung saan ang "longjmp".
tinatawag; sa katunayan, maaaring tawagan ito ng tagapangasiwa ng signal sa anumang punto sa code. Bilang isang
resulta, maaari kang makakuha ng babala kahit na sa katunayan ay walang problema dahil "longjmp"
hindi talaga matatawag sa lugar na magdudulot ng problema.

Ang ilang mga huwad na babala ay maiiwasan kung idineklara mo ang lahat ng mga function na ginagamit mo iyon
hindi kailanman bumalik bilang "noreturn".

Ang babalang ito ay pinagana ng -Pader or -Wextra.

-Wunknown-pragmas
Magbabala kapag may na-encounter na direktiba na "#pragma" na hindi naiintindihan ng GCC. Kung ito
Ginagamit ang command-line option, ang mga babala ay ibibigay pa nga para sa mga hindi kilalang pragmas in
mga file ng header ng system. Hindi ito ang kaso kung ang mga babala ay pinagana lamang ng
-Pader opsyon sa command-line.

-Wno-pragmas
Huwag magbigay ng babala tungkol sa mga maling paggamit ng mga pragma, gaya ng mga maling parameter, di-wastong syntax, o
mga salungatan sa pagitan ng mga pragma. Tingnan din -Wunknown-pragmas.

-Wstrict-aliasing
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-aliasing ay aktibo. Nagbabala ito tungkol sa code na iyon
maaaring masira ang mahigpit na mga panuntunan sa pag-alyas na ginagamit ng compiler para sa pag-optimize.
Ang babala ay hindi nakakakuha ng lahat ng mga kaso, ngunit sinusubukang hulihin ang mas karaniwan
mga patibong. Ito ay kasama sa -Pader. Ito ay katumbas ng -Wstrict-aliasing=3

-Wstrict-aliasing=n
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-aliasing ay aktibo. Nagbabala ito tungkol sa code na iyon
maaaring masira ang mahigpit na mga panuntunan sa pag-alyas na ginagamit ng compiler para sa pag-optimize.
Ang mas mataas na antas ay tumutugma sa mas mataas na katumpakan (mas kaunting mga maling positibo). Mas mataas na antas
tumutugma din sa higit na pagsisikap, katulad ng paraan ng -O gumagana. -Wstrict-aliasing is
katumbas ng -Wstrict-aliasing=n, na may n=3.

Level 1: Pinaka agresibo, mabilis, hindi gaanong tumpak. Posibleng kapaki-pakinabang kapag mas mataas na antas
huwag bigyan ng babala ngunit sinira pa rin ng -fstrict-aliasing ang code, dahil kakaunti lang ang false
mga negatibo. Gayunpaman, mayroon itong maraming maling positibo. Nagbabala para sa lahat ng mga conversion ng pointer
sa pagitan ng mga posibleng hindi tugmang uri, kahit na hindi kailanman na-dereference. Tumatakbo sa harapan
katapusan lang.

Level 2: Agresibo, mabilis, hindi masyadong tumpak. Maaaring magkaroon pa rin ng maraming maling positibo (hindi
kasing dami ng antas 1 bagaman), at kakaunting maling negatibo (ngunit posibleng higit pa sa antas 1).
Hindi tulad ng level 1, nagbabala lamang ito kapag kinuha ang isang address. Nagbabala tungkol sa mga hindi kumpletong uri.
Tumatakbo sa harap na dulo lamang.

Antas 3 (default para sa -Wstrict-aliasing): Dapat mayroong napakakaunting mga maling positibo at kakaunti
mga maling negatibo. Bahagyang mas mabagal kaysa sa mga antas 1 o 2 kapag pinagana ang pag-optimize.
Nangangalaga sa karaniwang pun+dereference pattern sa front end:
"*(int*)&some_float". Kung pinagana ang pag-optimize, tatakbo din ito sa likod na dulo, kung saan
ito ay tumatalakay sa maraming mga kaso ng pahayag gamit ang mga puntong sensitibo sa daloy-sa impormasyon.
Nagbabala lamang kapag na-dereference ang na-convert na pointer. Hindi nagbabala tungkol sa hindi kumpleto
mga uri.

-Wstrict-overflow
-Wstrict-overflow=n
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-apaw ay aktibo. Nagbabala ito tungkol sa mga kaso
kung saan nag-o-optimize ang compiler batay sa pagpapalagay na ang nilagdaan na overflow ay hindi
mangyari. Tandaan na hindi ito nagbabala tungkol sa lahat ng kaso kung saan maaaring umapaw ang code: ito
nagbabala lamang tungkol sa mga kaso kung saan ang compiler ay nagpapatupad ng ilang pag-optimize. Kaya ito
ang babala ay depende sa antas ng pag-optimize.

Ang isang optimization na ipinapalagay na ang sign na overflow ay hindi mangyayari ay ganap na ligtas kung
ang mga halaga ng mga variable na kasangkot ay tulad na ang overflow ay hindi kailanman, sa katunayan,
mangyari. Samakatuwid ang babalang ito ay madaling makapagbigay ng maling positibo: isang babala tungkol sa code
hindi naman talaga problema yun. Upang makatulong na tumuon sa mahahalagang isyu, ilang babala
natukoy ang mga antas. Walang mga babala na ibinibigay para sa paggamit ng hindi natukoy na nilagdaang overflow
kapag tinatantya kung gaano karaming mga pag-ulit ang kakailanganin ng isang loop, lalo na kung kailan
pagtukoy kung ang isang loop ay isasagawa sa lahat.

-Wstrict-overflow=1
Magbabala tungkol sa mga kaso na parehong kaduda-dudang at madaling iwasan. Halimbawa: "x +
1 > x"; kasama ang -mahigpit-apaw, gagawing simple ito ng compiler sa 1. Ang antas na ito
of -Wstrict-overflow ay pinagana ng -Pader; mas mataas na antas ay hindi, at dapat na
tahasang hiniling.

-Wstrict-overflow=2
Magbabala din tungkol sa iba pang mga kaso kung saan ang isang paghahambing ay pinasimple sa isang pare-pareho. Para sa
halimbawa: "abs (x) >= 0". Mapapasimple lang ito kapag -mahigpit-apaw ay nasa
effect, dahil umaapaw ang "abs (INT_MIN)" sa "INT_MIN", na mas mababa sa zero.
-Wstrict-overflow (na walang antas) ay kapareho ng -Wstrict-overflow=2.

-Wstrict-overflow=3
Magbabala din tungkol sa iba pang mga kaso kung saan ang isang paghahambing ay pinasimple. Halimbawa: "x + 1
> 1" ay gagawing "x > 0".

-Wstrict-overflow=4
Magbabala din tungkol sa iba pang mga pagpapasimple na hindi saklaw ng mga kaso sa itaas. Para sa
halimbawa: "(x * 10) / 5" ay gagawing "x * 2".

-Wstrict-overflow=5
Magbabala din tungkol sa mga kaso kung saan binabawasan ng compiler ang magnitude ng isang pare-pareho
kasangkot sa isang paghahambing. Halimbawa: "x + 2 > y" ay gagawing "x + 1
>= y". Ito ay iniuulat lamang sa pinakamataas na antas ng babala dahil ito
nalalapat ang pagpapasimple sa maraming paghahambing, kaya ang antas ng babalang ito ay magbibigay ng napaka
malaking bilang ng mga maling positibo.

-Wsuggest-attribute=[dalisay|const|Walang balikan]
Babala para sa mga kaso kung saan ang pagdaragdag ng isang katangian ay maaaring maging kapaki-pakinabang. Ang mga katangian sa kasalukuyan
sinusuportahan ay nakalista sa ibaba.

-Wsuggest-attribute=puro
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
Magbabala tungkol sa mga function na maaaring mga kandidato para sa mga attribute na "pure", "const" o
"Walang balikan". Nagbabala lamang ang compiler para sa mga function na makikita sa iba pang compilation
units o (sa kaso ng "pure" at "const") kung hindi nito mapatunayan na ang function
bumabalik ng normal. Normal na bumabalik ang isang function kung hindi ito naglalaman ng infinite
loop at hindi rin bumalik nang abnormal sa pamamagitan ng paghagis, pagtawag ng "abort()" o pag-trap. Ito
ang pagsusuri ay nangangailangan ng opsyon -fipa-pure-const, na pinagana bilang default sa -O at
mas mataas. Ang mas mataas na antas ng pag-optimize ay nagpapabuti sa katumpakan ng pagsusuri.

-Warray-bounds
Ang opsyon na ito ay aktibo lamang kapag -ftree-vrp ay aktibo (default para sa -O2 at sa itaas). Ito
nagbabala tungkol sa mga subscript sa mga array na palaging wala sa hangganan. Ang babalang ito ay
pinagana ng -Pader.

-Wno-div-by-zero
Huwag magbigay ng babala tungkol sa compile-time integer division sa pamamagitan ng zero. Floating-point division sa pamamagitan ng
hindi binabalaan ang zero, dahil maaari itong maging isang lehitimong paraan ng pagkuha ng mga infinity at
NaNs.

-Wsystem-header
Mag-print ng mga mensahe ng babala para sa mga construct na makikita sa mga file ng header ng system. Mga babala mula sa
Ang mga header ng system ay karaniwang pinipigilan, sa pag-aakalang kadalasan ay hindi
ipahiwatig ang mga tunay na problema at gagawin lamang ang output ng compiler na mas mahirap basahin. Gamit
ang pagpipiliang command-line na ito ay nagsasabi sa GCC na maglabas ng mga babala mula sa mga header ng system na parang sila
naganap sa user code. Gayunpaman, tandaan na ang paggamit -Pader kasabay ng opsyong ito
habilin hindi magbabala tungkol sa mga hindi kilalang pragma sa mga header ng system---para doon, -Wunknown-pragmas
dapat ding gamitin.

-Wtrampolines
Babala tungkol sa mga trampoline na nabuo para sa mga pointer sa mga nested function.

Ang trampoline ay isang maliit na piraso ng data o code na nilikha habang tumatakbo
oras sa stack kapag kinuha ang address ng isang nested function, at
ay ginagamit upang tawagan ang nested function nang hindi direkta. Para sa ilang mga target, ito
ay binubuo ng data lamang at sa gayon ay hindi nangangailangan ng espesyal na paggamot. pero,
para sa karamihan ng mga target, ito ay binubuo ng code at sa gayon ay nangangailangan ng stack
upang gawing executable upang gumana nang maayos ang programa.

-Wfloat-pantay
Magbabala kung ang mga floating-point na halaga ay ginagamit sa mga paghahambing ng pagkakapantay-pantay.

Ang ideya sa likod nito ay kung minsan ito ay maginhawa (para sa programmer) na
isaalang-alang ang mga floating-point value bilang mga pagtatantya sa walang katapusan na tumpak na mga tunay na numero.
Kung ginagawa mo ito, kailangan mong mag-compute (sa pamamagitan ng pagsusuri sa code, o sa ilang
sa ibang paraan) ang maximum o malamang na maximum na error na ipinakilala ng computation, at
payagan ito kapag nagsasagawa ng mga paghahambing (at kapag gumagawa ng output, ngunit iyon ay a
magkaibang problema). Sa partikular, sa halip na subukan ang pagkakapantay-pantay, susuriin mo
upang makita kung ang dalawang halaga ay may mga saklaw na magkakapatong; at ito ay tapos na sa
relational operator, kaya malamang na nagkakamali ang mga paghahambing ng pagkakapantay-pantay.

-Wtradisyonal (C at Objective-C lang)
Magbabala tungkol sa ilang partikular na konstruksyon na kumikilos nang iba sa tradisyonal at ISO C. Gayundin
magbabala tungkol sa mga konstruksyon ng ISO C na walang tradisyonal na katumbas ng C, at/o may problema
mga konstruksyon na dapat iwasan.

· Mga macro parameter na lumilitaw sa loob ng mga literal na string sa macro body. Sa
nagaganap ang tradisyonal na pagpapalit ng C macro sa loob ng mga literal na string, ngunit hindi
sa ISO C.

· Sa tradisyonal na C, ang ilang preprocessor na mga direktiba ay hindi umiiral. Tradisyonal
isasaalang-alang lamang ng mga preprocessor ang isang linya bilang isang direktiba kung ang # lumabas sa
hanay 1 sa linya. Samakatuwid -Wtradisyonal nagbabala tungkol sa mga direktiba na
naiintindihan ng tradisyonal na C ngunit papansinin dahil ang # ay hindi lilitaw bilang ang
unang karakter sa linya. Iminumungkahi din nito na itago mo ang mga direktiba tulad ng #pragma
hindi nauunawaan ng tradisyonal na C sa pamamagitan ng pag-indent sa mga ito. Ilang tradisyonal
hindi makikilala ng mga pagpapatupad #elif, kaya nagmumungkahi itong iwasan ito nang buo.

· Isang macro na parang function na lumalabas nang walang mga argumento.

· Ang unary plus operator.

· Ang U integer constant suffix, o ang F or L floating-point constant suffixes.
(Sinusuportahan ng tradisyonal na C ang L suffix sa integer constants.) Tandaan, ang mga ito
lumalabas ang mga suffix sa mga macro na tinukoy sa mga header ng system ng karamihan sa mga modernong system,
hal. ang _MIN/_MAX macros sa " ". Ang paggamit ng mga macro na ito sa user code ay maaaring
karaniwang humahantong sa mga huwad na babala, gayunpaman, mayroon ang pinagsamang preprocessor ng GCC
sapat na konteksto upang maiwasan ang babala sa mga kasong ito.

· Isang function na idineklara na panlabas sa isang bloke at pagkatapos ay ginamit pagkatapos ng pagtatapos ng
harangan.

· Ang isang "switch" na pahayag ay may isang operand ng uri na "mahaba".

· Ang isang di-"static" na deklarasyon ng function ay sumusunod sa isang "static" na isa. Ang construct na ito ay hindi
tinanggap ng ilang tradisyonal na C compiler.

· Ang uri ng ISO ng isang integer constant ay may ibang lapad o signedness mula dito
tradisyonal na uri. Ang babalang ito ay ibinibigay lamang kung ang base ng pare-pareho ay sampu.
Ibig sabihin, ang mga hexadecimal o octal na halaga, na karaniwang kumakatawan sa mga bit pattern, ay hindi
nagbabala tungkol sa.

· Ang paggamit ng ISO string concatenation ay nakita.

· Pagsisimula ng mga awtomatikong pinagsama-samang.

· Ang pagkakakilanlan ay sumasalungat sa mga label. Ang tradisyunal na C ay walang hiwalay na namespace para sa
mga label.

· Pagsisimula ng mga unyon. Kung zero ang initializer, aalisin ang babala.
Ginagawa ito sa ilalim ng pagpapalagay na ang zero initializer sa user code ay lilitaw
nakakondisyon sa hal. "__STDC__" upang maiwasan ang mga nawawalang babala ng initializer at umasa sa
default na pagsisimula sa zero sa tradisyonal na C case.

· Mga conversion sa pamamagitan ng mga prototype sa pagitan ng mga fixed/floating-point value at vice versa. Ang
ang kawalan ng mga prototype na ito kapag nag-compile sa tradisyonal na C ay magdudulot ng seryoso
mga problema. Ito ay isang subset ng mga posibleng babala sa conversion, para sa buong hanay
gamitin -Wtradisyonal-pagbabagong-loob.

· Paggamit ng ISO C style function na mga kahulugan. Ang babalang ito ay sadyang hindi Nagbigay
para sa mga prototype declaration o variadic function dahil ang mga feature na ito ng ISO C ay
lumalabas sa iyong code kapag gumagamit ng tradisyonal na C compatibility macro ng libiberty,
"PARAMS" at "VPARAMS". Ang babalang ito ay na-bypass din para sa mga nested function
dahil ang feature na iyon ay isa nang extension ng GCC at sa gayon ay hindi nauugnay sa
tradisyonal na C compatibility.

-Wtradisyonal-pagbabagong-loob (C at Objective-C lang)
Magbabala kung ang isang prototype ay nagdudulot ng isang uri ng conversion na iba sa kung ano ang mangyayari
sa parehong argumento sa kawalan ng isang prototype. Kabilang dito ang mga conversion ng
fixed point sa lumulutang at vice versa, at mga conversion na nagbabago sa lapad o
pagpirma ng isang fixed-point argument maliban kung pareho sa default na promosyon.

-Wdeclaration-after-statement (C at Objective-C lang)
Magbabala kapag may nakitang deklarasyon pagkatapos ng isang pahayag sa isang bloke. Ang construct na ito, kilala
mula sa C++, ay ipinakilala sa ISO C99 at bilang default ay pinapayagan sa GCC. Hindi ito
suportado ng ISO C90 at hindi suportado ng mga bersyon ng GCC bago ang GCC 3.0.

-Wundef
Magbabala kung ang isang hindi natukoy na identifier ay sinusuri sa isang #kung Directive.

-Wno-endif-label
Huwag magbigay ng babala sa tuwing an #iba o isang #endif ay sinusundan ng text.

-Wshadow
Magbabala sa tuwing ang isang lokal na variable o uri ng deklarasyon ay nililiman ang isa pang variable,
parameter, uri, o miyembro ng klase (sa C++), o sa tuwing may built-in na function
may anino. Tandaan na sa C++, ang compiler ay hindi magbabala kung ang isang lokal na variable shadows a
struct/class/enum, ngunit babala kung ito ay shadow ng isang tahasang typedef.

-Wlarger-than=Len
Magbabala sa tuwing may bagay na mas malaki kaysa sa Len ang mga byte ay tinukoy.

-Wframe-mas malaki-kaysa=Len
Magbabala kung ang laki ng isang function frame ay mas malaki kaysa sa Len byte. Tapos na ang computation
upang matukoy ang laki ng stack frame ay tinatayang at hindi konserbatibo. Ang totoo
ang mga kinakailangan ay maaaring medyo mas malaki kaysa sa Len kahit na hindi ka nakakakuha ng babala. Sa
karagdagan, anumang puwang na inilalaan sa pamamagitan ng "alloca", variable-length array, o nauugnay
Ang mga konstruksyon ay hindi kasama ng tagatala kapag tinutukoy kung maglalabas o hindi ng a
babala.

-Wno-free-nonheap-object
Huwag magbigay ng babala kapag sinusubukang palayain ang isang bagay na hindi inilaan sa heap.

-Wstack-usage=Len
Magbabala kung ang paggamit ng stack ng isang function ay maaaring mas malaki kaysa sa Len byte. Ang computation
ginawa upang matukoy ang paggamit ng stack ay konserbatibo. Anumang puwang na inilaan sa pamamagitan ng "alloca",
variable-length array, o mga kaugnay na construct ay kasama ng compiler kapag
pagtukoy kung maglalabas ng babala o hindi.

Ang mensahe ay naaayon sa output ng -fstack-paggamit.

· Kung ang paggamit ng stack ay ganap na static ngunit lumampas sa tinukoy na halaga, ito ay:

babala: ang paggamit ng stack ay 1120 bytes

· Kung ang paggamit ng stack ay (bahagyang) dynamic ngunit may hangganan, ito ay:

babala: ang paggamit ng stack ay maaaring 1648 bytes

· Kung ang paggamit ng stack ay (bahagyang) dynamic at hindi limitado, ito ay:

babala: maaaring walang hangganan ang paggamit ng stack

-Wunsafe-loop-optimizations
Magbabala kung ang loop ay hindi ma-optimize dahil ang compiler ay hindi maaaring maglagay ng anuman
ang mga hangganan ng mga indeks ng loop. Sa -funsafe-loop-optimizations babala kung ang compiler
gumawa ng gayong mga pagpapalagay.

-Wno-pedantic-ms-format (MinGW target lang)
Hindi pinapagana ang mga babala tungkol sa hindi ISO na "printf" / "scanf" na format ng width specifier na "I32",
Ginagamit ang "I64", at "I" sa mga target ng Windows depende sa runtime ng MS, kapag gumagamit ka
ang mga pagpipilian -Wformat at -pedantic walang gnu-extension.

-Wpointer-arith
Magbabala tungkol sa anumang bagay na nakasalalay sa "laki ng" isang uri ng function o ng "walang bisa". GNU C
itinatalaga ang mga uri na ito ng sukat na 1, para sa kaginhawahan sa mga kalkulasyon na may "void *"
mga pointer at pointer sa mga function. Sa C++, babalaan din kapag may operasyon sa aritmetika
nagsasangkot ng "NULL". Ang babalang ito ay pinagana rin ng -pedantic.

-Wtype-limitasyon
Magbabala kung palaging tama o palaging mali ang isang paghahambing dahil sa limitadong saklaw ng
uri ng data, ngunit huwag magbigay ng babala para sa patuloy na mga expression. Halimbawa, bigyan ng babala kung ang isang unsigned
variable ay inihambing laban sa zero sa < or >=. Ang babalang ito ay pinagana rin ng
-Wextra.

-Wbad-function-cast (C at Objective-C lang)
Magbabala sa tuwing ang isang function na tawag ay na-cast sa isang hindi tugmang uri. Halimbawa, bigyan ng babala kung
Ang "int malloc()" ay inihagis sa "kahit ano *".

-Wc++-compat (C at Objective-C lang)
Magbabala tungkol sa mga ISO C construct na nasa labas ng karaniwang subset ng ISO C at ISO
C++, hal. kahilingan para sa implicit na conversion mula sa "void *" sa isang pointer sa non-"void"
uri.

-Wc++11-compat (C++ at Objective-C++ lang)
Babala tungkol sa mga konstruksyon ng C++ na ang kahulugan ay naiiba sa pagitan ng ISO C++ 1998 at ISO C++ 2011,
hal, mga identifier sa ISO C++ 1998 na mga keyword sa ISO C++ 2011. Ang babalang ito
buksan -Wnarrowing at pinagana ng -Pader.

-Wcast-qual
Magbabala sa tuwing may ipapalabas na pointer upang maalis ang isang uri ng kwalipikasyon mula sa target na uri.
Halimbawa, magbabala kung ang isang "const char *" ay na-cast sa isang ordinaryong "char *".

Magbabala din kapag gumagawa ng cast na nagpapakilala ng uri ng kwalipikasyon sa hindi ligtas na paraan. Para sa
halimbawa, ang pag-cast ng "char **" sa "const char **" ay hindi ligtas, tulad ng sa halimbawang ito:

Ang /* p ay char ** value. */
const char **q = (const char **) p;
/* Ang pagtatalaga ng readonly string sa const char * ay OK. */
*q = "string";
/* Ngayon char** pointer ay tumuturo sa read-only memory. */
**p = 'b';

-Wcast-align
Magbabala sa tuwing ang isang pointer ay na-cast na ang kinakailangang pagkakahanay ng target ay
nadagdagan. Halimbawa, magbabala kung ang isang "char *" ay na-cast sa isang "int *" sa mga machine kung saan
ang mga integer ay maaari lamang ma-access sa dalawa o apat na byte na hangganan.

-Magsulat-mga string
Kapag kino-compile ang C, bigyan ang string constants ng uri na "const char[haba]" kaya ang pagkopya
ang address ng isa sa isang hindi "const" "char *" na pointer ay makakakuha ng babala. Ang mga ito
ang mga babala ay makakatulong sa iyo na mahanap sa compile time code na maaaring subukang magsulat sa isang string
pare-pareho, ngunit kung naging maingat ka sa paggamit ng "const" sa mga deklarasyon
at mga prototype. Kung hindi, ito ay magiging isang istorbo lamang. Ito ang dahilan kung bakit hindi namin ginawa
-Pader humiling ng mga babalang ito.

Kapag kino-compile ang C++, bigyan ng babala ang tungkol sa hindi na ginagamit na conversion mula sa mga literal na string patungo sa "char
*". Ang babalang ito ay pinagana bilang default para sa mga programang C++.

-Wclobbered
Babala para sa mga variable na maaaring baguhin ng longjmp or vfork. Ang babalang ito ay din
pinagana ng -Wextra.

-Wconversion
Magbabala para sa mga implicit na conversion na maaaring magbago ng halaga. Kabilang dito ang mga conversion
sa pagitan ng tunay at integer, tulad ng "abs (x)" kapag ang "x" ay "doble"; mga conversion sa pagitan ng
nilagdaan at hindi nalagdaan, tulad ng "unsigned ui = -1"; at mga conversion sa mas maliliit na uri, tulad ng
"sqrtf (M_PI)". Huwag magbigay ng babala para sa mga tahasang cast tulad ng "abs ((int) x)" at "ui =
(unsigned) -1", o kung ang halaga ay hindi binago ng conversion tulad ng sa "abs (2.0)".
Maaaring hindi paganahin ng
paggamit -Wno-sign-conversion.

Para sa C++, magbabala din para sa nakakalito na resolution ng overload para sa mga conversion na tinukoy ng user; at
mga conversion na hindi gagamit ng uri ng operator ng conversion: mga conversion sa "walang bisa", ang
parehong uri, isang batayang klase o isang sanggunian sa kanila. Mga babala tungkol sa mga conversion sa pagitan ng
ang mga signed at unsigned integer ay hindi pinagana bilang default sa C++ maliban kung -Wsign-conversion
ay tahasang pinagana.

-Wno-conversion-null (C++ at Objective-C++ lang)
Huwag magbigay ng babala para sa mga conversion sa pagitan ng "NULL" at mga hindi-pointer na uri. -Wconversion-null is
pinagana bilang default.

-Wzero-bilang-null-pointer-constant (C++ at Objective-C++ lang)
Magbabala kapag ang literal na '0' ay ginamit bilang null pointer constant. Ito ay maaaring maging kapaki-pakinabang sa
mapadali ang conversion sa "nullptr" sa C++11.

-Wempty-body
Magbabala kung ang isang walang laman na katawan ay nangyayari sa isang if, iba or do habang pahayag. Ang babalang ito ay
pinagana rin ng -Wextra.

-Wenum-kumpara
Magbabala tungkol sa isang paghahambing sa pagitan ng mga halaga ng iba't ibang uri ng enumerated. Sa C++ enumeral
ang mga hindi pagkakatugma sa mga conditional na expression ay nasuri din at ang babala ay pinagana ng
default. Sa C ang babalang ito ay pinagana ng -Pader.

-Wjump-misses-init (C, Objective-C lang)
Magbabala kung ang isang "goto" na pahayag o isang "switch" na pahayag ay tumalon sa kabila
pagsisimula ng isang variable, o tumalon pabalik sa isang label pagkatapos ng variable
pinasimulan. Nagbabala lamang ito tungkol sa mga variable na sinisimulan kapag sila ay
ipinahayag. Ang babalang ito ay sinusuportahan lamang para sa C at Objective-C; sa C++ ganitong uri
Ang sangay ay isang error sa anumang kaso.

-Wjump-misses-init ay kasama sa -Wc++-compat. Maaari itong i-disable gamit ang
-Wno-jump-misses-init pagpipilian.

-Wsign-ihambing
Magbabala kapag ang paghahambing sa pagitan ng nilagdaan at hindi nalagdaan na mga halaga ay maaaring makagawa ng mali
resulta kapag ang nilagdaang halaga ay na-convert sa hindi nalagdaan. Naka-enable din ang babalang ito
by -Wextra; upang makuha ang iba pang mga babala ng -Wextra nang walang babalang ito, gamitin -Wextra
-Wno-sign-compare.

-Wsign-conversion
Magbabala para sa mga implicit na conversion na maaaring magbago ng tanda ng isang integer na halaga, tulad ng
pagtatalaga ng signed integer expression sa unsigned integer variable. Isang tahasang
pinatahimik ni cast ang babala. Sa C, ang pagpipiliang ito ay pinagana din ng -Wconversion.

-Waddress
Magbabala tungkol sa kahina-hinalang paggamit ng mga memory address. Kabilang dito ang paggamit ng address ng a
function sa isang conditional expression, gaya ng "void func(void); if (func)", at
paghahambing laban sa memory address ng isang literal na string, gaya ng "if (x == "abc")".
Ang ganitong mga paggamit ay karaniwang nagpapahiwatig ng isang error sa programmer: ang address ng isang function palagi
sinusuri sa totoo, kaya ang kanilang paggamit sa isang kondisyon ay karaniwang nagpapahiwatig na ang programmer
nakalimutan ang mga panaklong sa isang function na tawag; at paghahambing laban sa mga literal na string
nagreresulta sa hindi natukoy na pag-uugali at hindi portable sa C, kaya karaniwang ipinapahiwatig ng mga ito
na nilayon ng programmer na gamitin ang "strcmp". Ang babalang ito ay pinagana ng -Pader.

-Wlogical-op
Magbabala tungkol sa kahina-hinalang paggamit ng mga lohikal na operator sa mga expression. Kabilang dito ang paggamit
mga lohikal na operator sa mga konteksto kung saan ang isang bit-wise na operator ay malamang na inaasahan.

-Waggregate-return
Magbabala kung ang anumang mga function na nagbabalik ng mga istruktura o unyon ay tinukoy o tinatawag. (Sa
mga wika kung saan maaari kang magbalik ng array, nagdudulot din ito ng babala.)

-Wno-mga katangian
Huwag magbigay ng babala kung ang isang hindi inaasahang "__attribute__" ay ginamit, tulad ng mga hindi nakikilalang katangian,
mga katangian ng function na inilapat sa mga variable, atbp. Hindi nito pipigilan ang mga error para sa
maling paggamit ng mga sinusuportahang katangian.

-Wno-builtin-macro-redefined
Huwag magbigay ng babala kung ang ilang mga built-in na macro ay muling tinukoy. Pinipigilan nito ang mga babala para sa
redefinition ng "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", at
"__BASE_FILE__".

-Mahigpit na mga prototype (C at Objective-C lang)
Magbabala kung ang isang function ay idineklara o tinukoy nang hindi tinukoy ang mga uri ng argumento. (An
pinahihintulutan ang lumang-style na kahulugan ng function nang walang babala kung nauunahan ng a
deklarasyon na tumutukoy sa mga uri ng argumento.)

-Wold-style-deklarasyon (C at Objective-C lang)
Magbabala para sa mga luma na paggamit, ayon sa C Standard, sa isang deklarasyon. Para sa
halimbawa, bigyan ng babala kung ang mga tagatukoy ng klase ng imbakan tulad ng "static" ay hindi ang mga unang bagay sa a
deklarasyon. Ang babalang ito ay pinagana rin ng -Wextra.

-Wold-style-kahulugan (C at Objective-C lang)
Magbabala kung ginamit ang isang lumang-style na kahulugan ng function. Nagbibigay ng babala kahit na mayroon
isang nakaraang prototype.

-Wmissing-parameter-type (C at Objective-C lang)
Ang isang parameter ng function ay idineklara nang walang uri ng specifier sa K&R-style na mga function:

void foo(bar) { }

Ang babalang ito ay pinagana rin ng -Wextra.

-Wmissing-prototypes (C at Objective-C lang)
Magbabala kung ang isang pandaigdigang function ay tinukoy nang walang nakaraang prototype na deklarasyon. Ito
ang babala ay ibinibigay kahit na ang kahulugan mismo ay nagbibigay ng isang prototype. Ang layunin ay upang
tuklasin ang mga pandaigdigang function na hindi idineklara sa mga file ng header.

-Wmissing-deklarasyon
Magbabala kung ang isang pandaigdigang function ay tinukoy nang walang naunang deklarasyon. Gawin ito kahit na
ang kahulugan mismo ay nagbibigay ng isang prototype. Gamitin ang opsyong ito para makita ang global
mga function na hindi idineklara sa mga file ng header. Sa C++, walang ibinibigay na babala para sa
mga template ng function, o para sa mga inline na function, o para sa mga function sa mga anonymous na namespace.

-Wmissing-field-initializers
Magbabala kung ang initializer ng isang istraktura ay may nawawalang ilang field. Halimbawa, ang mga sumusunod
ang code ay magdudulot ng ganitong babala, dahil ang "xh" ay tahasang zero:

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

Ang pagpipiliang ito ay hindi nagbabala tungkol sa mga itinalagang initializer, kaya ang sumusunod na pagbabago
hindi magpapalitaw ng babala:

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

Ang babalang ito ay kasama sa -Wextra. Para makakuha ng iba -Wextra mga babala kung wala ang isang ito,
gamitin -Wextra -Wno-missing-field-initializers.

-Wmissing-format-attribute
Magbabala tungkol sa mga function pointer na maaaring mga kandidato para sa mga attribute na "format." Tandaan
ito ay mga posibleng kandidato lamang, hindi mga ganap. Huhulaan ng GCC ang function na iyon
mga pointer na may mga katangiang "format" na ginagamit sa pagtatalaga, pagsisimula,
Ang pagpasa ng parameter o pagbabalik ng mga pahayag ay dapat na may katumbas na katangiang "format".
sa resultang uri. Ibig sabihin sa kaliwang bahagi ng pagtatalaga o pagsisimula,
ang uri ng variable ng parameter, o ang uri ng pagbabalik ng naglalaman ng function
ayon sa pagkakabanggit ay dapat ding magkaroon ng katangiang "format" upang maiwasan ang babala.

Magbabala rin ang GCC tungkol sa mga kahulugan ng function na maaaring mga kandidato para sa "format"
mga katangian. Muli, ito ay mga posibleng kandidato lamang. Hulaan ng GCC ang "format" na iyon
maaaring naaangkop ang mga katangian para sa anumang function na tumatawag sa isang function tulad ng "vprintf"
o "vscanf", ngunit maaaring hindi ito palaging nangyayari, at ilang mga function kung saan
Ang mga katangian ng "format" ay naaangkop ay maaaring hindi matukoy.

-Wno-multichar
Huwag bigyan ng babala kung ang isang multicharacter constant ('FOOF') Ginagamit. Karaniwang ipinapahiwatig nila ang a
typo sa code ng user, dahil mayroon silang mga value na tinukoy sa pagpapatupad, at hindi dapat
ginamit sa portable code.

-Wnormalized=
Sa ISO C at ISO C++, magkaiba ang dalawang identifier kung magkaiba ang sequence ng mga ito
mga karakter. Gayunpaman, minsan kapag ang mga character ay nasa labas ng pangunahing hanay ng character na ASCII
ay ginagamit, maaari kang magkaroon ng dalawang magkaibang pagkakasunud-sunod ng character na magkapareho ang hitsura. Para maiwasan
pagkalito, ang pamantayang ISO 10646 ay nagtatakda ng ilan normalisasyon patakaran na kapag inilapat
tiyakin na ang dalawang sequence na magkapareho ang hitsura ay magiging parehong sequence. GCC
maaaring balaan ka kung gumagamit ka ng mga identifier na hindi pa na-normalize; pagpipiliang ito
kinokontrol ang babalang iyon.

Mayroong apat na antas ng babala na sinusuportahan ng GCC. Ang default ay -Wnormalized=nfc,
na nagbabala tungkol sa anumang identifier na wala sa ISO 10646 "C" na normalized na form,
NFC. Ang NFC ay ang inirerekomendang form para sa karamihan ng mga gamit.

Sa kasamaang palad, may ilang mga character na pinapayagan sa mga identifier ng ISO C at ISO C++
na, kapag ginawang NFC, ay hindi pinapayagan sa mga identifier. Ibig sabihin, walang paraan
upang gamitin ang mga simbolo na ito sa portable na ISO C o C++ at ilagay ang lahat ng iyong identifier sa NFC.
-Wnormalized=id pinipigilan ang babala para sa mga karakter na ito. Inaasahan ang hinaharap
itatama ito ng mga bersyon ng mga pamantayang kasangkot, kaya naman hindi ang pagpipiliang ito
ang default.

Maaari mong isara ang babala para sa lahat ng character sa pamamagitan ng pagsulat -Wnormalized=wala. Mo
Gusto lang gawin ito kung gumagamit ka ng ibang pamamaraan ng normalisasyon (tulad ng
"D"), dahil kung hindi, madali kang makakagawa ng mga bug na literal na imposible
makita.

Ang ilang mga character sa ISO 10646 ay may natatanging kahulugan ngunit magkapareho ang hitsura sa ilang mga font
o mga pamamaraan ng pagpapakita, lalo na kapag nailapat na ang pag-format. Halimbawa
Ang "\u207F", "SUPERSCRIPT LATIN MALIIT NA LETTER N", ay ipapakita tulad ng isang regular na "n"
na inilagay sa isang superscript. Tinutukoy ng ISO 10646 ang NFKC normalisasyon
scheme na i-convert din ang lahat ng ito sa isang karaniwang anyo, at magbabala ang GCC kung ang iyong
wala sa NFKC ang code kung gagamit ka -Wnormalized=nfkc. Ang babalang ito ay maihahambing sa
babala tungkol sa bawat identifier na naglalaman ng letrang O dahil maaaring malito ito
na may digit na 0, at sa gayon ay hindi ang default, ngunit maaaring maging kapaki-pakinabang bilang isang lokal na coding
convention kung hindi maayos ang programming environment para ipakita ang mga ito
mga karakter nang malinaw.

-Wno-deprecated
Huwag magbigay ng babala tungkol sa paggamit ng mga hindi na ginagamit na feature.

-Wno-deprecated-declarations
Huwag magbigay ng babala tungkol sa paggamit ng mga function, variable, at uri na minarkahan bilang hindi na ginagamit ng
gamit ang attribute na "deprecated".

-Wno-overflow
Huwag bigyan ng babala ang tungkol sa pag-overflow ng compile-time sa mga pare-parehong expression.

-Woverride-init (C at Objective-C lang)
Magbabala kung ang isang inisyal na field na walang mga side effect ay na-override kapag gumagamit ng itinalaga
mga initializer.

Ang babalang ito ay kasama sa -Wextra. Para makakuha ng iba -Wextra mga babala kung wala ang isang ito,
gamitin -Wextra -Wno-override-init.

-Nakabalot
Magbabala kung ang isang istraktura ay binibigyan ng naka-pack na katangian, ngunit ang naka-pack na katangian ay walang
epekto sa layout o sukat ng istraktura. Maaaring mali ang pagkakahanay sa mga ganitong istruktura
maliit na benepisyo. Halimbawa, sa code na ito, ang variable na "fx" sa "struct bar" ay
maging mali ang pagkakatugma kahit na ang "struct bar" ay wala mismo ng naka-pack na katangian:

struct foo {
intx;
char a, b, c, d;
} __attribute __ ((naka-pack));
struct bar {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
Ang 4.1, 4.2 at 4.3 na serye ng GCC ay binabalewala ang "naka-pack" na katangian sa mga bit-field ng uri
"char". Naayos na ito sa GCC 4.4 ngunit ang pagbabago ay maaaring humantong sa mga pagkakaiba sa
layout ng istraktura. Ipinapaalam sa iyo ng GCC kapag nagbago ang offset ng naturang field sa GCC
4.4. Halimbawa, wala nang 4-bit na padding sa pagitan ng field na "a" at "b" dito
Istraktura:

struct foo
{
char a:4;
char b:8;
} __attribute__ ((naka-pack na));

Ang babalang ito ay pinagana bilang default. Gamitin -Wno-packed-bitfield-compat upang huwag paganahin ito
babala.

-Wpadded
Magbabala kung ang padding ay kasama sa isang istraktura, alinman upang ihanay ang isang elemento ng
istraktura o upang ihanay ang buong istraktura. Minsan kapag nangyari ito posible
upang muling ayusin ang mga patlang ng istraktura upang mabawasan ang padding at upang gawin ang
mas maliit ang istraktura.

-Wredundant-decls
Magbabala kung mayroong anumang idineklara nang higit sa isang beses sa parehong saklaw, kahit na sa mga kaso kung saan
maramihang deklarasyon ay wasto at walang pagbabago.

-Wnested-externs (C at Objective-C lang)
Magbabala kung ang isang "extern" na deklarasyon ay nakatagpo sa loob ng isang function.

-Winline
Magbabala kung ang isang function ay hindi ma-inline at ito ay idineklara bilang inline. Kahit na ito
opsyon, hindi magbabala ang compiler tungkol sa mga pagkabigo sa mga inline na function na idineklara sa
mga header ng system.

Gumagamit ang compiler ng iba't ibang heuristics upang matukoy kung mag-inline a o hindi
function. Halimbawa, isinasaalang-alang ng compiler ang laki ng pagiging function
inlined at ang dami ng inlining na nagawa na sa kasalukuyang function.
Samakatuwid, ang tila hindi gaanong makabuluhang mga pagbabago sa source program ay maaaring maging sanhi ng
mga babala na ginawa ng -Winline upang lumitaw o mawala.

-Wno-invalid-offsetof (C++ at Objective-C++ lang)
Pigilan ang mga babala sa paglalapat ng offsetof macro sa isang uri na hindi POD. Ayon kay
ang 1998 ISO C++ standard, inilalapat offsetof sa isang hindi-POD na uri ay hindi natukoy. Sa
umiiral na mga pagpapatupad ng C++, gayunpaman, offsetof karaniwang nagbibigay ng makabuluhang resulta
kahit na inilapat sa ilang uri ng mga hindi uri ng POD. (Tulad ng isang simple istruktura na
nabigo na maging isang uri ng POD dahil lamang sa pagkakaroon ng constructor.) Ang flag na ito ay para sa
mga user na nakakaalam na nagsusulat sila ng nonportable code at sinasadya
piniling huwag pansinin ang babala tungkol dito.

Ang mga paghihigpit sa offsetof maaaring i-relax sa hinaharap na bersyon ng pamantayan ng C++.

-Wno-int-to-pointer-cast
Pigilan ang mga babala mula sa mga cast hanggang sa uri ng pointer ng isang integer na may ibang laki. Sa
C++, ang pag-cast sa isang uri ng pointer na mas maliit na laki ay isang error. Wint-to-pointer-cast is
pinagana bilang default.

-Wno-pointer-to-int-cast (C at Objective-C lang)
Pigilan ang mga babala mula sa mga cast mula sa isang pointer patungo sa isang uri ng integer na may ibang laki.

-Winvalid-pch
Magbabala kung may nakitang precompiled na header sa path ng paghahanap ngunit hindi magagamit.

-Wlong-long
Babala kung mahaba mahaba uri ang ginagamit. Ito ay pinagana ng alinman -pedantic or -Wtradisyonal
sa ISO C90 at C++98 mode. Upang pigilan ang mga mensahe ng babala, gamitin -Wno-long-long.

-Wvariadic-macros
Babala kung ginagamit ang mga variadic macro sa pedantic na ISO C90 mode, o ang GNU alternate syntax
kapag nasa pedantic na ISO C99 mode. Ito ay default. Upang pigilan ang mga mensahe ng babala, gamitin
-Wno-variadic-macros.

-Wvector-operasyon-pagganap
Babala kung ang operasyon ng vector ay hindi ipinatupad sa pamamagitan ng mga kakayahan ng SIMD ng arkitektura.
Pangunahing kapaki-pakinabang para sa pag-tune ng pagganap. Maaaring ipatupad ang operasyon ng vector
"piecewise", na nangangahulugan na ang scalar operation ay ginagawa sa bawat vector
elemento; "kahanay", na nangangahulugan na ang pagpapatakbo ng vector ay ipinatupad gamit
mas malawak na uri ng mga scalar, na karaniwang mas mahusay sa pagganap; at "bilang isang solong
scalar", na nangangahulugan na ang vector ay umaangkop sa isang uri ng scalar.

-Wvla
Magbabala kung ginagamit ang variable length array sa code. -Wno-vla pipigilan ang
-pedantic babala ng variable na haba ng array.

-Wvolatile-register-var
Magbabala kung ang isang variable ng rehistro ay idineklara na pabagu-bago. Ang pabagu-bago ng isip ay hindi
pagbawalan ang lahat ng mga pag-optimize na maaaring mag-alis ng mga pagbabasa at/o pagsusulat para magparehistro
mga variable. Ang babalang ito ay pinagana ng -Pader.

-Wdisabled-optimization
Magbabala kung ang hiniling na optimization pass ay hindi pinagana. Ang babalang ito ay hindi karaniwan
ipahiwatig na mayroong anumang mali sa iyong code; ito ay nagpapahiwatig lamang na ang GCC's
hindi nagawang pangasiwaan ng mga optimizer ang code nang epektibo. Kadalasan, ang problema ay iyon
ang iyong code ay masyadong malaki o masyadong kumplikado; Tatanggi ang GCC na i-optimize ang mga programa kapag ang
optimization mismo ay malamang na tumagal ng labis na dami ng oras.

-Wpointer-sign (C at Objective-C lang)
Magbabala para sa pagpasa ng argumento ng pointer o pagtatalaga na may ibang pagpirma. Ito
ang opsyon ay sinusuportahan lamang para sa C at Objective-C. Ito ay ipinahihiwatig ng -Pader at sa pamamagitan ng
-pedantic, na maaaring hindi paganahin sa -Wno-pointer-sign.

-Wstack-tagapagtanggol
Ang opsyon na ito ay aktibo lamang kapag -fstack-tagapagtanggol ay aktibo. Nagbabala ito tungkol sa mga pag-andar
na hindi mapoprotektahan laban sa stack smashing.

-Wno-mudflap
Pigilan ang mga babala tungkol sa mga konstruksyon na hindi maaaring gamitin -fmudflap.

-Woverlength-strings
Magbabala tungkol sa mga string constant na mas mahaba kaysa sa "minimum maximum" na haba
tinukoy sa pamantayang C. Sa pangkalahatan, pinapayagan ng mga modernong compiler ang mga string constants na
ay mas mahaba kaysa sa pinakamababang limitasyon ng pamantayan, ngunit ang mga napakadaladalang programa ay dapat
iwasang gumamit ng mas mahabang string.

Nalalapat ang limitasyon pagkatapos string constant concatenation, at hindi binibilang ang trailing
NUL. Sa C90, ang limitasyon ay 509 character; sa C99, ito ay itinaas sa 4095. C++98 ay
hindi tumukoy ng normative minimum maximum, kaya hindi kami nag-diagnose ng mga overlength na string
C++.

Ang pagpipiliang ito ay ipinahiwatig ng -pedantic, at maaaring hindi paganahin sa -Wno-overlength-strings.

-Wunsuffixed-float-constants (C at Objective-C lang)
Magbibigay ang GCC ng babala para sa anumang floating constant na walang suffix. Kailan
ginamit kasama ng -Wsystem-header babalaan nito ang tungkol sa mga naturang constant sa header ng system
mga file. Maaari itong maging kapaki-pakinabang kapag naghahanda ng code na gagamitin sa "FLOAT_CONST_DECIMAL64"
pragma mula sa decimal na floating-point extension hanggang C99.

Options para Pag-debug Iyong Programa or GCC
Ang GCC ay may iba't ibang espesyal na opsyon na ginagamit para sa pag-debug alinman sa iyong program o GCC:

-g Gumawa ng impormasyon sa pag-debug sa katutubong format ng operating system (mga saksak, COFF,
XCOFF, o DWARF 2). Maaaring gumana ang GDB sa impormasyon sa pag-debug na ito.

Sa karamihan ng mga system na gumagamit ng stabs format, -g nagbibigay-daan sa paggamit ng karagdagang impormasyon sa pag-debug
na ang GDB lamang ang maaaring gumamit; ang karagdagang impormasyon na ito ay ginagawang mas mahusay ang pag-debug sa GDB ngunit
ay malamang na mag-crash ng iba pang mga debugger o tumanggi na basahin ang programa. Kung gusto mo
para makontrol para tiyak kung bubuo ng karagdagang impormasyon, gamitin -gstabs+,
-gstabs, -gxcoff+, -gxcoff, O -gvms (tingnan sa ibaba).

Pinapayagan ka ng GCC na gamitin -g sa -O. Ang mga shortcut na kinuha ng na-optimize na code ay maaaring
paminsan-minsan ay gumagawa ng mga nakakagulat na resulta: ang ilang mga variable na iyong idineklara ay maaaring wala sa
lahat; ang daloy ng kontrol ay maaaring madaling lumipat kung saan hindi mo ito inaasahan; ilang mga pahayag ay maaaring
hindi maipapatupad dahil kinukuwenta nila ang mga pare-parehong resulta o ang kanilang mga halaga ay nasa
kamay; ang ilang mga pahayag ay maaaring isagawa sa iba't ibang mga lugar dahil sila ay inilipat sa labas
mga loop

Gayunpaman, ito ay nagpapatunay na posible na i-debug ang na-optimize na output. Ginagawa nitong makatwiran
para gamitin ang optimizer para sa mga program na maaaring may mga bug.

Ang mga sumusunod na opsyon ay kapaki-pakinabang kapag nabuo ang GCC na may kakayahan para sa higit pa
kaysa sa isang format ng pag-debug.

-ggdb
Gumawa ng impormasyon sa pag-debug para magamit ng GDB. Nangangahulugan ito na gamitin ang pinaka nagpapahayag
available ang format (DWARF 2, stabs, o ang native na format kung wala sa mga iyon
suportado), kasama ang mga extension ng GDB kung posible.

-gstabs
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), nang walang GDB
mga extension. Ito ang format na ginagamit ng DBX sa karamihan ng mga BSD system. Sa MIPS, Alpha at
System V Release 4 system ang pagpipiliang ito ay gumagawa ng stabs debugging output na hindi
naiintindihan ng DBX o SDB. Sa System V Release 4 system ang opsyong ito ay nangangailangan ng GNU
nagtitipon

-felimate-unused-debug-symbols
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), para lamang sa mga simbolo
na ginagamit talaga.

-femit-class-debug-laging
Sa halip na maglabas ng impormasyon sa pag-debug para sa isang klase ng C++ sa isang object file lamang,
ilabas ito sa lahat ng object file gamit ang klase. Ang pagpipiliang ito ay dapat gamitin lamang sa
mga debugger na hindi kayang pangasiwaan ang paraan ng karaniwang paglalabas ng GCC ng impormasyon sa pag-debug
para sa mga klase dahil ang paggamit ng opsyong ito ay magpapataas ng laki ng impormasyon sa pag-debug
ng kasing dami ng salik ng dalawa.

-fno-debug-types-section
Bilang default kapag gumagamit ng DWARF v4 o mas mataas na uri ng DIES ay ilalagay sa kanilang sarili
.debug_types na seksyon sa halip na gawin silang bahagi ng .debug_info na seksyon. Ito ay
mas mahusay na ilagay ang mga ito sa isang hiwalay na seksyon ng comdat dahil magiging ang linker
kayang tanggalin ang mga duplicate. Ngunit hindi lahat ng DWARF consumer ay sumusuporta sa mga seksyong .debug_types
pa.

-gstabs+
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), gamit ang GNU
mga extension na naiintindihan lamang ng GNU debugger (GDB). Ang paggamit ng mga extension na ito ay
malamang na mag-crash ang iba pang mga debugger o tumanggi na basahin ang programa.

-gcoff
Gumawa ng impormasyon sa pag-debug sa COFF na format (kung sinusuportahan iyon). Ito ang
format na ginagamit ng SDB sa karamihan ng System V system bago ang System V Release 4.

-gxcoff
Gumawa ng impormasyon sa pag-debug sa format na XCOFF (kung sinusuportahan iyon). Ito ang
format na ginagamit ng DBX debugger sa IBM RS/6000 system.

-gxcoff+
Gumawa ng impormasyon sa pag-debug sa format na XCOFF (kung sinusuportahan iyon), gamit ang GNU
mga extension na naiintindihan lamang ng GNU debugger (GDB). Ang paggamit ng mga extension na ito ay
malamang na mag-crash ang iba pang mga debugger o tumanggi na basahin ang program, at maaaring magdulot
mabibigo ang mga assembler maliban sa GNU assembler (GAS) na may error.

-gdwarf-bersyon
Gumawa ng impormasyon sa pag-debug sa format na DWARF (kung sinusuportahan iyon). Ito ang
format na ginamit ng DBX sa IRIX 6. Ang halaga ng bersyon maaaring alinman sa 2, 3 o 4; ang
ang default na bersyon ay 2.

Tandaan na sa DWARF na bersyon 2 ang ilang mga port ay nangangailangan, at palaging gagamit, ilang hindi-
magkasalungat na DWARF 3 extension sa mga unwind table.

Maaaring mangailangan ang Bersyon 4 ng GDB 7.0 at -fvar-tracking-assignments para sa pinakamataas na benepisyo.

-grecord-gcc-switch
Ang switch na ito ay nagiging sanhi ng mga opsyon sa command-line na ginagamit upang i-invoke ang compiler na maaaring
makakaapekto sa pagbuo ng code na idaragdag sa DW_AT_producer attribute sa DWARF
impormasyon sa pag-debug. Ang mga opsyon ay pinagsama sa mga puwang na naghihiwalay sa kanila mula sa
isa't isa at mula sa bersyon ng compiler. Tingnan din -frecord-gcc-switch Para sa iba
paraan ng pag-iimbak ng mga opsyon sa compiler sa object file.

-gno-record-gcc-switch
Huwag payagan ang pagdaragdag ng mga opsyon sa command-line sa attribute na DW_AT_producer sa DWARF
impormasyon sa pag-debug. Ito ang default.

-gstrict-dwarf
Huwag payagan ang paggamit ng mga extension ng mas huling DWARF na karaniwang bersyon kaysa sa napili
-gdwarf-bersyon. Sa karamihan ng mga target na gumagamit ng hindi sumasalungat na mga extension ng DWARF mula sa ibang pagkakataon
pinapayagan ang mga karaniwang bersyon.

-gno-strict-dwarf
Payagan ang paggamit ng mga extension ng mas huling DWARF na karaniwang bersyon kaysa sa pinili gamit
-gdwarf-bersyon.

-gvms
Gumawa ng impormasyon sa pag-debug sa format ng pag-debug ng VMS (kung sinusuportahan iyon). Ito ang
format na ginagamit ng DEBUG sa mga VMS system.

-gantas
-ggdbantas
-gstabsantas
-gcoffantas
-gxcoffantas
-gvmsantas
Humiling ng impormasyon sa pag-debug at gamitin din antas upang tukuyin kung gaano karaming impormasyon. Ang
ang default na antas ay 2.

Ang Antas 0 ay walang anumang impormasyon sa pag-debug. kaya, -g0 negates -g.

Ang Antas 1 ay gumagawa ng kaunting impormasyon, sapat para sa paggawa ng mga backtraces sa mga bahagi ng
program na hindi mo planong i-debug. Kabilang dito ang mga paglalarawan ng mga function at
mga panlabas na variable, ngunit walang impormasyon tungkol sa mga lokal na variable at walang mga numero ng linya.

Kasama sa Antas 3 ang karagdagang impormasyon, gaya ng lahat ng mga macro definition na nasa
programa. Sinusuportahan ng ilang debugger ang macro expansion kapag ginamit mo -g3.

-gdwarf-2 ay hindi tumatanggap ng pinagsama-samang antas ng pag-debug, dahil sinusuportahan ng GCC ang isang
opsyon -gdwarf na nilalayong bumuo ng impormasyon sa pag-debug sa bersyon 1 ng DWARF
format (na ibang-iba sa bersyon 2), at ito ay masyadong nakakalito.
Ang debug na format ay matagal nang hindi ginagamit, ngunit ang opsyon ay hindi na mababago ngayon. Sa halip gamitin
karagdagan -gantas opsyon upang baguhin ang antas ng debug para sa DWARF.

-gtoggle
I-off ang pagbuo ng impormasyon sa pag-debug, kung ang pag-iwan sa opsyong ito ay nakabuo nito,
o i-on ito sa level 2 kung hindi man. Ang posisyon ng argumentong ito sa command line
hindi mahalaga, ito ay magkakabisa pagkatapos maproseso ang lahat ng iba pang mga opsyon, at ginagawa ito
minsan lang, kahit ilang beses ibigay. Ito ay pangunahing inilaan upang magamit
sa -fcompare-debug.

-fdump-final-insns[=file]
Itapon ang panghuling panloob na representasyon (RTL) sa file. Kung ang opsyonal na argumento ay
tinanggal (o kung file ay "."), ang pangalan ng dump file ay matutukoy sa pamamagitan ng pagdaragdag
".gkd" sa pangalan ng compilation output file.

-fcompare-debug[=opts]
Kung walang error na nangyari sa panahon ng compilation, patakbuhin ang compiler sa pangalawang pagkakataon, pagdaragdag opts at
-fcompare-debug-second sa mga argumentong ipinasa sa pangalawang compilation. Itapon ang
panghuling panloob na representasyon sa parehong compilations, at mag-print ng error kung magkaiba ang mga ito.

Kung ang equal sign ay tinanggal, ang default -gtoggle Ginagamit.

Ang variable ng kapaligiran GCC_COMPARE_DEBUG, kung tinukoy, walang laman at hindi zero,
implicitly enables -fcompare-debug. Kung GCC_COMPARE_DEBUG ay tinukoy sa isang string
nagsisimula sa isang gitling, pagkatapos ito ay ginagamit para sa opts, kung hindi man ang default -gtoggle is
ginagamit.

-fcompare-debug=, na may katumbas na tanda ngunit wala opts, ay katumbas ng
-fno-compare-debug, na hindi pinapagana ang paglalaglag ng panghuling representasyon at ang
pangalawang compilation, pinipigilan kahit GCC_COMPARE_DEBUG mula sa pagkakaroon ng bisa.

Upang i-verify ang buong saklaw habang -fcompare-debug pagsubok, itakda GCC_COMPARE_DEBUG sabihin
-fcompare-debug-not-overridden, na tatanggihan ng GCC bilang di-wastong opsyon sa alinman
aktwal na compilation (sa halip na preprocessing, assembly o linking). Upang makakuha lamang ng isang
babala, setting GCC_COMPARE_DEBUG sa -w%n-fcompare-debug hindi override gagawin.

-fcompare-debug-second
Ang opsyong ito ay tahasang ipinapasa sa compiler para sa pangalawang compilation na hiniling
by -fcompare-debug, kasama ang mga opsyon upang patahimikin ang mga babala, at pag-alis ng iba pang mga opsyon
na magdudulot ng side-effect na mga output ng compiler sa mga file o sa karaniwang output.
Ang mga dump file at napanatili na pansamantalang mga file ay pinalitan ng pangalan upang maglaman ng ".gk"
karagdagang extension sa panahon ng pangalawang compilation, upang maiwasan ang pag-overwrite sa mga iyon
nabuo ng una.

Kapag naipasa ang opsyong ito sa driver ng compiler, nagiging sanhi ito ng una compilation sa
malaktawan, na ginagawang kapaki-pakinabang para sa kaunti maliban sa pag-debug sa tamang compiler.

-feliminate-dwarf2-dups
I-compress ang impormasyon sa pag-debug ng DWARF2 sa pamamagitan ng pag-aalis ng mga duplicate na impormasyon tungkol sa bawat isa
simbolo. Makatuwiran lang ang opsyong ito kapag bumubuo ng impormasyon sa pag-debug ng DWARF2
sa -gdwarf-2.

-femit-struct-debug-baseonly
Maglabas ng impormasyon sa pag-debug para sa mga uri na tulad ng struct lamang kapag ang batayang pangalan ng
Ang compilation source file ay tumutugma sa base name ng file kung saan tinukoy ang struct.

Ang pagpipiliang ito ay makabuluhang binabawasan ang laki ng impormasyon sa pag-debug, ngunit sa
malaking potensyal na pagkawala sa uri ng impormasyon sa debugger. Tingnan mo
-femit-struct-debug-reduced para sa hindi gaanong agresibong opsyon. Tingnan mo
-femit-struct-debug-detalyadong para sa mas detalyadong kontrol.

Gumagana lang ang opsyong ito sa DWARF 2.

-femit-struct-debug-reduced
Maglabas ng impormasyon sa pag-debug para sa mga uri na tulad ng struct lamang kapag ang batayang pangalan ng
tumutugma ang compilation source file sa batayang pangalan ng file kung saan tinukoy ang uri,
maliban kung ang struct ay isang template o tinukoy sa isang header ng system.

Ang pagpipiliang ito ay makabuluhang binabawasan ang laki ng impormasyon sa pag-debug, kasama ang ilan
potensyal na pagkawala sa uri ng impormasyon sa debugger. Tingnan mo -femit-struct-debug-baseonly
para sa isang mas agresibong opsyon. Tingnan mo -femit-struct-debug-detalyadong para sa mas detalyado
control.

Gumagana lang ang opsyong ito sa DWARF 2.

-femit-struct-debug-detalyadong[=spec-list]
Tukuyin ang mga struct-like na uri kung saan bubuo ang compiler ng impormasyon sa pag-debug.
Ang layunin ay bawasan ang duplicate na struct debug na impormasyon sa pagitan ng iba't ibang bagay
mga file sa loob ng parehong programa.

Ang opsyong ito ay isang detalyadong bersyon ng -femit-struct-debug-reduced at
-femit-struct-debug-baseonly, na magsisilbi para sa karamihan ng mga pangangailangan.

Ang isang detalye ay may syntax[ay:|ind:][ord:|gen:](anumang|sys|base|wala)

Nililimitahan ng opsyonal na unang salita ang detalye sa mga istruktura na direktang ginagamit
(ay:) o hindi direktang ginamit (ind:). Direktang ginagamit ang isang uri ng struct kapag ito ang uri
ng isang variable, miyembro. Ang mga hindi direktang paggamit ay lumitaw sa pamamagitan ng mga pointer sa mga struct. Yan ay,
kapag ang paggamit ng isang hindi kumpletong struct ay magiging legal, ang paggamit ay hindi direkta. Ang isang halimbawa ay
istruktura isa direkta; istruktura dalawa * hindi direkta;.

Nililimitahan ng opsyonal na pangalawang salita ang detalye sa mga ordinaryong istruktura (ord:) O
mga generic na istruktura (gen:). Ang mga generic na istruktura ay medyo kumplikado upang ipaliwanag. Para sa C++,
ang mga ito ay hindi tahasang mga espesyalisasyon ng mga klase ng template, o mga hindi-template na klase
sa loob ng nasa itaas. Ang ibang mga programming language ay may mga generic, ngunit
-femit-struct-debug-detalyadong ay hindi pa nagpapatupad ng mga ito.

Tinukoy ng ikatlong salita ang mga source file para sa mga istrukturang iyon kung saan ang compiler
ay maglalabas ng impormasyon sa pag-debug. Ang mga halaga wala at anumang may normal na kahulugan. Ang
halaga base nangangahulugan na ang base ng pangalan ng file kung saan ang uri ng deklarasyon
lalabas ay dapat tumugma sa base ng pangalan ng pangunahing compilation file. Sa pagsasanay,
nangangahulugan ito na ang mga uri ay ipinahayag sa foo.c at foo.h magkakaroon ng impormasyon sa pag-debug, ngunit
mga uri na ipinahayag sa ibang header ay hindi. Ang halaga sys nangangahulugan na ang mga uri ay nagbibigay-kasiyahan
base o ipinahayag sa mga header ng system o compiler.

Maaaring kailanganin mong mag-eksperimento upang matukoy ang pinakamahusay na mga setting para sa iyong aplikasyon.

Ang default ay -femit-struct-debug-detailed=lahat.

Gumagana lang ang opsyong ito sa DWARF 2.

-fno-merge-debug-strings
Idirekta ang linker na huwag pagsamahin ang mga string sa impormasyon sa pag-debug na
magkapareho sa iba't ibang object file. Ang pagsasama ay hindi sinusuportahan ng lahat ng assembler o
mga linker. Ang pagsasama ay nagpapababa sa laki ng impormasyon sa pag-debug sa output file sa
ang halaga ng pagtaas ng oras ng pagproseso ng link. Ang pagsasama ay pinagana bilang default.

-fdebug-prefix-map=luma=bago
Kapag nag-compile ng mga file sa direktoryo luma, itala ang impormasyon sa pag-debug na naglalarawan sa kanila bilang
in bago sa halip.

-fno-dwarf2-cfi-asm
Maglabas ng DWARF 2 unwind info bilang compiler na binuo ng ".eh_frame" na seksyon sa halip na gamitin
GAS ".cfi_*" na mga direktiba.

-p Bumuo ng karagdagang code upang magsulat ng impormasyon ng profile na angkop para sa programa ng pagsusuri
prof. Dapat mong gamitin ang opsyong ito kapag kino-compile ang mga source file na gusto mo ng data,
at dapat mo ring gamitin ito kapag nagli-link.

-pg Bumuo ng karagdagang code upang magsulat ng impormasyon ng profile na angkop para sa programa ng pagsusuri
gprof. Dapat mong gamitin ang opsyong ito kapag kino-compile ang mga source file na gusto mo ng data,
at dapat mo ring gamitin ito kapag nagli-link.

-Q Ginagawang i-print ng compiler ang bawat pangalan ng function habang ito ay pinagsama-sama, at nag-print ng ilan
mga istatistika tungkol sa bawat pass kapag natapos na ito.

-ftime-ulat
Ginagawa ang compiler na mag-print ng ilang mga istatistika tungkol sa oras na natupok ng bawat pass kapag ito
natapos.

-fmem-ulat
Ginagawa ang compiler na mag-print ng ilang istatistika tungkol sa permanenteng paglalaan ng memory kapag ito
natapos.

-fpre-ipa-mem-ulat
-fpost-ipa-mem-ulat
Ginagawa ang compiler na mag-print ng ilang istatistika tungkol sa permanenteng paglalaan ng memorya bago o
pagkatapos ng interprocedural optimization.

-fstack-paggamit
Ginagawa ang compiler output stack na impormasyon sa paggamit para sa program, sa isang per-function
batayan. Ang filename para sa dump ay ginawa sa pamamagitan ng pagdaragdag .su sa auxname. auxname is
nabuo mula sa pangalan ng output file, kung tahasang tinukoy at hindi ito isang
executable, kung hindi, ito ang basename ng source file. Ang isang entry ay binubuo ng
tatlong larangan:

· Ang pangalan ng function.

· Isang bilang ng mga byte.

· Isa o higit pang mga qualifier: "static", "dynamic", "bounded".

Ang qualifier na "static" ay nangangahulugan na ang function ay manipulahin ang stack nang static: a
nakapirming bilang ng mga byte ay inilalaan para sa frame sa function entry at inilabas sa
paglabas ng function; walang pagsasaayos ng stack na ginawa sa function. Ang ikalawa
Ang field ay ang nakapirming bilang ng mga byte na ito.

Ang qualifier na "dynamic" ay nangangahulugang dynamic na manipulahin ng function ang stack: in
karagdagan sa static na alokasyon na inilarawan sa itaas, ang mga pagsasaayos ng stack ay ginagawa sa
katawan ng function, halimbawa para push/pop ang mga argumento sa paligid ng mga function call. Kung ang
qualifier "bounded" ay naroroon din, ang halaga ng mga pagsasaayos na ito ay bounded sa
oras ng pag-compile at ang pangalawang field ay isang upper bound ng kabuuang dami ng stack na ginamit
sa pamamagitan ng function. Kung wala ito, ang halaga ng mga pagsasaayos na ito ay hindi limitado
sa oras ng pag-compile at ang pangalawang patlang ay kumakatawan lamang sa may hangganan na bahagi.

-fprofile-arcs
Magdagdag ng code upang ang daloy ng programa arcs ay ginagamitan ng instrumento. Sa panahon ng pagpapatupad ng programa
Itinatala kung gaano karaming beses ang bawat sangay at tawag ay naisakatuparan at kung gaano karaming beses ito kinuha
o nagbabalik. Kapag lumabas ang pinagsama-samang programa, sine-save nito ang data na ito sa isang file na tinatawag
auxname.gcda para sa bawat source file. Ang data ay maaaring gamitin para sa profile-directed
mga pag-optimize (-fbranch-probability), o para sa pagsusuri sa saklaw ng pagsubok
(-ftest-saklaw). Ang bawat object file auxname ay nabuo mula sa pangalan ng
output file, kung tahasang tinukoy at hindi ito ang panghuling maipapatupad, kung hindi man ito
ay ang basename ng source file. Sa parehong mga kaso, ang anumang suffix ay tinanggal (hal
foo.gcda para sa input file dir/foo.c, O dir/foo.gcda para sa output file na tinukoy bilang -o
dir/foo.o).

--saklaw
Ginagamit ang opsyong ito para mag-compile at mag-link ng code na ginamit para sa pagsusuri sa saklaw. Ang
Ang opsyon ay kasingkahulugan ng -fprofile-arcs -ftest-saklaw (kapag nag-compile) at -lgcov
(kapag nagli-link). Tingnan ang dokumentasyon para sa mga opsyong iyon para sa higit pang mga detalye.

· I-compile ang source file gamit ang -fprofile-arcs kasama ang pag-optimize at pagbuo ng code
mga pagpipilian. Para sa pagsusuri sa saklaw ng pagsubok, gamitin ang karagdagang -ftest-saklaw pagpipilian.
Hindi mo kailangang i-profile ang bawat source file sa isang program.

· I-link ang iyong object file sa -lgcov or -fprofile-arcs (ang huli ay nagpapahiwatig ng
dating).

· Patakbuhin ang programa sa isang kinatawan na workload upang mabuo ang arc profile
impormasyon. Ito ay maaaring ulitin kahit ilang beses. Maaari kang tumakbo nang sabay-sabay
mga pagkakataon ng iyong programa, at sa kondisyon na ang file system ay sumusuporta sa pag-lock, ang
ang mga file ng data ay maa-update nang tama. Gayundin, ang mga "tinidor" na tawag ay nakita at
wastong paghawak (hindi mangyayari ang dobleng pagbibilang).

· Para sa mga pag-optimize na nakadirekta sa profile, i-compile muli ang mga source file gamit ang pareho
optimization at mga pagpipilian sa pagbuo ng code plus -fbranch-probability.

· Para sa pagsusuri sa saklaw ng pagsubok, gamitin gcov upang makagawa ng nababasang impormasyon ng tao mula sa
ang .gcno at .gcda mga file. Sumangguni sa gcov dokumentasyon para sa karagdagang
impormasyon.

may -fprofile-arcs, para sa bawat function ng iyong program ay lumilikha ang GCC ng daloy ng programa
graph, pagkatapos ay nakahanap ng spanning tree para sa graph. Tanging mga arko na wala sa
Ang spanning tree ay kailangang gamitin: ang compiler ay nagdaragdag ng code upang mabilang ang bilang ng
beses na ang mga arko na ito ay naisakatuparan. Kapag ang isang arko ang tanging labasan o tanging pasukan
isang bloke, maaaring idagdag ang instrumentation code sa block; kung hindi, isang bagong basic
block ay dapat gawin upang hawakan ang instrumentation code.

-ftest-saklaw
Gumawa ng tala file na ang gcov magagamit ang code-coverage utility para ipakita ang program
saklaw. Tinatawag ang note file ng bawat source file auxname.gcno. Sumangguni sa
-fprofile-arcs opsyon sa itaas para sa isang paglalarawan ng auxname at mga tagubilin kung paano
bumuo ng data ng saklaw ng pagsubok. Ang data ng saklaw ay tutugma sa mga source file nang mas malapit,
kung hindi mo na-optimize.

-fdbg-cnt-list
I-print ang pangalan at ang counter upper bound para sa lahat ng debug counter.

-fdbg-cnt=counter-value-list
Itakda ang panloob na debug counter sa itaas na hangganan. counter-value-list ay pinaghihiwalay ng kuwit
Listahan ng pangalan:halaga mga pares na nagtatakda ng upper bound ng bawat debug counter pangalan sa
halaga. Ang lahat ng mga debug counter ay may paunang upper bound ng UINT_MAX, GANITO ANG dbg_cnt()
palaging nagbabalik ng true maliban kung ang upper bound ay itinakda ng opsyong ito. hal. Kasama
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) ay magbabalik ng true para lamang sa unang 10
mga panawagan

-kalabanin-uri-pumasa
-fdisable-uri-pumasa=hanay-listahan
Ito ay isang hanay ng mga opsyon sa pag-debug na ginagamit upang tahasang i-disable/i-enable
optimization pass. Para sa mga user ng compiler, ang mga regular na opsyon para sa pagpapagana/pag-disable ng mga pass
sa halip ay dapat gamitin.

*<-fdisable-ipa-pumasa>
I-disable ang ipa pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1.

*<-fdisable-rtl-pumasa>
*<-fdisable-rtl-pumasa=hanay-listahan>
Huwag paganahin ang rtl pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1. hanay-listahan ay isang listahan na pinaghihiwalay ng kuwit ng
mga saklaw ng function o mga pangalan ng assembler. Ang bawat hanay ay isang pares ng numero na pinaghihiwalay ng a
colon. Ang saklaw ay kasama sa magkabilang dulo. Kung ang hanay ay maliit, ang numero
pares ay maaaring gawing simple bilang isang solong numero. Kung ang cgraph node ng function ay uid is
nahuhulog sa loob ng isa sa mga tinukoy na hanay, ang pumasa ay hindi pinagana para diyan
pagpapaandar Ang uid ay ipinapakita sa header ng function ng isang dump file, at ang pass
ang mga pangalan ay maaaring itapon sa pamamagitan ng paggamit ng opsyon -fdump-passes.

*<-fdisable-tree-pumasa>
*<-fdisable-tree-pumasa=hanay-listahan>
Huwag paganahin ang tree pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng opsyon
argumento.

*<-fenable-ipa-pumasa>
Paganahin ang ipa pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1.

*<-fenable-rtl-pumasa>
*<-fenable-rtl-pumasa=hanay-listahan>
Paganahin ang rtl pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng argumento ng opsyon at
halimbawa.

*<-fenable-tree-pumasa>
*<-fenable-tree-pumasa=hanay-listahan>
Paganahin ang tree pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng mga argumento ng opsyon.

# huwag paganahin ang ccp1 para sa lahat ng mga function
-fdisable-tree-ccp1
# i-disable ang kumpletong unroll para sa function na ang cgraph node uid ay 1
-fenable-tree-cunroll=1
# i-disable ang gcse2 para sa mga function sa mga sumusunod na hanay [1,1],
# [300,400], at [400,1000]
# huwag paganahin ang gcse2 para sa mga function na foo at foo2
-fdisable-rtl-gcse2=foo,foo2
# huwag paganahin ang maagang inlining
-fdisable-tree-einline
# i-disable ang ipa inlining
-fdisable-ipa-inline
# paganahin ang puno ng buong pag-unroll
-fenable-tree-unroll

-dtitik
-fdump-rtl-pumasa
Sinasabi na gumawa ng mga pag-debug ng dump sa panahon ng compilation sa mga oras na tinukoy ng titik. ito
ay ginagamit para sa pag-debug ng RTL-based na mga pass ng compiler. Ang mga pangalan ng file para sa karamihan
ng mga dump ay ginagawa sa pamamagitan ng pagdaragdag ng pass number at isang salita sa dumpname, at ang
Ang mga file ay nilikha sa direktoryo ng output file. Tandaan na ang pass number ay
statically computed habang ang mga pass ay nairehistro sa pass manager. Kaya, ang
ang pagnunumero ay hindi nauugnay sa dynamic na pagkakasunud-sunod ng pagpapatupad ng mga pass. Sa partikular,
ang isang pass na naka-install sa pamamagitan ng isang plugin ay maaaring magkaroon ng isang numero na higit sa 200 kahit na ito ay naisakatuparan
maaga. dumpname ay nabuo mula sa pangalan ng output file, kung tahasan
tinukoy at hindi ito isang maipapatupad, kung hindi, ito ang basename ng pinagmulan
file. Ang mga switch na ito ay maaaring magkaroon ng iba't ibang epekto kapag -E ay ginagamit para sa preprocessing.

Maaaring paganahin ang mga debug dump gamit ang a -fdump-rtl lumipat o ilan -d opsyon titik. Dito
ay ang mga posibleng titik para gamitin sa pumasa at titik, at ang kanilang mga kahulugan:

-fdump-rtl-alignments
Dump pagkatapos makalkula ang mga alignment ng sangay.

-fdump-rtl-asmcons
Dump pagkatapos ayusin ang mga pahayag ng rtl na hindi nasiyahan sa mga hadlang sa pagpasok/paglabas.

-fdump-rtl-auto_inc_dec
Itapon pagkatapos ng pagtuklas ng auto-inc-dec. Ang pass na ito ay tumatakbo lamang sa mga arkitektura na iyon
may mga tagubilin sa auto inc o auto dec.

-fdump-rtl-barriers
Itapon pagkatapos linisin ang mga tagubilin sa hadlang.

-fdump-rtl-bbpart
Itapon pagkatapos hatiin ang mainit at malamig na mga pangunahing bloke.

-fdump-rtl-bbro
Dump pagkatapos ng block reordering.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 at -fdump-rtl-btl2 paganahin ang dumping pagkatapos ng target ng dalawang sangay
pumasa sa pag-optimize ng load.

-fdump-rtl-bypass
Dump pagkatapos ng jump bypassing at kontrolin ang mga pag-optimize ng daloy.

-fdump-rtl-combine
Dump pagkatapos ng RTL instruction combination pass.

-fdump-rtl-compgotos
Itapon pagkatapos i-duplicate ang mga na-compute na goto.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, at -fdump-rtl-ce3 paganahin ang paglalaglag pagkatapos ng tatlo
kung pumasa ang conversion.

-fdump-rtl-cprop_hardreg
Dump pagkatapos ng hard register copy propagation.

-fdump-rtl-csa
Dump pagkatapos pagsamahin ang mga pagsasaayos ng stack.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 at -fdump-rtl-cse2 paganahin ang dumping pagkatapos ng dalawang karaniwang sub-
pagpasa ng expression elimination.

-fdump-rtl-dce
Dump pagkatapos pumasa ang standalone dead code elimination.

-fdump-rtl-dbr
Dump pagkatapos maantala ang pag-iskedyul ng sangay.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 at -fdump-rtl-dce2 paganahin ang paglalaglag pagkatapos ng dalawang patay na tindahan
pumasa ang elimination.

-fdump-rtl-eh
Dump pagkatapos ng finalization ng EH handling code.

-fdump-rtl-eh_ranges
Dump pagkatapos ng conversion ng EH handling range regions.

-fdump-rtl-expand
Dump pagkatapos ng pagbuo ng RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 at -fdump-rtl-fwprop2 paganahin ang paglalaglag pagkatapos ng dalawang pasulong
pagpasa ng pagpapalaganap.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 at -fdump-rtl-gcse2 paganahin ang dumping pagkatapos ng global common
pag-aalis ng subexpression.

-fdump-rtl-init-regs
Dump pagkatapos ng pagsisimula ng mga rehistro.

-fdump-rtl-initvals
Dump pagkatapos ng pag-compute ng mga set ng paunang halaga.

-fdump-rtl-into_cfglayout
Dump pagkatapos i-convert sa cfglayout mode.

-fdump-rtl-ira
Dump pagkatapos ng inuulit na paglalaan ng rehistro.

-fdump-rtl-jump
Dump pagkatapos ng pangalawang jump optimization.

-fdump-rtl-loop2
-fdump-rtl-loop2 nagbibigay-daan sa paglalaglag pagkatapos lumipas ang rtl loop optimization.

-fdump-rtl-mach
Dump pagkatapos isagawa ang machine dependent reorganization pass, kung pumasa iyon
umiiral.

-fdump-rtl-mode_sw
Dump pagkatapos tanggalin ang mga redundant mode switch.

-fdump-rtl-rnreg
Dump pagkatapos magrehistro ng renumbering.

-fdump-rtl-outof_cfglayout
Dump pagkatapos mag-convert mula sa cfglayout mode.

-fdump-rtl-peephole2
Itapon pagkatapos ng peephole pass.

-fdump-rtl-postreload
Dump pagkatapos ng post-reload optimizations.

-fdump-rtl-pro_and_epilogue
Dump pagkatapos mabuo ang function na mga prologue at epilogue.

-fdump-rtl-regmove
Dump pagkatapos ng register move pass.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 at -fdump-rtl-sched2 paganahin ang paglalaglag pagkatapos ng pangunahing bloke
mga pass sa pag-iskedyul.

-fdump-rtl-see
Dump pagkatapos ng sign extension elimination.

-fdump-rtl-seqabstr
Dump pagkatapos ng karaniwang pagkakatuklas ng sequence.

-fdump-rtl-shorten
Itapon pagkatapos paikliin ang mga sanga.

-fdump-rtl-kapatid
Itapon pagkatapos ng mga pag-optimize ng tawag ng kapatid.

-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 at
-fdump-rtl-split5 paganahin ang dumping pagkatapos ng limang round ng instruction splitting.

-fdump-rtl-sms
Dump pagkatapos ng modulo scheduling. Ang pass na ito ay tumatakbo lamang sa ilang mga arkitektura.

-fdump-rtl-stack
Ang dump pagkatapos ng conversion mula sa "flat register file" ng GCC ay nagrerehistro sa x87's
parang stack na mga rehistro. Ang pass na ito ay tumatakbo lamang sa mga variant ng x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 at -fdump-rtl-subreg2 paganahin ang paglalaglag pagkatapos ng dalawang subreg
pagpasa ng pagpapalawak.

-fdump-rtl-unshare
Dump pagkatapos ng lahat ng rtl ay na-unshare.

-fdump-rtl-vartrack
Dump pagkatapos ng variable na pagsubaybay.

-fdump-rtl-vregs
Dump pagkatapos i-convert ang mga virtual na register sa mga hard register.

-fdump-rtl-web
Dump pagkatapos ng live range splitting.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Ang mga dump na ito ay tinukoy ngunit palaging gumagawa ng mga walang laman na file.

-sa
-fdump-rtl-lahat
Gawin ang lahat ng mga dump na nakalista sa itaas.

-dA I-annotate ang output ng assembler na may iba't ibang impormasyon sa pag-debug.

-DD Itapon ang lahat ng macro definition, sa dulo ng preprocessing, bilang karagdagan sa normal
output.

-dH Gumawa ng core dump tuwing may naganap na error.

-dp I-annotate ang output ng assembler na may komentong nagsasaad kung aling pattern at
ginamit ang alternatibo. Ang haba ng bawat pagtuturo ay naka-print din.

-dP Itapon ang RTL sa output ng assembler bilang komento bago ang bawat pagtuturo. Gayundin
buksan -dp anotasyon.

-dv Para sa bawat isa sa iba pang ipinahiwatig na mga dump file (-fdump-rtl-pumasa), itapon a
representasyon ng control flow graph na angkop para sa pagtingin gamit ang VCG sa
file.pass.vcg.

-dx Bumuo lamang ng RTL para sa isang function sa halip na i-compile ito. Karaniwang ginagamit kasama ng
-fdump-rtl-expand.

-fdump-noaddr
Kapag gumagawa ng mga pag-debug ng dump, pigilan ang output ng address. Ginagawa nitong mas magagawa
gumamit ng diff sa mga debugging dump para sa mga invocation ng compiler na may iba't ibang binary ng compiler
at/o ibang text / bss / data / heap / stack / dso na mga lokasyon ng pagsisimula.

-fdump-walang numero
Kapag gumagawa ng mga pag-debug ng dump, sugpuin ang mga numero ng pagtuturo at output ng address. Ito
ginagawang mas magagawa ang paggamit ng diff sa mga debugging dump para sa mga invocation ng compiler
iba't ibang mga opsyon, partikular na mayroon at wala -g.

-fdump-unnumbered-links
Kapag gumagawa ng mga debugging dump (tingnan ang -d opsyon sa itaas), sugpuin ang mga numero ng pagtuturo para sa
mga link sa nakaraan at susunod na mga tagubilin sa isang pagkakasunud-sunod.

-fdump-translation-unit (C++ lang)
-fdump-translation-unit-pagpipilian (C++ lang)
Itapon ang isang representasyon ng istraktura ng puno para sa buong unit ng pagsasalin sa isang file.
Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .tu sa pangalan ng source file, at ang file ay
nilikha sa parehong direktoryo bilang output file. Kung ang -pagpipilian ginagamit ang form,
pagpipilian kinokontrol ang mga detalye ng dump gaya ng inilarawan para sa -fdump-puno mga pagpipilian.

-fdump-class-hierarchy (C++ lang)
-fdump-class-hierarchy-pagpipilian (C++ lang)
Itapon ang representasyon ng hierarchy ng bawat klase at virtual function table layout sa a
file. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .klase sa pangalan ng source file, at sa file
ay nilikha sa parehong direktoryo ng output file. Kung ang -pagpipilian ginagamit ang form,
pagpipilian kinokontrol ang mga detalye ng dump gaya ng inilarawan para sa -fdump-puno mga pagpipilian.

-fdump-ipa-lumipat
Kontrolin ang pagtatambak sa iba't ibang yugto ng inter-procedural analysis language tree sa a
file. Ang pangalan ng file ay nabuo sa pamamagitan ng pagdaragdag ng isang switch na partikular na suffix sa pinagmulan
pangalan ng file, at ang file ay nilikha sa parehong direktoryo ng output file. Ang
ang mga sumusunod na dump ay posible:

lahat Pinapagana ang lahat ng inter-procedural analysis dumps.

cgraph
Nagta-dump ng impormasyon tungkol sa pag-optimize ng call-graph, pag-alis ng hindi nagamit na function, at
inlining na mga desisyon.

inline
Dump pagkatapos ng function inlining.

-fdump-passes
Itapon ang listahan ng mga optimization pass na naka-on at naka-off ng kasalukuyang
mga pagpipilian sa command-line.

-fdump-statistics-opsyon
Paganahin at kontrolin ang paglalaglag ng mga istatistika ng pass sa isang hiwalay na file. Ang pangalan ng file ay
nabuo sa pamamagitan ng pagdaragdag ng isang panlapi na nagtatapos sa .statistika sa pangalan ng source file, at ang
Ang file ay nilikha sa parehong direktoryo ng output file. Kung ang -opsyon anyo ay
ginamit, -stats ay magiging sanhi ng mga counter na summed sa buong compilation unit habang
-mga detalye itatapon ang bawat kaganapan habang ang mga pass ay bumubuo sa kanila. Ang default na may no
Ang pagpipilian ay ang pagbubuo ng mga counter para sa bawat function na pinagsama-sama.

-fdump-tree-lumipat
-fdump-tree-lumipat-pagpipilian
Kontrolin ang paglalaglag sa iba't ibang yugto ng pagproseso ng intermediate language tree sa
isang file. Ang pangalan ng file ay nabuo sa pamamagitan ng pagdaragdag ng isang switch na partikular na suffix sa
pangalan ng source file, at ang file ay nilikha sa parehong direktoryo ng output file.
Kung ang -pagpipilian ginagamit ang form, pagpipilian ay isang listahan ng - pinaghiwalay na mga opsyon na kumokontrol
ang mga detalye ng dump. Hindi lahat ng opsyon ay naaangkop sa lahat ng dump; yung mga
hindi makahulugan ay hindi papansinin. Available ang mga sumusunod na opsyon

tirahan
I-print ang address ng bawat node. Kadalasan ito ay hindi makabuluhan dahil nagbabago ito
ayon sa kapaligiran at source file. Ang pangunahing gamit nito ay para sa pagtali a
dump file na may debug na kapaligiran.

asmname
Kung ang "DECL_ASSEMBLER_NAME" ay itinakda para sa isang partikular na decl, gamitin iyon sa dump
sa halip na "DECL_NAME". Ang pangunahing paggamit nito ay ang kadalian ng paggamit mula sa paatras
sira ang mga pangalan sa assembly file.

balingkinitan
Pigilan ang paglalaglag ng mga miyembro ng isang saklaw o katawan ng isang function dahil lang doon
naabot na ang saklaw. Itapon lamang ang mga naturang item kapag direktang naaabot ang mga ito
ibang landas. Kapag nagtatapon ng mga magagandang naka-print na puno, pinipigilan ng pagpipiliang ito ang paglalaglag
ang mga katawan ng mga istrukturang kontrol.

hilaw Mag-print ng isang raw na representasyon ng puno. Bilang default, ang mga puno ay medyo naka-print sa
isang representasyong tulad ng C.

mga detalye
Paganahin ang mas detalyadong mga dump (hindi pinarangalan ng bawat opsyon sa dump).

stats
I-enable ang pag-dumping ng iba't ibang istatistika tungkol sa pass (hindi pinarangalan ng bawat dump
pagpipilian).

bloke
I-enable ang pagpapakita ng mga pangunahing hangganan ng block (naka-disable sa mga raw dump).

vops
Paganahin ang pagpapakita ng mga virtual na operand para sa bawat pahayag.

lineno
Paganahin ang pagpapakita ng mga numero ng linya para sa mga pahayag.

uid Paganahin ang pagpapakita ng natatanging ID ("DECL_UID") para sa bawat variable.

pandiwang
I-enable ang pagpapakita ng tree dump para sa bawat statement.

eh Paganahin ang pagpapakita ng numero ng rehiyon ng EH na may hawak ng bawat pahayag.

scev
I-enable ang pagpapakita ng mga detalye ng pagsusuri ng scalar evolution.

lahat I-on ang lahat ng opsyon, maliban sa hilaw, balingkinitan, pandiwang at lineno.

Posible ang mga sumusunod na pagtatambak ng puno:

orihinal
Dump bago ang anumang tree based optimization, sa file.orihinal.

optimized
Dump pagkatapos ng lahat ng tree based optimization, sa file.optimized.

gimple
Dump bawat function bago at pagkatapos ng gimplification pass sa isang file. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .gimple sa pangalan ng source file.

cfg Itapon ang control flow graph ng bawat function sa isang file. Ang pangalan ng file ay ginawa ni
nakakabit .cfg sa pangalan ng source file.

vcg Itapon ang control flow graph ng bawat function sa isang file sa VCG format. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .vcg sa pangalan ng source file. Tandaan na kung ang file
naglalaman ng higit sa isang function, ang nabuong file ay hindi direktang magagamit ng
VCG. Kakailanganin mong i-cut at i-paste ang graph ng bawat function sa sarili nitong hiwalay
file muna.

ch Itapon ang bawat function pagkatapos kopyahin ang mga header ng loop. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.ch sa pangalan ng source file.

ssa Itapon ang impormasyong nauugnay sa SSA sa isang file. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .ssa
sa pangalan ng source file.

bansag
Itapon ang impormasyon ng aliasing para sa bawat function. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.alias sa pangalan ng source file.

ccp Itapon ang bawat function pagkatapos ng CCP. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .ccp sa
pangalan ng source file.

storeccp
Itapon ang bawat function pagkatapos ng STORE-CCP. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .storeccp
sa pangalan ng source file.

pre Itapon ang mga puno pagkatapos ng bahagyang pag-aalis ng redundancy. Ang pangalan ng file ay ginawa ni
nakakabit .pre sa pangalan ng source file.

fre Itapon ang mga puno pagkatapos ng ganap na pag-aalis ng redundancy. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.libre sa pangalan ng source file.

copyprop
Itapon ang mga puno pagkatapos ng pagpapalaganap ng kopya. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .copyprop
sa pangalan ng source file.

store_copyprop
Itapon ang mga puno pagkatapos ng store copy-propagation. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.store_copyprop sa pangalan ng source file.

dce I-dump ang bawat function pagkatapos ng dead code elimination. Ang pangalan ng file ay ginawa ni
nakakabit .dce sa pangalan ng source file.

mudflap
Itapon ang bawat function pagkatapos magdagdag ng mudflap instrumentation. Ang pangalan ng file ay ginawa ni
nakakabit .mudflap sa pangalan ng source file.

Si G. / Gng I-dump ang bawat function pagkatapos magsagawa ng scalar replacement ng mga aggregate. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .sra sa pangalan ng source file.

lababo
Itapon ang bawat function pagkatapos magsagawa ng code sinking. Ang pangalan ng file ay ginawa ni
nakakabit .lubog sa pangalan ng source file.

regalo Itapon ang bawat function pagkatapos ilapat ang dominator tree optimizations. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .dom sa pangalan ng source file.

sabihin Itapon ang bawat function pagkatapos ilapat ang dead store elimination. Ang pangalan ng file ay ginawa
sa pamamagitan ng pagdugtong .dse sa pangalan ng source file.

phiopt
Itapon ang bawat function pagkatapos i-optimize ang mga PHI node sa straightline code. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .phiopt sa pangalan ng source file.

forwprop
Itapon ang bawat function pagkatapos ng pagpapalaganap ng mga variable ng solong paggamit. Ang pangalan ng file
ay ginawa sa pamamagitan ng pagsasama .forwprop sa pangalan ng source file.

copyrename
I-dump ang bawat function pagkatapos ilapat ang copy rename optimization. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .copyrename sa pangalan ng source file.

nrv I-dump ang bawat function pagkatapos ilapat ang pinangalanang return value optimization sa generic
mga puno. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .nrv sa pangalan ng source file.

vect
Itapon ang bawat function pagkatapos ilapat ang vectorization ng mga loop. Ang pangalan ng file ay ginawa
sa pamamagitan ng pagdugtong .vect sa pangalan ng source file.

pakiusap Itapon ang bawat function pagkatapos ilapat ang vectorization ng mga pangunahing bloke. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .slp sa pangalan ng source file.

vp Itapon ang bawat function pagkatapos ng Value Range Propagation (VRP). Ang pangalan ng file ay ginawa ni
nakakabit .vrp sa pangalan ng source file.

lahat I-enable ang lahat ng available na tree dumps gamit ang mga flag na ibinigay sa opsyong ito.

-ftree-vectorizer-verbose=n
Kinokontrol ng opsyong ito ang dami ng output ng pag-debug na na-print ng vectorizer. Ito
ang impormasyon ay nakasulat sa karaniwang error, maliban kung -fdump-tree-lahat or -fdump-tree-vect
ay tinukoy, kung saan ito ay output sa karaniwang dump listing file, .vect. Para sa
n=0 walang iniulat na impormasyon sa diagnostic. Kung n=1 iniuulat ng vectorizer ang bawat loop
na na-vector, at ang kabuuang bilang ng mga loop na na-vector. Kung n=2 ang
Nag-uulat din ang vectorizer ng mga hindi naka-vector na loop na pumasa sa unang yugto ng pagsusuri
(vect_analyze_loop_form) - ie countable, inner-most, single-bb, single-entry/exit
mga loop. Ito ang parehong antas ng verbosity na iyon -fdump-tree-vect-stats gamit. Mas mataas
Ang mga antas ng verbosity ay nangangahulugan ng alinman sa higit pang impormasyong itinapon para sa bawat iniulat na loop, o pareho
dami ng impormasyong iniulat para sa higit pang mga loop: kung n=3, modelo ng gastos ng vectorizer
iniuulat ang impormasyon. Kung n=4, idinaragdag ang impormasyong nauugnay sa pagkakahanay sa
mga ulat. Kung n=5, impormasyong nauugnay sa mga data-reference (hal. memory dependences, memory
access-patterns) ay idinagdag sa mga ulat. Kung n=6, ang ulat ng vectorizer ay hindi rin-
vectorized inner-most loops na hindi pumasa sa unang bahagi ng pagsusuri (ibig sabihin, maaaring hindi
mabibilang, o maaaring may kumplikadong control-flow). Kung n=7, ang ulat ng vectorizer
din hindi-vectorized nested loops. Kung n=8, ang impormasyong nauugnay sa SLP ay idinagdag sa
mga ulat. Para sa n=9, lahat ng impormasyong nabuo ng vectorizer sa panahon ng pagsusuri nito
at iniulat ang pagbabago. Ito ang parehong antas ng verbosity na iyon
-fdump-tree-vect-details gamit.

-frandom-seed=pisi
Nagbibigay ang opsyong ito ng binhi na ginagamit ng GCC kapag gagamit ito ng mga random na numero.
Ito ay ginagamit upang bumuo ng ilang mga pangalan ng simbolo na kailangang iba sa bawat isa
pinagsama-samang file. Ginagamit din ito upang maglagay ng mga natatanging selyo sa mga file ng data ng saklaw at ang
object file na gumagawa ng mga ito. Maaari mong gamitin ang -frandom-seed pagpipilian upang makagawa
reproducibly identical object file.

Ang pisi dapat ay iba para sa bawat file na iyong kino-compile.

-fsched-verbose=n
Sa mga target na gumagamit ng pag-iiskedyul ng pagtuturo, kinokontrol ng opsyong ito ang dami ng
debugging output ang scheduler prints. Ang impormasyong ito ay nakasulat sa karaniwang error,
maliban na lamang kung -fdump-rtl-sched1 or -fdump-rtl-sched2 ay tinukoy, kung saan ito ay output
sa karaniwang dump listing file, .sched1 or .sched2 ayon sa pagkakabanggit. Gayunpaman para sa n
higit sa siyam, ang output ay palaging naka-print sa karaniwang error.

para n higit sa zero, -fsched-verbose naglalabas ng parehong impormasyon bilang
-fdump-rtl-sched1 at -fdump-rtl-sched2. Para sa n higit sa isa, ito rin ang pangunahing output
i-block ang mga probabilities, detalyadong ready list information at unit/insn info. Para sa n
higit sa dalawa, kabilang dito ang RTL sa abort point, control-flow at impormasyon sa mga rehiyon. At
para n mahigit apat, -fsched-verbose kasama rin ang impormasyon ng dependence.

-save-temps
-save-temps=cwd
Itabi nang permanente ang karaniwang "pansamantalang" intermediate na mga file; ilagay ang mga ito sa agos
direktoryo at pangalanan ang mga ito batay sa pinagmulang file. Kaya, pag-compile foo.c sa -c
-save-temps gagawa ng mga file foo.i at foo.s, Pati na rin foo.o. Lumilikha ito ng a
preprocessed foo.i output file kahit na ang compiler ngayon ay karaniwang gumagamit ng isang
pinagsamang preprocessor.

Kapag ginamit kasabay ng -x opsyon sa command-line, -save-temps ay matino
sapat na upang maiwasan ang labis na pagsulat ng isang input source file na may parehong extension bilang isang
intermediate na file. Ang kaukulang intermediate file ay maaaring makuha sa pamamagitan ng pagpapalit ng pangalan
ang source file bago gamitin -save-temps.

Kung gagamit ka ng GCC nang magkatulad, nagko-compile ng ilang iba't ibang source file na nagbabahagi ng a
karaniwang base name sa iba't ibang mga subdirectory o sa parehong source file na pinagsama-sama para sa
maramihang mga destinasyon ng output, ito ay malamang na ang iba't ibang parallel compiler ay gagawin
makagambala sa isa't isa, at i-overwrite ang mga pansamantalang file. Halimbawa:

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

maaaring magresulta sa foo.i at foo.o na isinulat nang sabay-sabay ng parehong mga compiler.

-save-temps=obj
I-imbak nang permanente ang karaniwang "pansamantalang" intermediate na mga file. Kung ang -o ginagamit ang opsyon,
ang mga pansamantalang file ay batay sa object file. Kung ang -o hindi ginagamit ang opsyon, ang
-save-temps=obj kumikilos tulad ng switch -save-temps.

Halimbawa:

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

lilikha foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s, at
dir2/yfoobar.o.

-panahon[=file]
Iulat ang oras ng CPU na kinuha ng bawat subprocess sa pagkakasunud-sunod ng compilation. Para kay C
source file, ito ang compiler proper at assembler (kasama ang linker kung ang pag-link ay
tapos na).

Kung wala ang detalye ng isang output file, ang output ay ganito:

# cc1 0.12 0.01
# bilang 0.00 0.01

Ang unang numero sa bawat linya ay ang "oras ng gumagamit", iyon ay oras na ginugol sa pagpapatupad ng
programa mismo. Ang pangalawang numero ay "oras ng system", oras na ginugol sa pagpapatupad ng pagpapatakbo
sistema ng gawain sa ngalan ng programa. Ang parehong mga numero ay nasa segundo.

Sa pagtutukoy ng isang output file, ang output ay idinagdag sa pinangalanang file,
at ganito ang hitsura:

0.12 0.01 cc1
0.00 0.01 bilang

Ang "oras ng gumagamit" at ang "oras ng system" ay inilipat bago ang pangalan ng programa, at ang
ang mga opsyon na ipinasa sa programa ay ipinapakita, upang masabi ng isa kung ano ang file
pinagsama-sama, at kung aling mga pagpipilian.

-fvar-tracking
Patakbuhin ang variable na tracking pass. Kinakalkula nito kung saan naka-imbak ang mga variable sa bawat posisyon
sa code. Ang mas mahusay na impormasyon sa pag-debug ay nabuo (kung ang impormasyon sa pag-debug
format ay sumusuporta sa impormasyong ito).

Ito ay pinagana bilang default kapag nag-compile gamit ang optimization (-Os, -O, -O2, ...),
impormasyon sa pag-debug (-g) at sinusuportahan ito ng format ng impormasyon sa pag-debug.

-fvar-tracking-assignments
I-annotate ang mga pagtatalaga sa mga variable ng user nang maaga sa compilation at subukang dalhin
ang mga anotasyon sa kabuuan ng compilation hanggang sa dulo, sa isang pagtatangka
upang mapabuti ang impormasyon sa pag-debug habang nag-o-optimize. Paggamit ng -gdwarf-4 ay inirerekomenda kasama
gamit ito.

Maaari itong paganahin kahit na ang var-tracking ay hindi pinagana, kung saan ang mga anotasyon ay magiging
nilikha at pinananatili, ngunit itinapon sa dulo.

-fvar-tracking-assignments-toggle
Toggle -fvar-tracking-assignments, sa parehong paraan na -gtoggle toggle -g.

-print-file-name=aklatan
I-print ang buong ganap na pangalan ng file ng library aklatan na gagamitin kapag
nagli-link---at huwag kang gumawa ng anupaman. Sa opsyong ito, hindi nagko-compile o nagli-link ang GCC
anumang bagay; nagpi-print lang ito ng pangalan ng file.

-print-multi-directory
I-print ang pangalan ng direktoryo na naaayon sa multilib na pinili ng anumang iba pang switch
naroroon sa command line. Ang direktoryo na ito ay dapat na umiiral sa GCC_EXEC_PREFIX.

-print-multi-lib
I-print ang pagmamapa mula sa mga pangalan ng direktoryo ng multilib hanggang sa mga switch ng compiler na nagbibigay-daan sa kanila.
Ang pangalan ng direktoryo ay pinaghihiwalay mula sa mga switch ng ;, at ang bawat switch ay nagsisimula sa isang
@ sa halip ng -, nang walang mga puwang sa pagitan ng maraming switch. Ito ay dapat na
mapadali ang pagproseso ng shell.

-print-multi-os-directory
I-print ang path sa mga OS library para sa napiling multilib, na may kaugnayan sa ilan lib
subdirectory. Kung ang mga library ng OS ay naroroon sa lib subdirectory at walang multilibs
ay ginagamit, ito ay karaniwang lamang ., kung mayroong mga library ng OS sa libsuffix kapatid
mga direktoryo na ito ay nagpi-print hal ../lib64, ../ lib or ../lib32, o kung ang mga library ng OS ay
naroroon sa lib/subdir mga subdirectory na ini-print nito hal amd64, sparcv9 or ev6.

-print-multiarch
I-print ang path sa mga OS library para sa napiling multiarch, na nauugnay sa ilan lib
subdirectory.

-print-prog-name=programa
katulad -print-file-name, ngunit naghahanap ng isang programa tulad ng cpp.

-print-libgcc-file-name
Katulad ng -print-file-name=libgcc.a.

Ito ay kapaki-pakinabang kapag ginamit mo -nostdlib or -nodefaultlibs ngunit gusto mong i-link sa
libgcc.a. Maaari mong gawin

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
I-print ang pangalan ng naka-configure na direktoryo ng pag-install at isang listahan ng program at
mga direktoryo ng aklatan gcc maghahanap---at hindi na gagawa ng iba pa.

Ito ay kapaki-pakinabang kapag gcc nagpi-print ng mensahe ng error instalasyon problema, hindi maaari exec
cpp0: Hindi tulad file or direktoryo. Upang malutas ito kailangan mong ilagay cpp0 at ang
iba pang mga bahagi ng compiler kung saan gcc inaasahan na mahanap sila, o maaari mong itakda ang
variable ng kapaligiran GCC_EXEC_PREFIX sa direktoryo kung saan mo na-install ang mga ito. huwag
kalimutan ang trailing /.

-print-sysroot
I-print ang target na direktoryo ng sysroot na gagamitin sa panahon ng compilation. Ito ang
target sysroot na tinukoy alinman sa oras ng pag-configure o gamit ang --sysroot pagpipilian,
posibleng may dagdag na suffix na nakadepende sa mga opsyon sa compilation. Kung walang target
Sysroot ay tinukoy, ang opsyon ay walang nai-print.

-print-sysroot-headers-suffix
I-print ang suffix na idinagdag sa target na sysroot kapag naghahanap ng mga header, o magbigay ng
error kung ang compiler ay hindi na-configure na may ganoong suffix---at huwag gumawa ng anuman
iba pa.

-dumpmachine
I-print ang target machine ng compiler (halimbawa, i686-pc-linux-gnu)---at huwag mong gawin
kahit ano pa

-dumpversion
I-print ang bersyon ng compiler (halimbawa, 3.0)---at huwag kang gumawa ng iba.

-dumpspecs
I-print ang mga built-in na spec ng compiler---at huwag gumawa ng anupaman. (Ginagamit ito kapag
Ang GCC mismo ay itinatayo.)

-felimate-unused-debug-types
Karaniwan, kapag gumagawa ng DWARF2 output, maglalabas ang GCC ng impormasyon sa pag-debug para sa lahat
mga uri na idineklara sa isang compilation unit, hindi alintana kung sila man o hindi
ginamit sa compilation unit na iyon. Minsan ito ay kapaki-pakinabang, tulad ng kung, sa debugger,
gusto mong maglagay ng halaga sa isang uri na hindi aktwal na ginagamit sa iyong programa (ngunit ay
ipinahayag). Gayunpaman, mas madalas, nagreresulta ito sa isang malaking halaga ng nasayang na espasyo.
Sa opsyong ito, maiiwasan ng GCC ang paggawa ng debug na simbolo ng output para sa mga uri na iyon
wala kahit saan ginagamit sa source file na kino-compile.

Options Na Kontrolin Optimization
Kinokontrol ng mga opsyong ito ang iba't ibang uri ng pag-optimize.

Nang walang anumang opsyon sa pag-optimize, ang layunin ng compiler ay bawasan ang halaga ng compilation
at upang makagawa ng mga inaasahang resulta ang pag-debug. Ang mga pahayag ay independyente: kung ikaw
itigil ang program na may breakpoint sa pagitan ng mga pahayag, pagkatapos ay maaari kang magtalaga ng bagong halaga sa
anumang variable o baguhin ang program counter sa anumang iba pang pahayag sa function at get
eksakto ang mga resulta na iyong inaasahan mula sa source code.

Ang pag-on sa mga flag ng pag-optimize ay ginagawang pagtatangka ng compiler na pahusayin ang pagganap at/o
laki ng code sa gastos ng oras ng compilation at posibleng ang kakayahang i-debug ang
programa.

Ang compiler ay nagsasagawa ng pag-optimize batay sa kaalaman na mayroon ito sa programa.
Ang pag-compile ng maraming file nang sabay-sabay sa isang mode ng output file ay nagbibigay-daan sa compiler na gamitin
impormasyong nakuha mula sa lahat ng mga file kapag kino-compile ang bawat isa sa kanila.

Hindi lahat ng pag-optimize ay direktang kinokontrol ng isang flag. Ang mga pag-optimize lamang na mayroong a
flag ay nakalista sa seksyong ito.

Karamihan sa mga pag-optimize ay pinagana lamang kung ang isang -O nakatakda ang antas sa command line. Kung hindi
hindi pinagana ang mga ito, kahit na tinukoy ang mga indibidwal na flag ng pag-optimize.

Depende sa target at kung paano na-configure ang GCC, isang bahagyang naiibang hanay ng
maaaring paganahin ang mga pag-optimize sa bawat isa -O antas kaysa sa mga nakalista dito. Maaari mong i-invoke ang GCC
sa -Q --help=optimizers upang malaman ang eksaktong hanay ng mga pag-optimize na pinagana sa
bawat antas.

-O
-O1 I-optimize. Ang pag-optimize ng compilation ay tumatagal ng medyo mas maraming oras, at mas maraming memory para sa
isang malaking function.

may -O, sinusubukan ng compiler na bawasan ang laki ng code at oras ng pagpapatupad, nang hindi gumaganap
anumang mga pag-optimize na tumatagal ng maraming oras ng compilation.

-O Ino-on ang mga sumusunod na flag ng pag-optimize:

-fauto-inc-dec -fcompare-elim -fcprop-nagparehistro -fdce -fdefer-pop -fdelayed-branch
-fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -fipa-pure-const
-fipa-profile -fipa-reference -fmerge-constant -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -free-ccp -ftree-ch -free-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -free-fre -ftree-phiprop -ftree-sra
-ftree-pta -ftree-ter -funit-sa-isang-panahon

-O naka-on din -fomit-frame-pointer sa mga makina kung saan hindi nakakasagabal ang paggawa nito
may debugging.

-O2 Mag-optimize pa. Ginagawa ng GCC ang halos lahat ng sinusuportahang pag-optimize na hindi
may kasamang space-speed tradeoff. Kumpara sa -O, pinapataas ng opsyong ito ang pareho
oras ng compilation at ang pagganap ng nabuong code.

-O2 ino-on ang lahat ng flag ng pag-optimize na tinukoy ni -O. Ino-on din nito ang sumusunod
mga flag ng pag-optimize: -fthread-jumps -falign-functions -falign-jumps -falign-loops
-falign-labels -fcaller-nagse-save -fcrossjumping -fcse-follow-jumps -fcse-skip-block
-fdelete-null-pointer-checks -fdevirtualize -fexpensive-optimizations -fgcse
-fgcse-lm -finline-small-functions -findirect-inlining -fipa-sra
-foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove -freorder-block
-freorder-function -frerun-cse-after-loop -fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2 -mahigpit-aliasing -mahigpit-apaw
-free-switch-conversion -free-tail-merge -free-pre -ftree-vrp

Pakitandaan ang babala sa ilalim -fgcse tungkol sa pagtawag -O2 sa mga program na gumagamit ng computed
gotos.

TANDAAN: Sa Ubuntu 8.10 at mga mas bagong bersyon, -D_FORTIFY_SOURCE=2 ay nakatakda bilang default, at ay
activated kapag -O ay nakatakda sa 2 o mas mataas. Ito ay nagbibigay-daan sa karagdagang compile-time at
run-time na mga pagsusuri para sa ilang mga function ng libc. Upang huwag paganahin, tukuyin ang alinman
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Mag-optimize pa. -O3 ino-on ang lahat ng pag-optimize na tinukoy ni -O2 at naka-on din
ang -finline-function, -funswitch-loops, -fpredictive-commoning, -fgcse-pagkatapos-reload,
-free-vectorize, -ftree-partial-pre at -fipa-cp-clone mga pagpipilian.

-O0 Bawasan ang oras ng compilation at gawin ang pag-debug na makagawa ng mga inaasahang resulta. Ito ang
default.

-Os I-optimize para sa laki. -Os nagbibigay-daan sa lahat -O2 mga optimization na hindi karaniwang tumataas
laki ng code. Nagsasagawa rin ito ng mga karagdagang pag-optimize na idinisenyo upang bawasan ang laki ng code.

-Os hindi pinapagana ang sumusunod na mga flag ng pag-optimize: -falign-functions -falign-jumps
-falign-loops -falign-labels -freorder-block -freorder-block-and-partition
-fprefetch-loop-arrays -ftree-vect-loop-bersyon

-Ofast
Huwag pansinin ang mahigpit na pagsunod sa mga pamantayan. -Ofast nagbibigay-daan sa lahat -O3 mga pag-optimize. Ito rin
nagbibigay-daan sa mga pag-optimize na hindi wasto para sa lahat ng mga karaniwang sumusunod na programa. Ito
buksan -ffast-math at ang Fortran-specific -fno-protect-parents at -fstack-arrays.

Kung gumagamit ka ng marami -O mga opsyon, mayroon man o walang mga numero ng antas, ang huling ganoong opsyon ay
yung effective.

Mga pagpipilian sa form -fbandila tukuyin ang mga watawat na independyente sa makina. Karamihan sa mga flag ay may pareho
positibo at negatibong anyo; ang negatibong anyo ng -ffoo ay magiging -fno-foo. Sa mesa
sa ibaba, isa lang sa mga form ang nakalista --- ang karaniwang gagamitin mo. Maaari mong malaman
out sa iba pang form sa pamamagitan ng alinman sa pag-alis hindi- o pagdaragdag nito.

Kinokontrol ng mga sumusunod na opsyon ang mga partikular na pag-optimize. Ang mga ito ay isinaaktibo ng -O
mga pagpipilian o nauugnay sa mga iyon. Maaari mong gamitin ang mga sumusunod na flag sa bihirang
mga kaso kung kailan ninanais ang "fine-tuning" ng mga optimization na isasagawa.

-fno-default-inline
Huwag gawing inline ang mga function ng miyembro bilang default dahil ang mga ito ay tinukoy sa loob
ang saklaw ng klase (C++ lang). Kung hindi, kapag tinukoy mo -O, tinukoy ang mga function ng miyembro
sa loob ng saklaw ng klase ay pinagsama-sama sa inline bilang default; ibig sabihin, hindi mo na kailangang magdagdag inline
sa harap ng pangalan ng function ng miyembro.

-fno-defer-pop
Palaging i-pop ang mga argumento sa bawat function call sa sandaling bumalik ang function na iyon. Para sa
mga machine na dapat mag-pop ng mga argumento pagkatapos ng isang function na tawag, karaniwang hinahayaan ng compiler
ang mga argumento ay naiipon sa stack para sa ilang mga function na tawag at ipo-pop ang lahat ng ito sa
isang beses.

Hindi pinagana sa mga antas -O, -O2, -O3, -Os.

-fforward-propagate
Magsagawa ng forward propagation pass sa RTL. Sinusubukan ng pass na pagsamahin ang dalawang tagubilin
at sinusuri kung ang resulta ay maaaring gawing simple. Kung aktibo ang loop unrolling, dalawang pass
ay ginanap at ang pangalawa ay naka-iskedyul pagkatapos ng loop unrolling.

Ang pagpipiliang ito ay pinagana bilang default sa mga antas ng pag-optimize -O, -O2, -O3, -Os.

-ffp-contract=estilo
-ffp-contract=off hindi pinapagana ang floating-point expression contraction. -ffp-contract=mabilis
nagbibigay-daan sa floating-point expression contraction gaya ng pagbuo ng fused multiply-add
mga operasyon kung ang target ay may katutubong suporta para sa kanila. -ffp-contract=on Binibigyang-daan
floating-point expression contraction kung pinapayagan ng pamantayan ng wika. Ito ay
kasalukuyang hindi ipinapatupad at tinatratong pantay sa -ffp-contract=off.

Ang default ay -ffp-contract=mabilis.

-fomit-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function na hindi nangangailangan ng isa. Ito
iniiwasan ang mga tagubilin upang i-save, i-set up at ibalik ang mga pointer ng frame; ito rin ay gumagawa ng isang
dagdag na rehistro na magagamit sa maraming mga function. It Rin Ginagawang pag-debug imposible on
ilan machine.

Sa ilang mga makina, tulad ng VAX, ang watawat na ito ay walang epekto, dahil ang pamantayan
Awtomatikong pinangangasiwaan ng sequence ng pagtawag ang frame pointer at walang nai-save sa pamamagitan ng
pagpapanggap na wala ito. Ang macro na paglalarawan ng makina na "FRAME_POINTER_REQUIRED"
kinokontrol kung sinusuportahan ng isang target na makina ang flag na ito.

Simula sa bersyon 4.6 ng GCC, ang default na setting (kapag hindi nag-o-optimize para sa laki) para sa
Ang 32-bit na Linux x86 at 32-bit na Darwin x86 na mga target ay binago sa
-fomit-frame-pointer. Ang default ay maaaring ibalik sa -fno-omit-frame-pointer by
pag-configure ng GCC gamit ang --enable-frame-pointer opsyon sa pag-configure.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-foptimize-sibling-calls
I-optimize ang kapatid at buntot na recursive na tawag.

Pinagana sa mga antas -O2, -O3, -Os.

-fno-inline
Huwag palawakin ang anumang mga function na inline bukod sa mga minarkahan ng "always_inline"
katangian. Ito ang default kapag hindi nag-optimize.

Ang mga solong function ay maaaring hindi ma-inlining sa pamamagitan ng pagmamarka sa kanila ng "noinline"
katangian.

-finline-small-functions
Isama ang mga function sa kanilang mga tumatawag kapag ang kanilang katawan ay mas maliit kaysa sa inaasahan
function na call code (kaya ang kabuuang sukat ng programa ay nagiging mas maliit). Ang compiler
heuristikong nagpapasya kung aling mga function ang sapat na simple upang maging sulit na isama
sa ganitong paraan. Nalalapat ang inlining na ito sa lahat ng function, kahit na ang mga hindi idineklara na inline.

Pinagana sa antas -O2.

-findirect-inlining
Inline din ang mga hindi direktang tawag na natuklasang kilala sa oras ng pag-compile salamat sa
nakaraang inlining. Ang opsyong ito ay may anumang epekto lamang kapag ang mismong inlining ay naka-on
sa pamamagitan ng -finline-function or -finline-small-functions mga pagpipilian.

Pinagana sa antas -O2.

-finline-function
Isaalang-alang ang lahat ng mga function para sa inlining, kahit na hindi sila idineklara na inline. Ang
compiler heuristic na nagpapasya kung aling mga function ang nagkakahalaga ng pagsasama sa ganitong paraan.

Kung ang lahat ng mga tawag sa isang ibinigay na function ay isinama, at ang function ay idineklara
"static", kung gayon ang function ay karaniwang hindi output bilang assembler code sa sarili nitong karapatan.

Pinagana sa antas -O3.

-finline-functions-called-once
Isaalang-alang ang lahat ng "static" na function na tinawag nang isang beses para sa pag-inlin sa kanilang tumatawag kahit na
hindi sila minarkahan ng "inline". Kung ang isang tawag sa isang ibinigay na function ay isinama, kung gayon ang
Ang function ay hindi output bilang assembler code sa sarili nitong karapatan.

Pinagana sa mga antas -O1, -O2, -O3 at -Os.

-takot-inlining
Mga inline na function na minarkahan ng "always_inline" at mga function na tila mas maliit ang katawan kaysa
ang function ay tumawag sa itaas nang maaga bago gawin -fprofile-bumuo instrumentasyon at
totoong inlining pass. Ang paggawa nito ay ginagawang mas mura at karaniwan ang pag-profile
mas mabilis na inlining sa mga program na may malalaking chain ng mga function ng nested wrapper.

Pinagana bilang default.

-fipa-sra
Magsagawa ng interprocedural scalar na pagpapalit ng mga pinagsama-samang, pag-alis ng mga hindi nagamit na parameter
at pagpapalit ng mga parameter na ipinasa sa pamamagitan ng sanggunian ng mga parameter na ipinasa ng halaga.

Pinagana sa mga antas -O2, -O3 at -Os.

-finline-limit=n
Bilang default, nililimitahan ng GCC ang laki ng mga function na maaaring i-inline. Ang watawat na ito ay nagpapahintulot
magaspang na kontrol sa limitasyong ito. n ay ang laki ng mga function na maaaring i-inline
bilang ng mga pseudo na tagubilin.

Ang inlining ay aktwal na kinokontrol ng ilang mga parameter, na maaaring tukuyin
indibidwal sa pamamagitan ng paggamit --param pangalan=halaga. ang -finline-limit=n ang opsyon ay nagtatakda ng ilan sa
ang mga parameter na ito tulad ng sumusunod:

max-inline-insns-single
ay nakatakda sa n/ 2.

max-inline-insns-auto
ay nakatakda sa n/ 2.

Tingnan sa ibaba ang isang dokumentasyon ng mga indibidwal na parameter na kumokontrol sa inlining at
para sa mga default ng mga parameter na ito.

tandaan: maaaring walang halaga sa -finline-limit na nagreresulta sa default na gawi.

tandaan: Ang pseudo na pagtuturo ay kumakatawan, sa partikular na kontekstong ito, ng isang abstract
pagsukat ng laki ng function. Sa anumang paraan ay hindi ito kumakatawan sa isang bilang ng pagpupulong
mga tagubilin at dahil dito ang eksaktong kahulugan nito ay maaaring magbago mula sa isang paglabas sa isang
isa pa.

-fno-keep-inline-dllexport
Ito ay isang mas pinong bersyon ng -fkeep-inline-functions, na nalalapat lamang sa
mga function na idineklara gamit ang attribute na "dllexport" o declspec

-fkeep-inline-functions
Sa C, naglalabas ng mga "static" na function na idineklara na "inline" sa object file, kahit na
ang function ay na-inline sa lahat ng mga tumatawag nito. Ang switch na ito ay hindi nakakaapekto
mga function gamit ang extension na "extern inline" sa GNU C90. Sa C++, naglalabas ng anuman at lahat
inline function sa object file.

-fkeep-static-consts
Maglabas ng mga variable na idineklara na "static const" kapag hindi naka-on ang pag-optimize, kahit na ang
ang mga variable ay hindi isinangguni.

Pinapagana ng GCC ang opsyong ito bilang default. Kung gusto mong pilitin ang compiler na suriin kung ang
variable ay isinangguni, hindi alintana kung naka-on o hindi ang pag-optimize, gamitin
ang -fno-keep-static-consts pagpipilian.

-fmerge-constant
Subukang pagsamahin ang magkaparehong mga constant (mga string constant at floating-point constants)
sa kabuuan ng mga yunit ng compilation.

Ang pagpipiliang ito ay ang default para sa na-optimize na compilation kung ang assembler at linker
suportahan ito. Gamitin -fno-merge-constant upang pigilan ang pag-uugaling ito.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fmerge-all-constant
Subukang pagsamahin ang magkaparehong mga constant at magkaparehong variable.

Ang pagpipiliang ito ay nagpapahiwatig -fmerge-constant. Karagdagan sa -fmerge-constant ito
Isinasaalang-alang eg kahit na pare-pareho ang nasimulang mga array o nasimulan ang mga pare-parehong variable na may
integral o floating-point na mga uri. Ang mga wika tulad ng C o C++ ay nangangailangan ng bawat variable,
kabilang ang maraming pagkakataon ng parehong variable sa mga recursive na tawag, upang magkaroon ng kakaiba
mga lokasyon, kaya ang paggamit sa opsyong ito ay magreresulta sa hindi sumusunod na gawi.

-fmodulo-sched
Magsagawa kaagad ng swing modulo scheduling bago ang unang pass sa pag-iskedyul. Ito
tinitingnan ng pass ang pinakaloob na mga loop at muling inaayos ang kanilang mga tagubilin sa pamamagitan ng pag-overlay ng iba't ibang
pag-ulit

-fmodulo-sched-allow-regmoves
Magsagawa ng mas agresibong pag-iskedyul ng modulo batay sa SMS na may pinapayagang mga paglipat ng rehistro. Sa pamamagitan ng
pagtatakda ng flag na ito ay tatanggalin ang ilang mga anti-dependences na gilid na magti-trigger
ang henerasyon ng mga reg-moves batay sa pagsusuri sa saklaw ng buhay. Ang pagpipiliang ito ay
epektibo lamang sa -fmodulo-sched pinagana.

-fno-branch-count-reg
Huwag gumamit ng mga tagubiling "pagbawas at sangay" sa isang rehistro ng bilang, ngunit sa halip
bumuo ng isang pagkakasunod-sunod ng mga tagubilin na nagpapababa ng isang rehistro, ihambing ito laban
zero, pagkatapos ay sangay batay sa resulta. Ang pagpipiliang ito ay makabuluhan lamang sa
mga arkitektura na sumusuporta sa mga naturang tagubilin, na kinabibilangan ng x86, PowerPC, IA-64 at
S/390.

Ang default ay -fbranch-count-reg.

-fno-function-cse
Huwag maglagay ng mga function address sa mga rehistro; gawin ang bawat panuto na tumatawag sa a
ang pare-parehong pag-andar ay naglalaman ng tahasang address ng function.

Ang pagpipiliang ito ay nagreresulta sa hindi gaanong mahusay na code, ngunit ilang kakaibang mga hack na nagbabago sa
Ang output ng assembler ay maaaring malito ng mga pag-optimize na ginawa kapag ang pagpipiliang ito ay
hindi ginagamit.

Ang default ay -ffunction-cse

-fno-zero-initialized-sa-bss
Kung sinusuportahan ng target ang isang seksyon ng BSS, ang GCC bilang default ay naglalagay ng mga variable na
nasimulan sa zero sa BSS. Makakatipid ito ng espasyo sa resultang code.

Ino-off ng opsyong ito ang gawi na ito dahil tahasang umaasa ang ilang program sa mga variable
pagpunta sa seksyon ng data. Hal, para mahanap ng resultang executable ang
simula ng seksyong iyon at/o gumawa ng mga pagpapalagay batay doon.

Ang default ay -fzero-initialized-sa-bss.

-fmudflap -fmudflapth -fmudflapir
Para sa mga front-end na sumusuporta dito (C at C++), instrumento ang lahat ng mapanganib na pointer/array
dereferencing operations, ilang karaniwang library string/heap function, at iba pa
nauugnay na mga konstruksyon na may mga pagsubok sa saklaw/validity. Ang mga module ay dapat na may instrumento
immune sa buffer overflows, di-wastong paggamit ng heap, at ilang iba pang klase ng C/C++
mga error sa programming. Ang instrumentation ay umaasa sa isang hiwalay na runtime library
(libmudflap), na mali-link sa isang programa kung -fmudflap ay ibinigay sa oras ng link.
Ang run-time na pag-uugali ng instrumento na programa ay kinokontrol ng MUDFLAP_OPTIONS
variable ng kapaligiran. Tingnan ang "env MUDFLAP_OPTIONS=-help a.out" para sa mga opsyon nito.

paggamit -fmudflapth sa halip ng -fmudflap upang mag-compile at mag-link kung ang iyong programa ay multi-
sinulid. Gamitin -fmudflapir, Bilang karagdagan sa -fmudflap or -fmudflapth, Kung
dapat balewalain ng instrumentation ang mga pointer reads. Gumagawa ito ng mas kaunting instrumentasyon (at
samakatuwid ay mas mabilis na pagpapatupad) at nagbibigay pa rin ng ilang proteksyon laban sa tahasang memorya
corrupting writes, ngunit nagbibigay-daan sa maling pagbabasa ng data na magpalaganap sa loob ng isang programa.

-fthread-jumps
Magsagawa ng mga pag-optimize kung saan sinusuri namin kung ang isang tumalon ay sumasanga sa isang lokasyon kung saan
isa pang paghahambing na isinasama ng una ay natagpuan. Kung gayon, ang unang sangay ay
na-redirect sa alinman sa destinasyon ng pangalawang sangay o isang punto kaagad
pagsunod dito, depende sa kung ang kundisyon ay alam na totoo o mali.

Pinagana sa mga antas -O2, -O3, -Os.

-fsplit-wide-types
Kapag gumagamit ng isang uri na sumasakop sa maramihang mga rehistro, tulad ng "mahaba ang" sa isang 32-bit
system, hatiin ang mga rehistro at ilaan ang mga ito nang nakapag-iisa. Ito ay normal
bumubuo ng mas mahusay na code para sa mga uri na iyon, ngunit maaaring gawing mas mahirap ang pag-debug.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fcse-follow-jumps
Sa karaniwang subexpression elimination (CSE), i-scan ang mga tagubilin sa pagtalon kapag ang
ang target ng pagtalon ay hindi naabot ng anumang iba pang landas. Halimbawa, kapag nakatagpo ang CSE
isang "kung" na pahayag na may "iba" na sugnay, susundan ng CSE ang pagtalon kapag ang kundisyon
nasubok ay mali.

Pinagana sa mga antas -O2, -O3, -Os.

-fcse-skip-block
Ito ay katulad sa -fcse-follow-jumps, ngunit nagiging sanhi ng CSE upang sundin ang mga jumps na
may kondisyong laktawan ang mga bloke. Kapag nakatagpo ang CSE ng simpleng "kung" na pahayag na may hindi
ibang sugnay, -fcse-skip-block nagiging sanhi ng CSE na sundin ang pagtalon sa katawan ng
"kung".

Pinagana sa mga antas -O2, -O3, -Os.

-frerun-cse-after-loop
Muling patakbuhin ang karaniwang pag-aalis ng subexpression pagkatapos maisagawa ang mga pag-optimize ng loop.

Pinagana sa mga antas -O2, -O3, -Os.

-fgcse
Magsagawa ng pandaigdigang karaniwang subexpression elimination pass. Ang pass na ito ay gumaganap din
pandaigdigang pare-pareho at pagpapalaganap ng kopya.

tandaan: Kapag nag-compile ng isang program gamit ang computed gotos, isang GCC extension, maaari mong makuha
mas mahusay na pagganap ng run-time kung hindi mo pinagana ang pandaigdigang karaniwang pag-aalis ng subexpression
dumaan sa pagdaragdag -fno-gcse sa command line.

Pinagana sa mga antas -O2, -O3, -Os.

-fgcse-lm
Kailan -fgcse-lm ay pinagana, ang pandaigdigang karaniwang pag-aalis ng subexpression ay susubukan na
ilipat ang mga load na pinapatay lamang ng mga tindahan sa kanilang mga sarili. Pinapayagan nito ang isang loop
naglalaman ng load/store sequence na gagawing load sa labas ng loop, at a
kopyahin/imbak sa loob ng loop.

Pinagana bilang default kapag pinagana ang gcse.

-fgcse-sm
Kailan -fgcse-sm ay pinagana, ang isang store motion pass ay pinapatakbo pagkatapos ng global common
pag-aalis ng subexpression. Susubukan ng pass na ito na ilipat ang mga tindahan sa labas ng mga loop. Kailan
ginagamit kasabay ng -fgcse-lm, maaaring maging ang mga loop na naglalaman ng load/store sequence
binago sa isang load bago ang loop at isang tindahan pagkatapos ng loop.

Hindi pinagana sa anumang antas ng pag-optimize.

-fgcse-las
Kailan -fgcse-las ay pinagana, ang pandaigdigang common subexpression elimination pass
inaalis ang mga kalabisan na load na nanggagaling pagkatapos ng mga tindahan sa parehong lokasyon ng memorya (parehong
partial at full redundancies).

Hindi pinagana sa anumang antas ng pag-optimize.

-fgcse-pagkatapos-reload
Kailan -fgcse-pagkatapos-reload ay pinagana, ang isang redundant load elimination pass ay isinasagawa
pagkatapos i-reload. Ang layunin ng pass na ito ay linisin ang labis na pagtapon.

-funsafe-loop-optimizations
Kung ibinigay, ipapalagay ng loop optimizer na ang mga indeks ng loop ay hindi umaapaw, at iyon
ang mga loop na may nontrivial exit condition ay hindi infinite. Ito ay nagbibigay-daan sa isang mas malawak na hanay
ng mga loop optimization kahit na ang loop optimizer mismo ay hindi maaaring patunayan na ang mga ito
ang mga pagpapalagay ay wasto. Gamit -Wunsafe-loop-optimizations, babalaan ka ng compiler
kung nakahanap ito ng ganitong uri ng loop.

-fcrossjumping
Magsagawa ng cross-jumping transformation. Pinagsasama ng pagbabagong ito ang katumbas na code at
i-save ang laki ng code. Ang resultang code ay maaaring o hindi maaaring gumanap nang mas mahusay kaysa sa walang cross-
tumatalon.

Pinagana sa mga antas -O2, -O3, -Os.

-fauto-inc-dec
Pagsamahin ang mga pagtaas o pagbaba ng mga address sa mga access sa memorya. Ang pass na ito ay
palaging nilaktawan ang mga arkitektura na walang mga tagubilin upang suportahan ito.
Pinagana bilang default sa -O at mas mataas sa mga arkitektura na sumusuporta dito.

-fdce
Magsagawa ng dead code elimination (DCE) sa RTL. Pinagana bilang default sa -O at mas mataas.

-fdse
Magsagawa ng dead store elimination (DSE) sa RTL. Pinagana bilang default sa -O at mas mataas.

-fif-conversion
Subukang baguhin ang mga conditional jumps sa mga katumbas na walang sangay. Kabilang dito ang paggamit
ng mga may kondisyong galaw, min, max, set ng mga flag at abs na tagubilin, at ilang trick na magagawa
sa pamamagitan ng karaniwang aritmetika. Ang paggamit ng conditional execution sa mga chip kung nasaan ito
Ang available ay kinokontrol ng "if-conversion2".

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fif-conversion2
Gumamit ng conditional execution (kung saan available) para baguhin ang conditional jumps
mga katumbas na walang sangay.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fdelete-null-pointer-checks
Ipagpalagay na ang mga programa ay hindi maaaring ligtas na i-dereference ang mga null pointer, at walang code o data
ang elemento ay naninirahan doon. Ito ay nagbibigay-daan sa mga simpleng patuloy na pag-optimize ng natitiklop
mga antas ng pag-optimize. Bilang karagdagan, ginagamit ng ibang mga optimization pass sa GCC ang flag na ito upang
kontrolin ang mga pandaigdigang pagsusuri sa daloy ng data na nag-aalis ng mga walang kwentang pagsusuri para sa mga null pointer;
ipinapalagay ng mga ito na kung ang isang pointer ay nasuri pagkatapos na ito ay na-dereference, ito
hindi maaaring null.

Gayunpaman, tandaan na sa ilang mga kapaligiran ang pagpapalagay na ito ay hindi totoo. Gamitin
-fno-delete-null-pointer-checks upang huwag paganahin ang pag-optimize na ito para sa mga program na umaasa
sa ugali na iyon.

Ang ilang mga target, lalo na ang mga naka-embed, ay hindi pinagana ang opsyong ito sa lahat ng antas. Kung hindi
ito ay pinagana sa lahat ng antas: -O0, -O1, -O2, -O3, -Os. Mga pass na gumagamit ng impormasyon
ay pinagana nang nakapag-iisa sa iba't ibang antas ng pag-optimize.

-fdevirtualize
Subukang i-convert ang mga tawag sa mga virtual na function upang idirekta ang mga tawag. Ginagawa ito pareho
sa loob ng isang pamamaraan at interprocedurally bilang bahagi ng hindi direktang inlining
("-findirect-inlining") at interprocedural constant propagation (-fipa-cp). Pinagana
sa mga antas -O2, -O3, -Os.

-fexpensive-optimizations
Magsagawa ng ilang maliliit na pag-optimize na medyo mahal.

Pinagana sa mga antas -O2, -O3, -Os.

-libre
Subukang tanggalin ang mga paulit-ulit na tagubilin sa extension. Ito ay lalong nakakatulong para sa
ang x86-64 na arkitektura na tuwirang zero-extend sa 64-bit na mga rehistro pagkatapos
pagsulat sa kanilang mas mababang 32-bit na kalahati.

Naka-enable para sa x86 sa mga antas -O2, -O3.

-foptimize-register-move
-fregmove
Subukang muling italaga ang mga numero ng rehistro sa mga tagubilin sa paglipat at bilang mga operand ng iba pa
simpleng mga tagubilin upang ma-maximize ang halaga ng pagtali ng rehistro. Ito ay
lalo na nakakatulong sa mga makina na may dalawang-operand na tagubilin.

nota -fregmove at -foptimize-register-move ay ang parehong pag-optimize.

Pinagana sa mga antas -O2, -O3, -Os.

-fira-algorithm=algorithm
Gamitin ang tinukoy na algorithm ng pangkulay para sa pinagsama-samang tagapaglaan ng rehistro. Ang
algorithm maaaring maging argumento karapatang mauna, na tumutukoy sa priority coloring ni Chow, o CB,
na tumutukoy sa pangkulay ng Chaitin-Briggs. Ang pangkulay ng Chaitin-Briggs ay hindi ipinatupad
para sa lahat ng mga arkitektura, ngunit para sa mga target na sumusuporta dito, ito ang default
dahil ito ay bumubuo ng mas mahusay na code.

-fira-rehiyon=rehiyon
Gumamit ng mga tinukoy na rehiyon para sa pinagsama-samang tagapaglaan ng rehistro. Ang rehiyon argumento
dapat isa sa mga sumusunod:

lahat Gamitin ang lahat ng mga loop bilang rehistro ng mga rehiyon ng paglalaan. Maaari itong magbigay ng pinakamahusay na mga resulta para sa
mga makina na may maliit at/o hindi regular na set ng rehistro.

magkakahalo
Gamitin ang lahat ng mga loop maliban sa mga loop na may maliit na presyon ng rehistro bilang mga rehiyon. Ito
ang value ay karaniwang nagbibigay ng pinakamahusay na mga resulta sa karamihan ng mga kaso at para sa karamihan ng mga arkitektura, at
ay pinagana bilang default kapag nag-compile gamit ang optimization para sa bilis (-O, -O2, ...).

isa Gamitin ang lahat ng function bilang isang rehiyon. Karaniwang nagreresulta ito sa pinakamaliit na code
laki, at pinagana bilang default para sa -Os or -O0.

-fira-loop-presyon
Gumamit ng IRA upang suriin ang presyon ng pagpaparehistro sa mga loop para sa mga desisyon na ilipat ang mga invariant ng loop.
Ang pagpipiliang ito ay karaniwang nagreresulta sa pagbuo ng mas mabilis at mas maliit na code sa mga machine na may
malalaking register file (>= 32 registers), ngunit maaari nitong pabagalin ang compiler pababa.

Ang pagpipiliang ito ay pinagana sa antas -O3 para sa ilang mga target.

-fno-ira-share-save-slots
I-disable ang pagbabahagi ng mga stack slot na ginagamit para sa pag-save ng mga hard register na ginagamit ng tawag na nabubuhay
isang tawag. Ang bawat hard register ay nakakakuha ng hiwalay na stack slot, at bilang resulta function stack
mas malaki ang mga frame.

-fno-ira-share-spill-slots
Huwag paganahin ang pagbabahagi ng mga stack slot na inilaan para sa mga pseudo-register. Ang bawat pseudo-register
na hindi nakakakuha ng hard register ay nakakakuha ng hiwalay na stack slot, at bilang resulta function
mas malaki ang mga stack frame.

-fira-verbose=n
Kontrolin ang verbosity ng dump file para sa integrated register allocator. Ang
ang default na halaga ay 5. Kung ang halaga n ay mas malaki o katumbas ng 10, ang dump output ay ipinadala
sa stderr gamit ang parehong format bilang n minus 10.

-fdelayed-branch
Kung sinusuportahan para sa target na makina, subukang muling ayusin ang mga tagubilin upang pagsamantalahan
magagamit ang mga puwang ng pagtuturo pagkatapos ng pagkaantala ng mga tagubilin ng sangay.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fschedule-insns
Kung sinusuportahan para sa target na makina, subukang muling ayusin ang mga tagubilin upang alisin
mga execution stall dahil sa hindi available na data. Nakakatulong ito sa mga makina na
magkaroon ng mabagal na floating point o mga tagubilin sa pag-load ng memory sa pamamagitan ng pagpapahintulot sa iba pang mga tagubilin na
ibibigay hanggang sa kailanganin ang resulta ng load o floating-point instruction.

Pinagana sa mga antas -O2, -O3.

-fschedule-insns2
Kapareho ng -fschedule-insns, ngunit humihiling ng karagdagang pass ng pag-iiskedyul ng pagtuturo
matapos magawa ang paglalaan ng rehistro. Ito ay lalong kapaki-pakinabang sa mga makina na may a
medyo maliit na bilang ng mga rehistro at kung saan ang mga tagubilin sa pagkarga ng memorya ay tumatagal ng higit sa
isang cycle.

Pinagana sa mga antas -O2, -O3, -Os.

-fno-sched-interblock
Huwag mag-iskedyul ng mga tagubilin sa mga pangunahing bloke. Ito ay karaniwang pinagana bilang default
kapag nag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 or
Mas mataas.

-fno-sched-spec
Huwag payagan ang speculative motion ng mga tagubilin na hindi nag-load. Ito ay karaniwang pinagana ng
default kapag nag-iiskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa
-O2 o mas mataas.

-fsched-presyon
I-enable ang pag-iskedyul ng insn na sensitibo sa presyon ng rehistro bago ang paglalaan ng rehistro.
Makatuwiran lamang ito kapag ang pag-iskedyul bago pinagana ang paglalaan ng rehistro, ibig sabihin, sa
-fschedule-insns o sa -O2 o mas mataas. Maaaring mapabuti ng paggamit ng opsyong ito ang nabuo
code at bawasan ang laki nito sa pamamagitan ng pagpigil sa pagtaas ng presyon ng rehistro sa itaas ng numero
ng magagamit na mga hard register at bilang resulta, irehistro ang mga spill sa rehistro
alokasyon.

-fsched-spec-load
Payagan ang speculative motion ng ilang mga tagubilin sa pagkarga. Makatuwiran lamang ito kapag
pag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 o mas mataas.

-fsched-spec-load-delikado
Payagan ang speculative motion ng higit pang mga tagubilin sa pagkarga. Makatuwiran lamang ito kapag
pag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 o mas mataas.

-fsched-stalled-insns
-fsched-stalled-insns=n
Tukuyin kung gaano karaming mga insn (kung mayroon man) ang maaaring ilipat nang maaga mula sa pila ng mga natigil
insns sa handa na listahan, sa panahon ng pangalawang pag-iskedyul ng pass.
-fno-sched-stalled-insns nangangahulugan na walang insns na ililipat nang maaga,
-fsched-stalled-insns=0 nangangahulugan na walang limitasyon sa kung gaano karaming mga nakapila na insn ang maaaring ilipat
wala sa panahon -fsched-stalled-insns walang halaga ay katumbas ng
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Tukuyin kung ilang grupo ng insn (cycle) ang susuriin para sa isang dependency sa isang natigil
insn na kandidato para sa maagang pag-alis mula sa pila ng mga natigil na insn. Ito
ay may epekto lamang sa ikalawang pagpasa ng pag-iskedyul, at kung
-fsched-stalled-insns Ginagamit. -fno-sched-stalled-insns-dep ay katumbas ng
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep walang halaga ay katumbas
sa -fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
Kapag nag-iiskedyul pagkatapos ng paglalaan ng rehistro, gumamit ng algorithm ng pag-iskedyul ng superblock.
Ang pag-iskedyul ng superblock ay nagbibigay-daan sa paggalaw sa mga pangunahing hangganan ng block na nagreresulta sa mas mabilis
mga iskedyul. Pang-eksperimento ang opsyong ito, dahil hindi lahat ng paglalarawan ng makina ay ginagamit ng GCC
imodelo ang CPU nang sapat upang maiwasan ang hindi mapagkakatiwalaang mga resulta mula sa algorithm.

Makatuwiran lamang ito kapag nag-iiskedyul pagkatapos ng paglalaan ng rehistro, ibig sabihin, sa
-fschedule-insns2 o sa -O2 o mas mataas.

-fsched-group-heuristic
Paganahin ang pangkat na heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang pagtuturo
na kabilang sa isang pangkat ng iskedyul. Ito ay pinagana bilang default kapag ang pag-iskedyul ay
pinagana, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2 o mas mataas.

-fsched-critical-path-heuristic
I-enable ang critical-path heuristic sa scheduler. Ang heuristic na ito ay pinapaboran
mga tagubilin sa kritikal na landas. Ito ay pinagana bilang default kapag ang pag-iskedyul ay
pinagana, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2 o mas mataas.

-fsched-spec-insn-heuristic
I-enable ang speculative instruction heuristic sa scheduler. Ang heuristic na ito ay pinapaboran
speculative na mga tagubilin na may higit na kahinaan sa dependency. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-fsched-rank-heuristic
I-enable ang ranggo na heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang pagtuturo
kabilang sa isang pangunahing bloke na may mas malaking sukat o dalas. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-fsched-last-insn-heuristic
I-enable ang heuristic na huling tagubilin sa scheduler. Ang heuristic na ito ay pinapaboran ang
pagtuturo na hindi gaanong nakadepende sa huling nakaiskedyul na pagtuturo. Ito ay pinagana
bilang default kapag pinagana ang pag-iskedyul, ibig sabihin, sa -fschedule-insns or -fschedule-insns2
o sa -O2 o mas mataas.

-fsched-dep-count-heuristic
Paganahin ang dependent-count heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang
pagtuturo na may higit pang mga tagubilin depende dito. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-freschedule-modulo-scheduled-loops
Nauuna ang modulo scheduling sa tradisyonal na scheduling, kung modulo ang loop
naka-iskedyul na maaaring gusto naming pigilan ang mga pumasa sa pag-iskedyul sa ibang pagkakataon mula sa pagbabago nito
iskedyul, ginagamit namin ang opsyong ito para kontrolin iyon.

-fselective-scheduling
Mag-iskedyul ng mga tagubilin gamit ang selective scheduling algorithm. Tumatakbo ang piling pag-iiskedyul
sa halip na ang unang scheduler pass.

-fselective-scheduling2
Mag-iskedyul ng mga tagubilin gamit ang selective scheduling algorithm. Tumatakbo ang piling pag-iiskedyul
sa halip na ang pangalawang scheduler pass.

-fsel-sched-pipelining
Paganahin ang software pipelining ng pinakaloob na mga loop sa panahon ng piling pag-iiskedyul. Ito
ang opsyon ay walang epekto hanggang sa isa sa -fselective-scheduling or -fselective-scheduling2 is
binuksan.

-fsel-sched-pipelining-outer-loops
Kapag ang pipelining loops sa panahon ng selective scheduling, pipeline outer loops din. Ito
ang opsyon ay walang epekto hanggang -fsel-sched-pipelining naka-on.

-fshrink-wrap
Maglabas lamang ng mga prologue ng function bago ang mga bahagi ng function na nangangailangan nito, sa halip na sa
tuktok ng function. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-fcaller-nagse-save
Paganahin ang mga halaga na ilalaan sa mga rehistro na mapupuksa ng mga function na tawag,
sa pamamagitan ng pagpapalabas ng mga karagdagang tagubilin upang i-save at ibalik ang mga rehistro sa paligid ng mga naturang tawag.
Ang ganitong paglalaan ay ginagawa lamang kapag tila nagreresulta ito sa mas mahusay na code kaysa sa gagawin
kung hindi man ay gagawin.

Ang opsyong ito ay palaging pinapagana bilang default sa ilang partikular na makina, kadalasan ang mayroon
walang call-preserved registers na gagamitin sa halip.

Pinagana sa mga antas -O2, -O3, -Os.

-fcombine-stack-adjustments
Sinusubaybayan ang mga pagsasaayos ng stack (mga pagtulak at pag-pop) at pag-stack ng mga sanggunian sa memorya at pagkatapos ay sinusubukan
upang makahanap ng mga paraan upang pagsamahin ang mga ito.

Pinagana bilang default sa -O1 at mas mataas.

-fconserve-stack
Subukang bawasan ang paggamit ng stack. Susubukan ng compiler na gumamit ng mas kaunting espasyo ng stack,
kahit na ginagawa nitong mas mabagal ang programa. Ang pagpipiliang ito ay nagpapahiwatig ng pagtatakda ng malaking salansan-
balangkas parameter sa 100 at ang malaking-stack-frame-growth parameter sa 400.

-ftree-reassoc
Magsagawa ng reassociation sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-free-pre
Magsagawa ng partial redundancy elimination (PRE) sa mga puno. Ang flag na ito ay pinagana ng
default sa -O2 at -O3.

-ftree-partial-pre
Gawing mas agresibo ang partial redundancy elimination (PRE). Ang flag na ito ay pinagana ng
default sa -O3.

-ftree-forwprop
Magsagawa ng forward propagation sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-free-fre
Magsagawa ng full redundancy elimination (FRE) sa mga puno. Ang pagkakaiba sa pagitan ng FRE at
Ang PRE ay isinasaalang-alang lamang ng FRE ang mga expression na kinukuwenta sa lahat ng mga landas na humahantong sa
ang redundant computation. Ang pagsusuri na ito ay mas mabilis kaysa sa PRE, bagama't mas kaunti ang inilalantad nito
mga redundancies. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-ftree-phiprop
Magsagawa ng pag-angat ng mga kargada mula sa mga conditional pointer sa mga puno. Ang pass na ito ay pinagana ng
default sa -O at mas mataas.

-free-copy-prop
Magsagawa ng pagpapalaganap ng kopya sa mga puno. Ang pass na ito ay nag-aalis ng mga hindi kinakailangang operasyon ng pagkopya.
Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-fipa-pure-const
Tuklasin kung aling mga function ang dalisay o pare-pareho. Pinagana bilang default sa -O at mas mataas.

-fipa-reference
Tuklasin kung aling mga static na variable ang hindi makatakas ang hindi makakatakas sa compilation unit.
Pinagana bilang default sa -O at mas mataas.

-fipa-pta
Magsagawa ng interprocedural pointer analysis at interprocedural modification at
pagsusuri ng sanggunian. Ang pagpipiliang ito ay maaaring magdulot ng labis na memorya at paggamit ng oras ng pag-compile
malalaking compilation unit. Hindi ito pinagana bilang default sa anumang antas ng pag-optimize.

-fipa-profile
Magsagawa ng interprocedural profile propagation. Ang mga function na tinatawag lamang mula sa malamig
ang mga function ay minarkahan bilang malamig. Ang mga function din ay naisakatuparan nang isang beses (tulad ng "malamig",
"noreturn", static constructors o destructors) ay natukoy. Malamig na pag-andar at
Ang mga loop na mas kaunting bahagi ng mga function na naisagawa nang isang beses ay na-optimize para sa laki. Pinagana ng
default sa -O at mas mataas.

-fipa-cp
Magsagawa ng interprocedural constant propagation. Sinusuri ng optimization na ito ang program
upang matukoy kung ang mga value na ipinasa sa mga function ay mga constant at pagkatapos ay nag-optimize
naaayon. Ang pag-optimize na ito ay maaaring makabuluhang tumaas ang pagganap kung ang
Ang application ay may mga constant na naipasa sa mga function. Ang flag na ito ay pinagana bilang default sa
-O2, -Os at -O3.

-fipa-cp-clone
Magsagawa ng function cloning upang gawing mas malakas ang interprocedural constant propagation. Kailan
pinagana, ang interprocedural constant propagation ay magsasagawa ng function cloning kapag
maaaring tawagin ang panlabas na nakikitang function na may pare-parehong mga argumento. Dahil ito
optimization ay maaaring lumikha ng maramihang mga kopya ng mga function, maaari itong makabuluhang tumaas
laki ng code (tingnan --param ipcp-unit-growth=halaga). Ang flag na ito ay pinagana bilang default sa
-O3.

-fipa-matrix-reorg
Magsagawa ng matrix flattening at transposing. Sinusubukang palitan ng matrix flattening ang isang
m-dimensional matrix na may katumbas nitong n-dimensional matrix, kung saan n < m. Ito
binabawasan ang antas ng indirection na kailangan para sa pag-access sa mga elemento ng matrix. Ang
Ang pangalawang pag-optimize ay ang matrix transposing, na sumusubok na baguhin ang pagkakasunud-sunod ng
matrix's dimensyon upang mapabuti ang cache locality. Ang parehong mga pag-optimize ay nangangailangan ng
-fbuong-programa bandila. Ang transposing ay pinagana lamang kung ang impormasyon sa pag-profile ay
magagamit.

-free-lababo
Magsagawa ng forward store motion sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-bit-ccp
Magsagawa ng sparse conditional bit constant propagation sa mga puno at propagate pointer
impormasyon ng pagkakahanay. Ang pass na ito ay gumagana lamang sa mga lokal na scalar variable at ito ay
pinagana bilang default sa -O at mas mataas. Ito ay nangangailangan na -free-ccp Ay pinagana.

-free-ccp
Magsagawa ng sparse conditional constant propagation (CCP) sa mga puno. Itong pass lang
gumagana sa mga lokal na variable ng scalar at pinagana bilang default sa -O at mas mataas.

-free-switch-conversion
Magsagawa ng conversion ng mga simpleng initialization sa isang switch sa initialization mula sa a
scalar array. Ang flag na ito ay pinagana bilang default sa -O2 at mas mataas.

-free-tail-merge
Maghanap ng magkaparehong pagkakasunud-sunod ng code. Kapag natagpuan, palitan ang isa ng isang pagtalon sa isa pa.
Ang optimization na ito ay kilala bilang tail merging o cross jumping. Ang flag na ito ay pinagana ng
default sa -O2 at mas mataas. Ang oras ng compilation sa pass na ito ay maaaring limitado gamit
max-tail-merge-comparisons parameter at max-tail-merge-iteration parameter

-ftree-dce
Magsagawa ng dead code elimination (DCE) sa mga puno. Ang flag na ito ay pinagana bilang default sa -O
at mas mataas.

-ftree-builtin-call-dce
Magsagawa ng conditional dead code elimination (DCE) para sa mga tawag sa mga builtin na function na
maaaring magtakda ng "errno" ngunit kung hindi man ay walang side-effect. Ang flag na ito ay pinagana bilang default
at -O2 at mas mataas kung -Os ay hindi rin tinukoy.

-ftree-dominator-opts
Magsagawa ng iba't ibang simpleng scalar cleanup (constant/copy propagation, redundancy
pag-aalis, pagpapalaganap ng saklaw at pagpapasimple ng ekspresyon) batay sa isang dominator
pagtawid ng puno. Nagsasagawa rin ito ng jump threading (upang bawasan ang mga pagtalon sa mga pagtalon). Ito
flag ay pinagana bilang default sa -O at mas mataas.

-ftree-dse
Magsagawa ng dead store elimination (DSE) sa mga puno. Ang isang patay na tindahan ay isang tindahan sa isang alaala
lokasyon na sa kalaunan ay na-overwrite ng isa pang tindahan nang walang anumang intervening load. Sa
sa kasong ito ang naunang tindahan ay maaaring tanggalin. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-ch
Magsagawa ng pagkopya ng header ng loop sa mga puno. Ito ay kapaki-pakinabang dahil ito ay tumataas
pagiging epektibo ng mga pag-optimize ng paggalaw ng code. Nakakatipid din ito ng isang pagtalon. Ang watawat na ito ay
pinagana bilang default sa -O at mas mataas. Hindi ito pinagana para sa -Os, dahil kadalasan
pinapataas ang laki ng code.

-ftree-loop-optimize
Magsagawa ng mga loop optimization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-loop-linear
Magsagawa ng loop interchange transformations sa puno. Katulad ng -floop-interchange. Para magamit
ang pagbabagong ito ng code, kailangang i-configure ang GCC --kasama-ppl at --may-cloog sa
paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-floop-interchange
Magsagawa ng mga pagbabago sa pagpapalit ng loop sa mga loop. Pagpapalitan ng dalawang nested na mga loop
inililipat ang panloob at panlabas na mga loop. Halimbawa, binigyan ng loop tulad ng:

DO J = 1, M
DO I = 1, N
A(J, I) = A(J, I) * C
ENDDO
ENDDO

Ang loop interchange ay magbabago sa loop na parang isinulat ng user:

DO I = 1, N
DO J = 1, M
A(J, I) = A(J, I) * C
ENDDO
ENDDO

na maaaring maging kapaki-pakinabang kapag ang "N" ay mas malaki kaysa sa mga cache, dahil sa Fortran, ang
Ang mga elemento ng isang array ay naka-imbak sa memorya ng magkadikit sa pamamagitan ng column, at ang orihinal
Ang loop ay umuulit sa mga row, na posibleng lumikha sa bawat pag-access ng cache miss. Ito
nalalapat ang pag-optimize sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --kasama-ppl
at --may-cloog upang paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-floop-strip-mine
Magsagawa ng mga pagbabago sa pagmimina ng loop strip sa mga loop. Hinahati ng strip mining ang isang loop sa
dalawang nested loops. Ang panlabas na loop ay may mga hakbang na katumbas ng laki ng strip at sa loob
loop ay may mga hakbang ng orihinal na loop sa loob ng isang strip. Maaaring baguhin ang haba ng strip
gamit ang loop-block-tile-size parameter. Halimbawa, binigyan ng loop tulad ng:

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

Ang loop strip mining ay magbabago sa loop na parang isinulat ng user:

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

Nalalapat ang pag-optimize na ito sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --kasama-ppl
at --may-cloog upang paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-floop-block
Magsagawa ng mga pagbabago sa pag-block ng loop sa mga loop. Ang pagharang sa mga mina ng strip sa bawat loop sa
loop nest upang ang memorya ng pag-access ng mga loop ng elemento ay magkasya sa loob ng mga cache. Ang
ang haba ng strip ay maaaring baguhin gamit ang loop-block-tile-size parameter. Halimbawa,
binigyan ng loop tulad ng:

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

Ang pag-block ng loop ay magbabago sa loop na parang isinulat ng user:

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

na maaaring maging kapaki-pakinabang kapag ang "M" ay mas malaki kaysa sa mga cache, dahil ang pinakaloob na loop
ay umuulit sa mas maliit na halaga ng data na maaaring itago sa mga cache. Ito
nalalapat ang pag-optimize sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --kasama-ppl
at --may-cloog upang paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-fgraphite-pagkakakilanlan
Paganahin ang pagbabago ng pagkakakilanlan para sa graphite. Para sa bawat SCoP na nabuo namin ang
polyhedral na representasyon at ibahin ito pabalik sa gimple. Gamit -fgraphite-pagkakakilanlan
maaari nating suriin ang mga gastos o benepisyo ng GIMPLE -> GRAPHITE -> GIMPLE transformation.
Ang ilang kaunting pag-optimize ay ginagawa din ng code generator na CLooG, tulad ng index
paghahati at patay na pag-aalis ng code sa mga loop.

-floop-flatten
Inaalis ang istraktura ng loop nesting: ginagawang isang loop ang loop nest. Ito
Ang pagbabagong-anyo ay maaaring maging kapaki-pakinabang bilang isang pagpapagana ng pagbabago para sa vectorization at
parallelization. Pang-eksperimento ang feature na ito. Upang magamit ang pagbabagong ito ng code, GCC
kailangang i-configure sa --kasama-ppl at --may-cloog upang paganahin ang Graphite loop
imprastraktura ng pagbabago.

-floop-parallelize-lahat
Gamitin ang Graphite data dependence analysis upang matukoy ang mga loop na maaaring iparallelize.
Iparallelize ang lahat ng mga loop na maaaring masuri upang hindi maglaman ng mga loop na dala ng mga dependences
nang hindi sinusuri na ito ay kumikita upang iparallelize ang mga loop.

-fcheck-data-deps
Ihambing ang mga resulta ng ilang data dependence analyzer. Ang pagpipiliang ito ay ginagamit para sa
pag-debug ng mga data dependence analyzer.

-ftree-loop-if-convert
Subukang baguhin ang mga conditional jump sa pinakaloob na mga loop sa branch-less
katumbas. Ang layunin ay alisin ang control-flow mula sa pinakaloob na mga loop sa pagkakasunud-sunod
upang mapabuti ang kakayahan ng vectorization pass upang mahawakan ang mga loop na ito. Ito ay
pinagana bilang default kung pinagana ang vectorization.

-ftree-loop-if-convert-stores
Subukan din kung i-convert ang mga conditional jump na naglalaman ng memory writes. Ito
Ang pagbabagong-anyo ay maaaring hindi ligtas para sa mga multi-threaded na programa dahil ito ay nagbabago ng kondisyon
memory writes into unconditional memory writes. Halimbawa,

para sa (i = 0; i <N; i++)
kung (cond)
A[i] = expr;

ay mababago sa

para sa (i = 0; i <N; i++)
A[i] = cond ? expr : A[i];

potensyal na paggawa ng mga karera ng data.

-free-loop-distribution
Magsagawa ng pamamahagi ng loop. Maaaring mapabuti ng flag na ito ang pagganap ng cache sa malalaking loop body
at payagan ang mga karagdagang pag-optimize ng loop, tulad ng parallelization o vectorization, na gawin
lugar. Halimbawa, ang loop

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO

ay binago sa

DO I = 1, N
A(I) = B(I) + C
ENDDO
DO I = 1, N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
Magsagawa ng loop distribution ng mga pattern na maaaring mabuo ng code gamit ang mga tawag sa a
aklatan. Ang flag na ito ay pinagana bilang default sa -O3.

Ang pass na ito ay namamahagi ng mga initialization loop at bumubuo ng isang tawag sa memset zero.
Halimbawa, ang loop

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
ENDDO

ay binago sa

DO I = 1, N
A(I) = 0
ENDDO
DO I = 1, N
B(I) = A(I) + I
ENDDO

at ang initialization loop ay binago sa isang tawag sa memset zero.

-ftree-loop-im
Magsagawa ng loop invariant motion sa mga puno. Ang pass na ito ay gumagalaw lamang ng mga invariant na magiging
mahirap hawakan sa antas ng RTL (mga function na tawag, mga pagpapatakbo na lumalawak sa hindi mahalaga
pagkakasunud-sunod ng mga insn). Sa -funswitch-loops gumagalaw din ito ng mga operand ng mga kondisyon na
ay invariant out of the loop, para magamit lang natin ang trivial invariantness analysis
sa loop unswitching. Kasama rin sa pass ang paggalaw ng tindahan.

-ftree-loop-ivcanon
Gumawa ng canonical counter para sa bilang ng mga pag-ulit sa mga loop kung saan tinutukoy
bilang ng mga pag-ulit ay nangangailangan ng kumplikadong pagsusuri. Mamaya optimizations pagkatapos ay maaaring
madaling matukoy ang numero. Kapaki-pakinabang lalo na may kaugnayan sa pag-unroll.

-fivopts
Magsagawa ng mga induction variable optimization (pagbabawas ng lakas, induction variable
merging at induction variable elimination) sa mga puno.

-ftree-parallelize-loops=n
Parallelize ang mga loop, ibig sabihin, hatiin ang kanilang pag-ulit na espasyo upang tumakbo sa n mga thread. Ito ay
posible lamang para sa mga loop na ang mga pag-ulit ay independiyente at maaaring arbitraryo
muling inayos. Ang pag-optimize ay kumikita lamang sa mga multiprocessor machine, para sa mga loop
na CPU-intensive, sa halip na pinigilan hal ng memory bandwidth. Ang pagpipiliang ito
nagpapahiwatig -pthread, at sa gayon ay sinusuportahan lamang sa mga target na may suporta para sa
-pthread.

-ftree-pta
Magsagawa ng function-local point-to analysis sa mga puno. Ang flag na ito ay pinagana bilang default
at -O at mas mataas.

-ftree-sra
Magsagawa ng scalar replacement ng aggregates. Pinapalitan ng pass na ito ang mga structure reference
na may mga scalar upang maiwasan ang pag-commit ng mga istruktura sa memorya nang masyadong maaga. Ang watawat na ito ay
pinagana bilang default sa -O at mas mataas.

-free-copyrename
Magsagawa ng pagpapalit ng pangalan ng kopya sa mga puno. Sinusubukan ng pass na ito na palitan ang pangalan ng mga pansamantalang compiler
iba pang mga variable sa mga lokasyon ng kopya, kadalasang nagreresulta sa mga variable na pangalan na higit pa
malapit na kahawig ng orihinal na mga variable. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-coalesce-inlined-vars
Sabihin ang copyrename pass (tingnan -free-copyrename) upang subukang pagsamahin ang maliit na user-
tinukoy din ang mga variable, ngunit kung sila ay inline mula sa iba pang mga function. Ito ay isang
mas limitadong anyo ng -ftree-coalesce-vars. Ito ay maaaring makapinsala sa impormasyon ng pag-debug ng mga naturang bagay
inlined na mga variable, ngunit pananatilihin nito ang mga variable ng inlined-in na function bukod sa
sa isa't isa, na mas malamang na naglalaman sila ng mga inaasahang halaga sa a
sesyon ng pag-debug. Ito ang default sa mga bersyon ng GCC na mas luma sa 4.7.

-ftree-coalesce-vars
Sabihin ang copyrename pass (tingnan -free-copyrename) upang subukang pagsamahin ang maliit na user-
tinukoy din ang mga variable, sa halip na mga pansamantalang compiler lamang. Ito ay maaaring malubhang limitahan
ang kakayahang mag-debug ng isang na-optimize na program na pinagsama-sama -fno-var-tracking-assignments.
Sa negated form, pinipigilan ng flag na ito ang pagsasama-sama ng SSA ng mga variable ng user, kabilang ang
mga inline. Ang pagpipiliang ito ay pinagana bilang default.

-ftree-ter
Magsagawa ng pansamantalang pagpapalit ng ekspresyon sa panahon ng SSA->normal na yugto. Walang asawa
use/single def temporaries ay pinapalitan sa kanilang lokasyon ng paggamit sa kanilang pagtukoy
pagpapahayag. Nagreresulta ito sa non-GIMPLE code, ngunit nagbibigay sa mga expander ng higit pa
kumplikadong mga puno upang magtrabaho upang magresulta sa mas mahusay na henerasyon ng RTL. Ito ay pinagana ng
default sa -O at mas mataas.

-free-vectorize
Magsagawa ng loop vectorization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O3.

-ftree-slp-vectorize
Magsagawa ng basic block vectorization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O3 at
kailan -free-vectorize Ay pinagana.

-ftree-vect-loop-bersyon
Magsagawa ng loop versioning kapag gumagawa ng loop vectorization sa mga puno. Kapag lumitaw ang isang loop
upang maging vectorizable maliban na ang data alignment o data dependence ay hindi matukoy
sa oras ng pag-compile, pagkatapos ay mabubuo ang vectorized at non-vectorized na mga bersyon ng loop
kasama ang run-time na mga pagsusuri para sa pagkakahanay o pagtitiwala upang makontrol kung aling bersyon ang
pinaandar. Ang pagpipiliang ito ay pinagana bilang default maliban sa antas -Os kung saan ito ay may kapansanan.

-fvect-cost-model
Paganahin ang modelo ng gastos para sa vectorization.

-ftree-vrp
Magsagawa ng Value Range Propagation sa mga puno. Ito ay katulad ng patuloy na pagpapalaganap
pumasa, ngunit sa halip na mga halaga, ang mga hanay ng mga halaga ay pinapalaganap. Ito ay nagpapahintulot sa
mga optimizer upang alisin ang mga hindi kinakailangang pagsusuri sa hanay tulad ng mga pagsusuri sa array bound at null pointer
mga tseke. Ito ay pinagana bilang default sa -O2 at mas mataas. Null pointer check elimination
ay gagawin lamang kung -fdelete-null-pointer-checks Ay pinagana.

-ftracer
Magsagawa ng tail duplication upang palakihin ang laki ng superblock. Ang pagbabagong ito ay pinapasimple
ang control flow ng function na nagpapahintulot sa iba pang mga optimization na gumawa ng mas mahusay na trabaho.

-funroll-loops
I-unroll ang mga loop na ang bilang ng mga pag-ulit ay maaaring matukoy sa oras ng pag-compile o pagkatapos
pagpasok sa loop. -funroll-loops nagpapahiwatig -frerun-cse-after-loop. Ginagawa ng pagpipiliang ito
mas malaki ang code, at maaaring gawin itong mas mabilis o hindi.

-funroll-all-loops
I-unroll ang lahat ng mga loop, kahit na ang kanilang bilang ng mga pag-ulit ay hindi tiyak kung kailan ang loop ay
pumasok. Karaniwang ginagawa nitong mas mabagal ang pagtakbo ng mga programa. -funroll-all-loops nagpapahiwatig ng
parehong mga pagpipilian bilang -funroll-loops,

-fsplit-ivs-in-unroller
Pinapagana ang pagpapahayag ng mga halaga ng mga variable ng induction sa mga susunod na pag-ulit ng
unrolled loop gamit ang value sa unang pag-ulit. Sinisira nito ang mahabang dependency
chain, kaya nagpapabuti ng kahusayan ng mga pass sa pag-iskedyul.

Kumbinasyon ng -fweb at ang CSE ay kadalasang sapat upang makuha ang parehong epekto. Gayunpaman
sa mga kaso ang loop body ay mas kumplikado kaysa sa isang solong pangunahing bloke, ito ay hindi
maaasahan. Hindi rin ito gumagana sa ilan sa mga arkitektura dahil sa
mga paghihigpit sa CSE pass.

Ang pag-optimize na ito ay pinagana bilang default.

-fvariable-expansion-in-unroller
Sa opsyong ito, gagawa ang compiler ng maraming kopya ng ilang lokal na variable
kapag naglalabas ng loop na maaaring magresulta sa superior code.

-fpartial-inlining
Mga inline na bahagi ng mga function. Ang pagpipiliang ito ay may anumang epekto lamang kapag inlining mismo
naka-on ng -finline-function or -finline-small-functions mga pagpipilian.

Pinagana sa antas -O2.

-fpredictive-commoning
Magsagawa ng predictive commoning optimization, ibig sabihin, muling paggamit ng mga computations (lalo na
memory load at stores) na isinagawa sa mga nakaraang pag-ulit ng mga loop.

Ang pagpipiliang ito ay pinagana sa antas -O3.

-fprefetch-loop-arrays
Kung sinusuportahan ng target na makina, bumuo ng mga tagubilin upang i-prefetch ang memorya
pagbutihin ang pagganap ng mga loop na nag-a-access ng malalaking array.

Ang pagpipiliang ito ay maaaring makabuo ng mas mahusay o mas masahol na code; ang mga resulta ay lubos na nakadepende sa
istraktura ng mga loop sa loob ng source code.

Hindi pinagana sa antas -Os.

-fno-peephole
-fno-peephole2
Huwag paganahin ang anumang mga pag-optimize ng peephole na partikular sa makina. Ang pagkakaiba sa pagitan ng
-fno-peephole at -fno-peephole2 ay sa kung paano sila ipinatupad sa compiler; ilang
ang mga target ay gumagamit ng isa, ang ilan ay gumagamit ng isa, ang ilan ay gumagamit ng pareho.

-fpeephole ay pinagana bilang default. -fpeephole2 pinagana sa mga antas -O2, -O3, -Os.

-fno-guess-branch-probability
Huwag hulaan ang mga probabilidad ng sangay gamit ang heuristics.

Gagamit ang GCC ng heuristics upang hulaan ang mga probabilidad ng sangay kung hindi ibinigay ng
feedback sa profile (-fprofile-arcs). Ang mga heuristic na ito ay batay sa daloy ng kontrol
graph. Kung ang ilang mga probabilidad ng sangay ay tinukoy ng __builtin_expect, pagkatapos ay ang
ang heuristics ay gagamitin upang hulaan ang mga probabilidad ng sangay para sa natitirang bahagi ng daloy ng kontrol
graph, pagkuha ng __builtin_expect impormasyon sa account. Ang mga pakikipag-ugnayan sa pagitan ng
heuristics at __builtin_expect ay maaaring maging kumplikado, at sa ilang mga kaso, maaari itong maging kapaki-pakinabang sa
huwag paganahin ang heuristic upang ang mga epekto ng __builtin_expect ay mas madali upang
maunawaan.

Ang default ay -fguess-branch-probability sa mga antas -O, -O2, -O3, -Os.

-freorder-block
Ayusin muli ang mga pangunahing bloke sa pinagsama-samang function upang mabawasan ang bilang ng mga kinuha
sangay at pagbutihin ang code locality.

Pinagana sa mga antas -O2, -O3.

-freorder-block-and-partition
Bilang karagdagan sa muling pagsasaayos ng mga pangunahing bloke sa pinagsama-samang function, upang mabawasan
bilang ng mga kinuhang sanga, mga partisyon ng mainit at malamig na mga pangunahing bloke sa magkahiwalay na mga seksyon
ng assembly at .o file, para mapabuti ang paging at cache locality performance.

Awtomatikong naka-off ang optimization na ito sa pagkakaroon ng exception handling,
para sa linkonce na mga seksyon, para sa mga function na may katangian ng seksyong tinukoy ng gumagamit at sa alinman
arkitektura na hindi sumusuporta sa mga pinangalanang seksyon.

-freorder-function
Muling ayusin ang mga function sa object file upang mapabuti ang code locality. Ito ay
ipinatupad sa pamamagitan ng paggamit ng mga espesyal na subsection na ".text.hot" para sa pinakamadalas na isagawa
function at ".text.unlikely" para sa hindi malamang na executed function. Ang muling pagsasaayos ay ginagawa ng
ang linker kaya object file format ay dapat na sumusuporta sa pinangalanang mga seksyon at linker ay dapat ilagay
ang mga ito sa makatwirang paraan.

Gayundin, ang feedback sa profile ay dapat na available sa upang gawing epektibo ang opsyong ito. Tingnan mo
-fprofile-arcs para sa mga detalye.

Pinagana sa mga antas -O2, -O3, -Os.

-mahigpit-aliasing
Pahintulutan ang compiler na ipagpalagay ang pinakamahigpit na panuntunan sa pag-alyas na naaangkop sa wika
ini-compile. Para sa C (at C++), ina-activate nito ang mga pag-optimize batay sa uri ng
mga ekspresyon. Sa partikular, ang isang bagay ng isang uri ay ipinapalagay na hindi kailanman naninirahan sa
parehong address bilang isang bagay ng ibang uri, maliban kung ang mga uri ay halos pareho.
Halimbawa, ang isang "unsigned int" ay maaaring mag-alyas ng isang "int", ngunit hindi isang "void*" o isang "double". A
uri ng character ay maaaring mag-alyas ng anumang iba pang uri.

Bigyang-pansin ang code na tulad nito:

unyon a_union {
int i;
doble d;
};

int f() {
unyon a_union t;
td = 3.0;
ibalik ti;
}

Ang kasanayan ng pagbabasa mula sa ibang miyembro ng unyon kaysa sa pinakahuling miyembro
isinulat sa (tinatawag na "type-punning") ay karaniwan. Kahit sa -mahigpit-aliasing, uri-
pinahihintulutan ang pagpunan, kung maa-access ang memorya sa pamamagitan ng uri ng unyon. Kaya ang
ang code sa itaas ay gagana gaya ng inaasahan. Gayunpaman, ang code na ito ay maaaring hindi:

int f() {
unyon a_union t;
int* ip;
td = 3.0;
ip = &t.i;
ibalik *ip;
}

Katulad nito, ang pag-access sa pamamagitan ng pagkuha ng address, pag-cast ng resultang pointer at
ang pagderefer sa resulta ay may hindi natukoy na gawi, kahit na ang cast ay gumagamit ng uri ng unyon,
halimbawa:

int f() {
dobleng d = 3.0;
return ((union a_union *) &d)->i;
}

Ang -mahigpit-aliasing ang opsyon ay pinagana sa mga antas -O2, -O3, -Os.

-mahigpit-apaw
Payagan ang compiler na ipagpalagay ang mahigpit na nilagdaang mga panuntunan sa overflow, depende sa wika
ini-compile. Para sa C (at C++) nangangahulugan ito na overflow kapag gumagawa ng aritmetika sa
ang mga nilagdaang numero ay hindi natukoy, na nangangahulugan na ang compiler ay maaaring ipagpalagay na ito ay hindi
mangyari. Pinahihintulutan nito ang iba't ibang mga pag-optimize. Halimbawa, ipapalagay ng compiler
na ang isang expression tulad ng "i + 10 > i" ay palaging magiging totoo para sa nilagdaang "i". Ito
ang pagpapalagay ay wasto lamang kung ang nilagdaang overflow ay hindi natukoy, dahil ang expression ay mali
kung ang "i + 10" ay umaapaw kapag gumagamit ng twos complement arithmetic. Kapag nasa ang opsyong ito
epekto sa anumang pagtatangka upang matukoy kung ang isang operasyon sa mga nilagdaang numero ay aapaw
dapat na maingat na isulat upang hindi aktwal na masangkot ang overflow.

Ang pagpipiliang ito ay nagpapahintulot din sa compiler na ipalagay ang mahigpit na pointer semantics: ibinigay a
pointer sa isang bagay, kung ang pagdaragdag ng offset sa pointer na iyon ay hindi gumagawa ng pointer
sa parehong bagay, ang karagdagan ay hindi natukoy. Pinahihintulutan nito ang compiler na magtapos
na ang "p + u > p" ay palaging totoo para sa isang pointer na "p" at unsigned integer na "u". Ito
ang pagpapalagay ay wasto lamang dahil ang pointer wraparound ay hindi natukoy, tulad ng expression
false kung ang "p + u" ay umapaw gamit ang twos complement arithmetic.

Tingnan din ang -fwrapv opsyon. Gamit -fwrapv nangangahulugan na ang integer signed overflow ay
ganap na tinukoy: ito ay bumabalot. Kailan -fwrapv ay ginagamit, walang pagkakaiba sa pagitan
-mahigpit-apaw at -fno-strict-overflow para sa mga integer. Sa -fwrapv ibang mga klase
pinahihintulutan ang pag-apaw. Halimbawa, kung ang compiler ay nakakakuha ng overflow kapag ginagawa
arithmetic sa constants, ang overflowed value ay maaari pa ring gamitin -fwrapv, Ngunit hindi
kung hindi man.

Ang -mahigpit-apaw ang opsyon ay pinagana sa mga antas -O2, -O3, -Os.

-falign-functions
-falign-functions=n
Ihanay ang simula ng mga function sa susunod na power-of-two na mas malaki kaysa n, lumalaktaw hanggang sa n
byte. Halimbawa, -falign-functions=32 aligns function sa susunod na 32-byte
hangganan, ngunit -falign-functions=24 ay ihanay sa susunod na 32-byte na hangganan kung
ito ay maaaring gawin sa pamamagitan ng paglaktaw ng 23 byte o mas kaunti.

-fno-align-functions at -falign-functions=1 ay katumbas at ibig sabihin na gumagana
hindi magkakahanay.

Sinusuportahan lamang ng ilang assembler ang flag na ito kapag n ay kapangyarihan ng dalawa; sa kasong iyon, ito ay
bilugan

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-falign-labels
-falign-labels=n
Ihanay ang lahat ng target ng sangay sa isang power-of-two boundary, lumalaktaw hanggang sa n mga byte tulad ng
-falign-functions. Ang pagpipiliang ito ay madaling gawing mas mabagal ang code, dahil dapat itong ipasok
dummy operations kapag naabot ang target ng sangay sa karaniwang daloy ng code.

-fno-align-labels at -falign-labels=1 ay katumbas at nangangahulugan na ang mga label ay hindi magiging
nakahanay

If -falign-loops or -falign-jumps ay naaangkop at mas malaki kaysa sa halagang ito, kung gayon
ang kanilang mga halaga ay ginagamit sa halip.

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina na malamang
upang maging 1, ibig sabihin walang alignment.

Pinagana sa mga antas -O2, -O3.

-falign-loops
-falign-loops=n
I-align ang mga loop sa isang power-of-two na hangganan, lumalaktaw hanggang sa n mga byte tulad ng -falign-functions.
Ang pag-asa ay ang loop ay isasagawa nang maraming beses, na makakabawi sa anuman
pagpapatupad ng mga dummy na operasyon.

-fno-align-loops at -falign-loops=1 ay katumbas at nangangahulugan na ang mga loop ay hindi magiging
nakahanay

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-falign-jumps
-falign-jumps=n
I-align ang mga target ng branch sa isang power-of-two boundary, para sa mga target na branch kung saan ang mga target
maaari lamang maabot sa pamamagitan ng pagtalon, paglaktaw hanggang sa n mga byte tulad ng -falign-functions. Sa
sa kasong ito, walang dummy na operasyon ang kailangang isagawa.

-fno-align-jumps at -falign-jumps=1 ay katumbas at nangangahulugan na ang mga loop ay hindi magiging
nakahanay

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-funit-sa-isang-panahon
Ang pagpipiliang ito ay naiwan para sa mga dahilan ng pagiging tugma. -funit-sa-isang-panahon walang epekto, habang
-fno-unit-sa-isang-panahon nagpapahiwatig -fno-toplevel-reorder at -fno-section-anchors.

Pinagana bilang default.

-fno-toplevel-reorder
Huwag muling isaayos ang mga top-level na function, variable, at "asm" na mga pahayag. I-output ang mga ito
ang parehong pagkakasunud-sunod na lumilitaw ang mga ito sa input file. Kapag ginamit ang opsyong ito,
hindi aalisin ang mga unreference na static na variable. Ang pagpipiliang ito ay inilaan upang suportahan
umiiral na code na umaasa sa isang partikular na pag-order. Para sa bagong code, ito ay mas mahusay na gamitin
mga katangian

Pinagana sa antas -O0. Kapag tahasang hindi pinagana, ito rin ay nagpapahiwatig -fno-section-anchors,
na kung hindi man ay pinagana sa -O0 sa ilang mga target.

-fweb
Bumubuo ng mga web gaya ng karaniwang ginagamit para sa pagpaparehistro ng mga layunin ng paglalaan at italaga ang bawat web
indibidwal na pseudo register. Nagbibigay-daan ito sa pagpapatakbo ng pass allocation ng rehistro
pseudos nang direkta, ngunit pinalalakas din ang ilang iba pang mga optimization pass, tulad ng CSE,
loop optimizer at trivial dead code remover. Gayunpaman, maaari itong gumawa ng pag-debug
imposible, dahil ang mga variable ay hindi na mananatili sa isang "home register".

Pinagana bilang default sa -funroll-loops.

-fbuong-programa
Ipagpalagay na ang kasalukuyang compilation unit ay kumakatawan sa buong program na kino-compile.
Lahat ng mga pampublikong function at variable maliban sa "pangunahing" at ang mga pinagsama ng
ang attribute na "externally_visible" ay nagiging mga static na function at sa bisa ay na-optimize
mas agresibo ng mga interprocedural optimizer. Kung ginto ay ginagamit bilang linker plugin,
Ang mga attribute na "externally_visible" ay awtomatikong idinaragdag sa mga function (hindi pa variable
dahil sa agos ginto isyu) na naa-access sa labas ng mga bagay ng LTO ayon sa
resolution file na ginawa ng ginto. Para sa iba pang mga linker na hindi makabuo ng resolusyon
file, ang mga tahasang "externally_visible" na mga katangian ay kailangan pa rin. Habang ang pagpipiliang ito
ay katumbas ng wastong paggamit ng "static" na keyword para sa mga program na binubuo ng a
solong file, kasama ng opsyon -flto ang watawat na ito ay maaaring gamitin sa pag-compile ng marami
mas maliliit na programa dahil ang mga function at variable ay naging lokal para sa kabuuan
pinagsamang compilation unit, hindi para sa solong source file mismo.

Ang pagpipiliang ito ay nagpapahiwatig -fwhole-file para sa mga programang Fortran.

-flto[=n]
Pinapatakbo ng opsyong ito ang karaniwang link-time optimizer. Kapag na-invoke gamit ang source code, ito
bumubuo ng GIMPLE (isa sa mga panloob na representasyon ng GCC) at isinusulat ito sa espesyal na ELF
mga seksyon sa object file. Kapag ang mga object file ay pinagsama-sama, ang lahat ng
Ang mga function body ay binabasa mula sa mga seksyong ELF na ito at na-instantiate na parang sila na
bahagi ng parehong yunit ng pagsasalin.

Upang gamitin ang link-time optimizer, -flto kailangang tukuyin sa oras ng pag-compile at habang
ang huling link. Halimbawa:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Ang unang dalawang invocation sa GCC ay nagse-save ng bytecode na representasyon ng GIMPLE sa espesyal
Mga seksyon ng ELF sa loob foo.o at bar.o. Binabasa ng huling invocation ang GIMPLE bytecode
mula foo.o at bar.o, pinagsasama ang dalawang file sa isang panloob na imahe, at pinagsama-sama
ang resulta gaya ng dati. Dahil pareho foo.o at bar.o ay pinagsama sa isang larawan, ito
nagiging sanhi ng lahat ng interprocedural na pagsusuri at pag-optimize sa GCC upang gumana sa buong
dalawang file na parang isa lang. Nangangahulugan ito, halimbawa, na ang inliner ay
magagawang mag-inline ng mga function sa bar.o sa mga function sa foo.o at kabaliktaran.

Ang isa pang (mas simple) na paraan upang paganahin ang pag-optimize ng oras ng link ay:

gcc -o myprog -flto -O2 foo.c bar.c

Ang nasa itaas ay bumubuo ng bytecode para sa foo.c at bar.c, pinagsasama-sama ang mga ito sa isang solong
GIMPLE na representasyon at ino-optimize ang mga ito gaya ng dati upang makagawa myprog.

Ang tanging mahalagang bagay na dapat tandaan ay ang paganahin ang pag-optimize ng oras ng link
-flto kailangang maipasa ang flag sa compile at sa link na mga command.

Upang gawing epektibo ang buong programa ng pag-optimize, kinakailangan na gawing buo ang ilang partikular
mga pagpapalagay ng programa. Kailangang malaman ng compiler kung ano ang mga function at variable
na-access ng mga aklatan at runtime sa labas ng link-time optimized unit. Kailan
suportado ng linker, ang linker plugin (tingnan -fuse-linker-plugin) pumasa
impormasyon sa compiler tungkol sa ginamit at nakikitang mga simbolo sa labas. Kapag ang
linker plugin ay hindi magagamit, -fbuong-programa dapat gamitin upang payagan ang compiler
upang gawin ang mga pagpapalagay na ito, na humahantong sa mga mas agresibong desisyon sa pag-optimize.

Tandaan na kapag ang isang file ay pinagsama-sama sa -flto, ang nabuong object file ay mas malaki kaysa sa
isang regular na object file dahil naglalaman ito ng mga GIMPLE bytecode at ang karaniwang panghuling code.
Nangangahulugan ito na ang mga object file na may impormasyon ng LTO ay maaaring maiugnay bilang normal na bagay
mga file; kung -flto ay hindi naipapasa sa linker, walang mga interprocedural na pag-optimize
inilapat

Bukod pa rito, ang mga flag ng pag-optimize na ginagamit upang mag-compile ng mga indibidwal na file ay hindi
kinakailangang nauugnay sa mga ginamit sa oras ng pag-link. Halimbawa,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

Gumagawa ito ng mga indibidwal na object file na may hindi na-optimize na assembler code, ngunit ang
binary na nagreresulta myprog ay na-optimize sa -O3. Kung, sa halip, ang panghuling binary ay
nabuo nang wala -flto, Pagkatapos myprog ay hindi na-optimize.

Kapag gumagawa ng panghuling binary na may -flto, inilalapat lang ng GCC ang mga pag-optimize ng oras ng pag-link
sa mga file na naglalaman ng bytecode. Samakatuwid, maaari mong ihalo at itugma ang mga file ng object
at mga aklatan na may GIMPLE bytecode at final object code. Awtomatikong pinipili ng GCC
kung aling mga file ang i-optimize sa LTO mode at kung aling mga file ang ili-link nang wala nang karagdagang
pagpoproseso.

Mayroong ilang mga flag ng pagbuo ng code na pinapanatili ng GCC kapag bumubuo ng mga bytecode, bilang
kailangan nilang gamitin sa huling yugto ng link. Sa kasalukuyan, ang mga sumusunod na opsyon
ay nai-save sa GIMPLE bytecode file: -fPIC, -karaniwan at lahat ng -m target na mga bandila.

Sa oras ng pag-link, binabasa ang mga opsyong ito at muling inilalapat. Tandaan na ang kasalukuyang
ang pagpapatupad ay hindi nagtatangkang kilalanin ang mga magkasalungat na halaga para sa mga opsyong ito. Kung
ang iba't ibang mga file ay may magkasalungat na mga halaga ng opsyon (hal., isang file ang pinagsama-sama sa -fPIC
at isa pa ay hindi), ginagamit lang ng compiler ang huling value na nabasa mula sa bytecode
mga file. Inirerekomenda, kung gayon, na ipunin mo ang lahat ng mga file na kalahok sa
parehong link na may parehong mga pagpipilian.

Kung ang LTO ay makatagpo ng mga bagay na may C linkage na idineklara na may mga hindi tugmang uri sa magkahiwalay
mga unit ng pagsasalin na magkakaugnay (hindi natukoy na pag-uugali ayon sa ISO C99
6.2.7), maaaring maglabas ng non-fatal diagnostic. Ang pag-uugali ay hindi pa rin natukoy sa pagtakbo
time.

Ang isa pang tampok ng LTO ay posibleng maglapat ng mga interprocedural optimization
sa mga file na nakasulat sa iba't ibang wika. Nangangailangan ito ng suporta sa harap ng wika
wakas. Sa kasalukuyan, ang mga front end ng C, C++ at Fortran ay may kakayahang maglabas ng GIMPLE
bytecodes, kaya dapat gumana ang isang bagay na tulad nito:

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

Pansinin na ang huling link ay tapos na sa g ++ upang makuha ang mga C++ runtime library at
-lgfortran ay idinagdag upang makuha ang Fortran runtime library. Sa pangkalahatan, kapag naghahalo
mga wika sa LTO mode, dapat mong gamitin ang parehong mga opsyon sa command ng link tulad ng kapag naghahalo
mga wika sa isang regular (hindi LTO) na compilation; ang kailangan mo lang idagdag ay -flto sa lahat ng
mag-compile at mag-link ng mga utos.

Kung ang mga object file na naglalaman ng GIMPLE bytecode ay naka-store sa isang library archive, sabihin
libfoo.a, posibleng kunin at gamitin ang mga ito sa isang link ng LTO kung gumagamit ka ng a
linker na may suporta sa plugin. Upang paganahin ang tampok na ito, gamitin ang bandila -fuse-linker-plugin
sa oras ng link:

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

Kapag pinagana ang linker plugin, kinukuha ng linker ang kinakailangang GIMPLE file mula sa
libfoo.a at ipapasa ang mga ito sa tumatakbong GCC para gawin silang bahagi ng pinagsama-samang
GIMPLE na imahe upang ma-optimize.

Kung hindi ka gumagamit ng linker na may suporta sa plugin at/o hindi pinagana ang linker
plugin, pagkatapos ay ang mga bagay sa loob libfoo.a ay na-extract at naka-link gaya ng dati, ngunit sila
huwag lumahok sa proseso ng pag-optimize ng LTO.

Ang mga pag-optimize ng oras ng link ay hindi nangangailangan ng pagkakaroon ng buong programa upang gumana.
Kung ang programa ay hindi nangangailangan ng anumang mga simbolo na i-export, posible na pagsamahin
-flto at -fbuong-programa upang payagan ang mga interprocedural optimizer na gumamit ng higit pa
mga agresibong pagpapalagay na maaaring humantong sa mga pinahusay na pagkakataon sa pag-optimize. Paggamit ng
-fbuong-programa ay hindi kailangan kapag ang linker plugin ay aktibo (tingnan -fuse-linker-plugin).

Ang kasalukuyang pagpapatupad ng LTO ay hindi nagtatangkang bumuo ng bytecode
portable sa pagitan ng iba't ibang uri ng mga host. Ang mga bytecode file ay may bersyon at doon
ay isang mahigpit na pagsusuri sa bersyon, kaya ang mga bytecode file na nabuo sa isang bersyon ng GCC ay hindi
gumana sa isang mas lumang/mas bagong bersyon ng GCC.

Hindi gumagana nang maayos ang pag-optimize ng oras ng link sa pagbuo ng impormasyon sa pag-debug.
Pagsasama -flto sa -g ay kasalukuyang eksperimental at inaasahang magbubunga ng mali
resulta.

Kung tinukoy mo ang opsyonal n, ang pag-optimize at pagbuo ng code na ginawa sa oras ng link
ay naisakatuparan sa parallel gamit n parallel na trabaho sa pamamagitan ng paggamit ng naka-install gumawa programa.
Ang variable ng kapaligiran GAWIN maaaring gamitin upang i-override ang program na ginamit. Ang default
halaga para sa n ay 1.

Maaari mo ring tukuyin -flto=tagapagtrabaho upang gamitin ang mode ng server ng trabaho ng GNU make upang matukoy
ang bilang ng mga parallel na trabaho. Ito ay kapaki-pakinabang kapag ang Makefile na tumatawag sa GCC ay mayroon na
executing in parallel. Dapat mong ihanda ang isang + sa recipe ng utos sa magulang
Makefile para gumana ito. Ang pagpipiliang ito ay malamang na gagana lamang kung GAWIN ay ginawa ng GNU.

Ang pagpipiliang ito ay hindi pinagana bilang default

-flto-partition=algae
Tukuyin ang algorithm ng partitioning na ginagamit ng link-time optimizer. Ang halaga ay
alinman sa "1to1" upang tukuyin ang isang partitioning na sumasalamin sa orihinal na source file o
"balanseng" upang tukuyin ang paghahati sa mga pantay na laki ng mga tipak (kung posible).
Ang pagtukoy sa "wala" bilang isang algorithm ay ganap na hindi pinapagana ang partitioning at streaming. Ang
ang default na halaga ay "balanse".

-flto-compression-level=n
Tinutukoy ng opsyong ito ang antas ng compression na ginagamit para sa intermediate na wikang nakasulat
sa mga file ng object ng LTO, at makabuluhan lamang ito kasabay ng LTO mode (-flto).
Ang mga wastong halaga ay 0 (walang compression) hanggang 9 (maximum compression). Mga halaga sa labas nito
Ang hanay ay naka-clamp sa alinman sa 0 o 9. Kung ang opsyon ay hindi ibinigay, isang default na balanse
ginagamit ang compression setting.

-flto-ulat
Nagpi-print ng ulat na may mga panloob na detalye sa paggana ng link-time optimizer. Ang
iba-iba ang mga nilalaman ng ulat na ito sa bawat bersyon. Ito ay nilalayong maging kapaki-pakinabang sa GCC
mga developer kapag nagpoproseso ng mga object file sa LTO mode (sa pamamagitan ng -flto).

Hindi pinagana nang default.

-fuse-linker-plugin
Pinapagana ang paggamit ng isang linker plugin sa panahon ng pag-optimize ng oras ng link. Ang pagpipiliang ito ay umaasa
sa suporta ng plugin sa linker, na magagamit sa ginto o sa GNU ld 2.21 o
mas bago.

Ang pagpipiliang ito ay nagbibigay-daan sa pagkuha ng mga object file na may GIMPLE bytecode sa labas ng library
mga archive. Pinapabuti nito ang kalidad ng pag-optimize sa pamamagitan ng paglalantad ng higit pang code sa link-
time optimizer. Tinutukoy ng impormasyong ito kung anong mga simbolo ang maaaring ma-access sa labas
(sa pamamagitan ng bagay na hindi LTO o habang nagli-link). Nagreresulta sa mga pagpapahusay sa kalidad ng code sa
binary (at mga shared library na gumagamit ng hidden visibility) ay katulad ng
"-fwhole-program". Tingnan mo -flto para sa paglalarawan ng epekto ng watawat na ito at kung paano
gamitin ito.

Ang pagpipiliang ito ay pinagana bilang default kapag ang suporta ng LTO sa GCC ay pinagana at ang GCC ay pinagana
na-configure para gamitin sa isang linker na sumusuporta sa mga plugin (GNU ld 2.21 o mas bago o ginto).

-ffat-lto-mga bagay
Ang mga fat LTO object ay object file na naglalaman ng parehong intermediate na wika at ang
object code. Ginagawa nitong magagamit ang mga ito para sa parehong LTO linking at normal linking. Ito
Ang pagpipilian ay epektibo lamang kapag nag-compile sa -flto at hindi pinapansin sa oras ng link.

-fno-fat-lto-mga bagay pinapabuti ang oras ng compilation sa simpleng LTO, ngunit nangangailangan ng
kumpletong toolchain para malaman ang LTO. Nangangailangan ito ng linker na may suporta sa linker plugin
para sa pangunahing pag-andar. Bilang karagdagan, kailangan ng nm, ar at ranlib na suportahan ang linker
mga plugin upang payagan ang isang buong tampok na build environment (may kakayahang bumuo ng static
mga aklatan atbp).

Ang default ay -ffat-lto-mga bagay ngunit ang default na ito ay nilalayong baguhin sa hinaharap
ilalabas kapag nagiging mas karaniwan ang mga environment na pinagana ng linker plugin.

-fcompare-elim
Pagkatapos magrehistro ng allocation at post-register allocation instruction splitting, tukuyin
mga tagubilin sa aritmetika na nagko-compute ng mga flag ng processor na katulad ng isang operasyon sa paghahambing
batay sa arithmetic na iyon. Kung maaari, alisin ang tahasang paghahambing na operasyon.

Nalalapat lang ang pass na ito sa ilang partikular na target na hindi maaaring tahasang kumakatawan sa
pagpapatakbo ng paghahambing bago makumpleto ang paglalaan ng rehistro.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fuse-ld=ginto
Gamitin ang ginto linker sa halip na ang default na linker.

-fuse-ld=bfd
Gamitin ang ld.bfd linker sa halip na ang default na linker.

-fcprop-nagparehistro
Pagkatapos magrehistro ng allocation at post-register allocation instruction splitting, kami
magsagawa ng copy-propagation pass upang subukang bawasan ang mga dependency sa pag-iiskedyul at
paminsan-minsan ay alisin ang kopya.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fprofile-pagwawasto
Ang mga profile na nakolekta gamit ang isang binary na instrumento para sa mga multi-threaded na programa ay maaaring
hindi naaayon dahil sa mga hindi nakuhang counter update. Kapag tinukoy ang opsyong ito, gagawin ng GCC
gumamit ng heuristics upang itama o pakinisin ang mga hindi pagkakapare-pareho. Bilang default, gagawin ng GCC
naglalabas ng mensahe ng error kapag may nakitang hindi tugmang profile.

-fprofile-dir=landas
Itakda ang direktoryo kung saan hanapin ang mga file ng data ng profile landas. Ang pagpipiliang ito
nakakaapekto lamang sa data ng profile na nabuo ni -fprofile-bumuo, -ftest-saklaw,
-fprofile-arcs at ginagamit ng -fprofile-gamitin at -fbranch-probability at kaugnay nito
mga pagpipilian. Maaaring gamitin ang parehong absolute at relative path. Bilang default, gagamitin ng GCC ang
kasalukuyang direktoryo bilang landas, sa gayon ang file ng data ng profile ay lilitaw sa parehong
direktoryo bilang object file.

-fprofile-bumuo
-fprofile-generate=landas
Paganahin ang mga opsyon na karaniwang ginagamit para sa pag-instrumento ng application upang makagawa ng kapaki-pakinabang na profile
para sa muling pagsasama-sama sa ibang pagkakataon na may pag-optimize na batay sa feedback ng profile. Dapat mong gamitin
-fprofile-bumuo parehong kapag nag-compile at kapag nagli-link ng iyong programa.

Ang mga sumusunod na opsyon ay pinagana: "-fprofile-arcs", "-fprofile-values", "-fvpt".

If landas ay tinukoy, titingnan ng GCC ang landas upang mahanap ang data ng feedback ng profile
mga file. Tingnan mo -fprofile-dir.

-fprofile-gamitin
-fprofile-use=landas
Paganahin ang feedback sa profile na nakadirekta sa mga pag-optimize, at ang mga pag-optimize sa pangkalahatan ay kumikita
may available lang na feedback sa profile.

Ang mga sumusunod na opsyon ay pinagana: "-fbranch-probability", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

Bilang default, naglalabas ang GCC ng mensahe ng error kung ang mga profile ng feedback ay hindi tumutugma sa
source code. Ang error na ito ay maaaring gawing babala sa pamamagitan ng paggamit -Wcoverage-mismatch.
Tandaan na maaaring magresulta ito sa hindi magandang na-optimize na code.

If landas ay tinukoy, titingnan ng GCC ang landas upang mahanap ang data ng feedback ng profile
mga file. Tingnan mo -fprofile-dir.

Kinokontrol ng mga sumusunod na opsyon ang pag-uugali ng compiler patungkol sa floating-point arithmetic.
Ang mga pagpipiliang ito ay ipinagpalit sa pagitan ng bilis at kawastuhan. Dapat na partikular na pinagana ang lahat.

-float-store
Huwag mag-imbak ng mga variable na floating-point sa mga rehistro, at pagbawalan ang iba pang mga opsyon na
maaaring magbago kung ang isang floating-point na halaga ay kinuha mula sa isang rehistro o memorya.

Pinipigilan ng pagpipiliang ito ang hindi kanais-nais na labis na katumpakan sa mga makina tulad ng 68000 kung saan
ang mga lumulutang na rehistro (ng 68881) ay nagpapanatili ng higit na katumpakan kaysa sa isang "doble" ay dapat
magkaroon ng. Katulad din para sa x86 architecture. Para sa karamihan ng mga programa, ang labis na katumpakan
ay mabuti lamang, ngunit ang ilang mga programa ay umaasa sa tiyak na kahulugan ng IEEE na lumulutang
punto. Gamitin -float-store para sa mga naturang programa, pagkatapos baguhin ang mga ito upang maiimbak ang lahat
nauugnay na intermediate computations sa mga variable.

-fexcess-precision=estilo
Ang opsyong ito ay nagbibigay-daan sa karagdagang kontrol sa labis na katumpakan sa mga makina kung saan lumulutang-
Ang mga rehistro ng punto ay may higit na katumpakan kaysa sa mga uri ng "float" at "double" ng IEEE at ang
hindi sinusuportahan ng processor ang mga operasyong pag-round sa mga ganitong uri. Bilang default,
-fexcess-precision=mabilis ay may bisa; nangangahulugan ito na ang mga operasyon ay isinasagawa sa
ang katumpakan ng mga rehistro at na ito ay hindi mahuhulaan kapag ini-round sa mga uri
na tinukoy sa source code ay nagaganap. Kapag kino-compile ang C, kung
-fexcess-precision=standard ay tinukoy pagkatapos ang labis na katumpakan ay susunod sa mga patakaran
tinukoy sa ISO C99; sa partikular, ang parehong mga cast at takdang-aralin ay nagiging sanhi ng mga halaga
bilugan sa kanilang mga uri ng semantiko (samantalang -float-store nakakaapekto lamang sa mga takdang-aralin).
Ang pagpipiliang ito ay pinagana bilang default para sa C kung ang isang mahigpit na opsyon sa pagsunod gaya ng
-std=c99 Ginagamit.

-fexcess-precision=standard ay hindi ipinatupad para sa mga wika maliban sa C, at walang
epekto kung -funsafe-math-optimizations or -ffast-math ay tinukoy. Sa x86, ito
wala ring epekto kung -mfpmath=sse or -mfpmath=sse+387 ay tinukoy; sa dating
kaso, IEEE semantics nalalapat nang walang labis na katumpakan, at sa huli, rounding ay
hindi mahuhulaan.

-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-lamang,
-fno-rounding-math, -fno-signaling-nans at -fcx-limited-range.

Ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__FAST_MATH__" upang matukoy.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon bukod pa -Ofast dahil maaari itong magresulta sa
maling output para sa mga program na nakadepende sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

-fno-math-errno
Huwag itakda ang ERRNO pagkatapos tawagan ang mga function ng matematika na naisakatuparan sa isang solong
pagtuturo, hal, sqrt. Isang program na umaasa sa IEEE exceptions para sa math error
Maaaring naisin ng paghawak na gamitin ang flag na ito para sa bilis habang pinapanatili ang IEEE arithmetic
compatibility.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

Ang default ay -fmath-errno.

Sa Darwin system, ang math library ay hindi kailanman nagtatakda ng "errno". Kaya walang dahilan
para sa compiler na isaalang-alang ang posibilidad na ito ay maaaring, at -fno-math-errno ay ang
default.

-funsafe-math-optimizations
Payagan ang mga pag-optimize para sa floating-point aritmetika na (a) ipinapalagay na ang mga argumento at
wasto ang mga resulta at (b) maaaring lumabag sa mga pamantayan ng IEEE o ANSI. Kapag ginamit sa link-time,
maaaring may kasama itong mga aklatan o startup file na nagbabago sa default na FPU control word o
iba pang mga katulad na pag-optimize.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito. Pinapagana
-fno-signed-zero, -fno-trap-math, -fassociative-math at -freciprocal-math.

Ang default ay -fno-unsafe-math-optimizations.

-fassociative-math
Payagan ang muling pag-uugnay ng mga operand sa serye ng mga floating-point na operasyon. Ito
lumalabag sa pamantayan ng wikang ISO C at C++ sa pamamagitan ng posibleng pagbabago sa resulta ng pag-compute.
TANDAAN: ang muling pag-order ay maaaring magbago ng tanda ng zero pati na rin huwag pansinin ang NaNs at pagbawalan o
lumikha ng underflow o overflow (at sa gayon ay hindi magagamit sa code na umaasa sa rounding
pag-uugali tulad ng "(x + 2**52) - 2**52". Maaari ring muling ayusin ang mga floating-point na paghahambing at
kaya't hindi maaaring gamitin kapag kinakailangan ang mga iniutos na paghahambing. Ang pagpipiliang ito ay nangangailangan nito
kapwa -fno-signed-zero at -fno-trap-math may bisa. Bukod dito, hindi ito gumagawa
magkano ang kahulugan sa -frounding-math. Para sa Fortran ang opsyon ay awtomatikong pinagana kapag
kapwa -fno-signed-zero at -fno-trap-math ay may bisa.

Ang default ay -fno-associative-math.

-freciprocal-math
Payagan ang reciprocal ng isang halaga na gamitin sa halip na hatiin sa halaga kung ito
nagbibigay-daan sa mga pag-optimize. Halimbawa ang "x / y" ay maaaring mapalitan ng "x * (1/y)", which is
kapaki-pakinabang kung ang "(1/y)" ay napapailalim sa karaniwang pag-aalis ng subexpression. Tandaan na ito
nawawala ang katumpakan at pinapataas ang bilang ng mga flop na gumagana sa halaga.

Ang default ay -fno-reciprocal-math.

-ffinite-math-lamang
Payagan ang mga pag-optimize para sa floating-point aritmetika na ipinapalagay na ang mga argumento at
ang mga resulta ay hindi NaNs o +-Infs.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

Ang default ay -fno-finite-math-lamang.

-fno-signed-zero
Payagan ang mga pag-optimize para sa floating-point arithmetic na hindi binabalewala ang signedness ng zero.
Tinutukoy ng IEEE arithmetic ang pag-uugali ng mga natatanging +0.0 at -0.0 na halaga, na pagkatapos
ipinagbabawal ang pagpapasimple ng mga expression tulad ng x+0.0 o 0.0*x (kahit na may
-ffinite-math-lamang). Ang opsyong ito ay nagpapahiwatig na ang senyales ng isang zero na resulta ay hindi
makabuluhang.

Ang default ay -fsigned-zero.

-fno-trap-math
I-compile ang code na ipinapalagay na ang mga pagpapatakbo ng floating-point ay hindi makakabuo ng nakikita ng user
mga bitag. Kasama sa mga traps na ito ang paghahati sa pamamagitan ng zero, overflow, underflow, hindi eksaktong resulta at
di-wastong operasyon. Ang pagpipiliang ito ay nangangailangan nito -fno-signaling-nans may bisa.
Ang pagtatakda ng opsyong ito ay maaaring magbigay-daan sa mas mabilis na code kung ang isa ay umaasa sa "non-stop" na arithmetic ng IEEE,
halimbawa.

Ang opsyong ito ay hindi dapat i-on ng sinuman -O opsyon dahil maaari itong magresulta sa
maling output para sa mga program na nakadepende sa eksaktong pagpapatupad ng IEEE o ISO
mga tuntunin/spesipikasyon para sa mga function ng matematika.

Ang default ay -ftrapping-math.

-frounding-math
Huwag paganahin ang mga pagbabago at pag-optimize na nagpapalagay ng default na floating-point rounding
pag-uugali. Ito ay round-to-zero para sa lahat ng floating point sa integer na mga conversion, at
round-to-pinakamalapit para sa lahat ng iba pang arithmetic truncation. Ang pagpipiliang ito ay dapat na
tinukoy para sa mga program na dynamic na nagbabago sa FP rounding mode, o maaaring iyon
isinagawa gamit ang isang non-default na rounding mode. Hindi pinapagana ng opsyong ito ang patuloy na pagtitiklop ng
mga floating-point na expression sa oras ng pag-compile (na maaaring maapektuhan ng rounding mode)
at arithmetic transformations na hindi ligtas sa pagkakaroon ng sign-dependent
rounding mode.

Ang default ay -fno-rounding-math.

Ang opsyong ito ay eksperimental at hindi kasalukuyang ginagarantiya na hindi paganahin ang lahat ng GCC
mga pag-optimize na apektado ng rounding mode. Maaaring magbigay ang mga hinaharap na bersyon ng GCC
mas pinong kontrol sa setting na ito gamit ang "FENV_ACCESS" pragma ng C99. Ang command-line na ito
ang opsyon ay gagamitin upang tukuyin ang default na estado para sa "FENV_ACCESS".

-fsignaling-nans
Mag-compile ng code sa pag-aakalang ang IEEE signaling NaNs ay maaaring bumuo ng mga bitag na nakikita ng user habang
mga pagpapatakbo ng floating-point. Ang pagtatakda ng opsyong ito ay hindi pinapagana ang mga pag-optimize na maaaring magbago
ang bilang ng mga pagbubukod na nakikita sa pagsenyas ng mga NaN. Ang pagpipiliang ito ay nagpapahiwatig
-ftrapping-math.

Ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__SUPPORT_SNAN__" upang matukoy.

Ang default ay -fno-signaling-nans.

Ang opsyong ito ay eksperimental at hindi kasalukuyang ginagarantiya na hindi paganahin ang lahat ng GCC
mga pag-optimize na nakakaapekto sa pag-uugali ng pagsenyas ng NaN.

-fsingle-precision-constant
Tratuhin ang mga floating-point constant bilang solong katumpakan sa halip na implicitly na mag-convert
ang mga ito sa double-precision constants.

-fcx-limited-range
Kapag pinagana, ang opsyong ito ay nagsasaad na ang isang hakbang sa pagbabawas ng hanay ay hindi kailangan kapag
gumaganap ng kumplikadong dibisyon. Gayundin, walang pagsusuri kung ang resulta ng a
complex multiplication o division ay "NaN + I*NaN", na may pagtatangkang iligtas ang
sitwasyon sa kasong iyon. Ang default ay -fno-cx-limited-range, ngunit pinagana ng
-ffast-math.

Kinokontrol ng opsyong ito ang default na setting ng ISO C99 "CX_LIMITED_RANGE" pragma.
Gayunpaman, ang opsyon ay nalalapat sa lahat ng mga wika.

-fcx-fortran-rules
Ang kumplikadong multiplikasyon at paghahati ay sumusunod sa mga patakaran ng Fortran. Ang pagbabawas ng saklaw ay ginagawa bilang
bahagi ng kumplikadong paghahati, ngunit walang pagsuri kung ang resulta ng isang kumplikado
multiplication o division ay "NaN + I*NaN", na may pagtatangkang iligtas ang sitwasyon
sa kasong iyon

Ang default ay -fno-cx-fortran-rules.

Kinokontrol ng mga sumusunod na opsyon ang mga pag-optimize na maaaring mapabuti ang pagganap, ngunit hindi
pinagana ng sinuman -O mga pagpipilian. Kasama sa seksyong ito ang mga pang-eksperimentong opsyon na maaaring makagawa
sirang code.

-fbranch-probability
Pagkatapos magpatakbo ng isang programa na pinagsama-sama sa -fprofile-arcs, maaari mo itong i-compile sa pangalawang pagkakataon
paggamit -fbranch-probability, upang mapabuti ang mga pag-optimize batay sa dami ng beses
kinuha ang bawat sangay. Kapag ang programa ay pinagsama-sama sa -fprofile-arcs paglabas nito ay nagse-save
Ang arc execution ay binibilang sa isang file na tinatawag sourcename.gcda para sa bawat source file. Ang
impormasyon sa data file na ito ay lubos na nakadepende sa istraktura ng nabuo
code, kaya dapat mong gamitin ang parehong source code at ang parehong mga opsyon sa pag-optimize para sa pareho
mga compilation.

may -fbranch-probability, inilalagay ng GCC ang isang REG_BR_PROB tandaan sa bawat isa JUMP_INSN at
CALL_INSN. Maaaring gamitin ang mga ito upang mapabuti ang pag-optimize. Sa kasalukuyan, ginagamit lamang ang mga ito
sa isang lugar: sa reorg.c, sa halip na hulaan kung aling landas ang pinakamalamang na pupuntahan ng sangay
kunin, ang REG_BR_PROB ang mga halaga ay ginagamit upang eksaktong matukoy kung aling landas ang mas tatahakin
madalas.

-fprofile-mga halaga
Kung isasama sa -fprofile-arcs, nagdaragdag ito ng code upang ang ilang data tungkol sa mga halaga ng
ang mga expression sa programa ay natipon.

may -fbranch-probability, binabasa nito pabalik ang data na nakalap mula sa mga halaga ng profiling ng
mga expression para sa paggamit sa mga pag-optimize.

Pinagana gamit ang -fprofile-bumuo at -fprofile-gamitin.

-fvpt
Kung isasama sa -fprofile-arcs, inutusan nito ang compiler na magdagdag ng code na ipunin
impormasyon tungkol sa mga halaga ng mga expression.

may -fbranch-probability, binabasa nito pabalik ang data na nakalap at aktwal na gumaganap ng
mga pag-optimize batay sa kanila. Sa kasalukuyan ang mga pag-optimize ay kinabibilangan ng espesyalisasyon ng
division operation gamit ang kaalaman tungkol sa halaga ng denominator.

-frename-register
Subukang iwasan ang mga maling dependency sa naka-iskedyul na code sa pamamagitan ng paggamit ng mga naiwang rehistro
matapos ang pagrehistro ng alokasyon. Ang pag-optimize na ito ay higit na makikinabang sa mga processor
maraming rehistro. Depende sa format ng impormasyon sa pag-debug na pinagtibay ng target,
gayunpaman, maaari nitong gawing imposible ang pag-debug, dahil hindi na mananatili ang mga variable sa a
"rehistro sa bahay".

Pinagana bilang default sa -funroll-loops at -fpeel-loops.

-ftracer
Magsagawa ng tail duplication upang palakihin ang laki ng superblock. Ang pagbabagong ito ay pinapasimple
ang control flow ng function na nagpapahintulot sa iba pang mga optimization na gumawa ng mas mahusay na trabaho.

Pinagana gamit ang -fprofile-gamitin.

-funroll-loops
I-unroll ang mga loop na ang bilang ng mga pag-ulit ay maaaring matukoy sa oras ng pag-compile o pagkatapos
pagpasok sa loop. -funroll-loops nagpapahiwatig -frerun-cse-after-loop, -fweb at
-frename-register. Ino-on din nito ang kumpletong pagbabalat ng loop (ibig sabihin, kumpletong pag-alis ng
mga loop na may maliit na pare-parehong bilang ng mga pag-ulit). Ang pagpipiliang ito ay nagpapalaki ng code, at
maaari o hindi maaaring gawin itong tumakbo nang mas mabilis.

Pinagana gamit ang -fprofile-gamitin.

-funroll-all-loops
I-unroll ang lahat ng mga loop, kahit na ang kanilang bilang ng mga pag-ulit ay hindi tiyak kung kailan ang loop ay
pumasok. Karaniwang ginagawa nitong mas mabagal ang pagtakbo ng mga programa. -funroll-all-loops nagpapahiwatig ng
parehong mga pagpipilian bilang -funroll-loops.

-fpeel-loops
Peels loops kung saan mayroong sapat na impormasyon na hindi gaanong gumulong (mula sa
feedback sa profile). Ino-on din nito ang kumpletong pagbabalat ng loop (ibig sabihin, kumpletong pag-alis ng
mga loop na may maliit na pare-parehong bilang ng mga pag-ulit).

Pinagana gamit ang -fprofile-gamitin.

-fmove-loop-invariants
Pinapagana ang loop invariant motion pass sa RTL loop optimizer. Pinagana sa antas
-O1

-funswitch-loops
Ilipat ang mga sanga na may loop invariant na kundisyon palabas ng loop, na may mga duplicate ng
loop sa parehong mga sanga (binago ayon sa resulta ng kondisyon).

-ffunction-seksyon
-fdata-seksyon
Ilagay ang bawat function o data item sa sarili nitong seksyon sa output file kung ang target
sumusuporta sa mga arbitrary na seksyon. Ang pangalan ng function o ang pangalan ng data item
tinutukoy ang pangalan ng seksyon sa output file.

Gamitin ang mga opsyong ito sa mga system kung saan maaaring magsagawa ang linker ng mga pag-optimize upang mapabuti
lokalidad ng sanggunian sa espasyo ng pagtuturo. Karamihan sa mga system na gumagamit ng ELF object
format at mga processor ng SPARC na tumatakbo sa Solaris 2 ay may mga linker na may ganitong mga pag-optimize.
Maaaring mayroon ang AIX ng mga pag-optimize na ito sa hinaharap.

Gamitin lamang ang mga opsyong ito kapag may malaking benepisyo mula sa paggawa nito. kapag ikaw
tukuyin ang mga pagpipiliang ito, ang assembler at linker ay lilikha ng mas malaking bagay at
executable file at magiging mas mabagal din. Hindi mo magagamit ang "gprof" sa lahat
system kung tinukoy mo ang opsyong ito at maaaring magkaroon ka ng mga problema sa pag-debug kung ikaw
tukuyin ang parehong opsyong ito at -g.

-fbranch-target-load-optimize
Magsagawa ng branch target register load optimization bago ang prologue / epilogue threading.
Ang paggamit ng mga target na rehistro ay karaniwang mailantad lamang sa panahon ng pag-reload, kaya ang pagtaas
naglo-load sa labas ng mga loop at ang paggawa ng inter-block na pag-iiskedyul ay nangangailangan ng isang hiwalay na pag-optimize
pumasa

-fbranch-target-load-optimize2
Magsagawa ng branch target register load optimization pagkatapos ng prologue / epilogue threading.

-fbtr-bb-eksklusibo
Kapag nagsasagawa ng branch target register load optimization, huwag muling gamitin ang branch target
nagrerehistro sa loob ng anumang pangunahing bloke.

-fstack-tagapagtanggol
Maglabas ng karagdagang code para tingnan kung may buffer overflow, gaya ng mga stack smashing attack. Ito
ay ginagawa sa pamamagitan ng pagdaragdag ng guard variable sa mga function na may mga vulnerable na bagay. Ito
kasama ang mga function na tumatawag sa alloca, at mga function na may mga buffer na mas malaki sa 8 byte.
Ang mga bantay ay sinisimulan kapag ang isang function ay ipinasok at pagkatapos ay nasuri kapag ang
paglabas ng function. Kung nabigo ang isang bantay check, isang mensahe ng error ay naka-print at ang programa
labasan.

TANDAAN: Sa Ubuntu 6.10 at mas bagong mga bersyon ang opsyong ito ay pinagana bilang default para sa C, C++,
ObjC, ObjC++, kung wala sa -fno-stack-protector, -nostdlib, ni -pagkakasundo ay
natagpuan.

-fstack-protector-lahat
katulad -fstack-tagapagtanggol maliban na ang lahat ng mga function ay protektado.

-fsection-anchor
Subukang bawasan ang bilang ng mga simbolikong kalkulasyon ng address sa pamamagitan ng paggamit ng nakabahaging "anchor"
mga simbolo upang matugunan ang mga kalapit na bagay. Ang pagbabagong ito ay maaaring makatulong upang mabawasan ang bilang
ng GOT entry at GOT access sa ilang target.

Halimbawa, ang pagpapatupad ng sumusunod na function na "foo":

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

karaniwang kalkulahin ang mga address ng lahat ng tatlong mga variable, ngunit kung isasama mo ito
sa -fsection-anchor, maa-access nito ang mga variable mula sa isang karaniwang anchor point
sa halip. Ang epekto ay katulad ng sumusunod na pseudocode (na hindi wasto C):

int foo (walang bisa)
{
magrehistro int *xr = &x;
ibalik ang xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Hindi lahat ng target ay sumusuporta sa opsyong ito.

--param pangalan=halaga
Sa ilang lugar, gumagamit ang GCC ng iba't ibang mga constant upang kontrolin ang dami ng pag-optimize na iyon
ay tapos na. Halimbawa, hindi i-inline ng GCC ang mga function na naglalaman ng higit sa isang tiyak
bilang ng mga tagubilin. Maaari mong kontrolin ang ilan sa mga constant na ito sa command line
gamit ang --param pagpipilian.

Ang mga pangalan ng mga partikular na parameter, at ang kahulugan ng mga halaga, ay nakatali sa
internals ng compiler, at maaaring magbago nang walang abiso sa hinaharap
naglalabas.

Sa bawat kaso, ang halaga ay isang integer. Ang mga pinahihintulutang pagpipilian para sa pangalan ay ibinigay sa
sumusunod na talahanayan:

predictable-branch-outcome
Kapag hinulaang kukunin ang sangay na may posibilidad na mas mababa sa threshold na ito
(sa porsyento), kung gayon ito ay itinuturing na mahusay na mahuhulaan. Ang default ay 10.

max-crossjump-edges
Ang maximum na bilang ng mga papasok na gilid upang isaalang-alang para sa crossjumping. Ang algorithm
ginamit ni -fcrossjumping ay O(N^2) sa bilang ng mga gilid na papasok sa bawat bloke.
Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, na ginagawa ang oras ng compilation
pagtaas na may malamang na maliit na pagpapabuti sa executable size.

min-crossjump-insns
Ang pinakamababang bilang ng mga tagubilin na dapat itugma sa dulo ng dalawang bloke
bago isasagawa ang crossjumping sa kanila. Binabalewala ang halagang ito sa kaso
kung saan ang lahat ng mga tagubilin sa block na pinagtatalunan ay tumutugma. Ang
ang default na halaga ay 5.

max-grow-copy-bb-insns
Ang maximum na laki ng code expansion factor kapag kinokopya ang mga pangunahing bloke sa halip na
tumatalon. Ang pagpapalawak ay may kaugnayan sa isang jump instruction. Ang default na halaga ay
8.

max-goto-duplication-insns
Ang maximum na bilang ng mga tagubilin na i-duplicate sa isang bloke na tumalon sa a
computed goto. Para maiwasan ang O(N^2) na pag-uugali sa ilang pass, GCC factor
na-compute ang mga gotos nang maaga sa proseso ng pagsasama-sama, at i-unfactors ang mga ito nang huli
maaari. Tanging ang mga na-compute na jump sa dulo ng isang pangunahing bloke na hindi hihigit sa max-
goto-duplication-insns ay unfactored. Ang default na halaga ay 8.

max-delay-slot-insn-search
Ang maximum na bilang ng mga tagubilin na isasaalang-alang kapag naghahanap ng tagubilin
punan ang isang puwang ng pagkaantala. Kung higit pa sa di-makatwirang bilang ng mga tagubilin ay
hinanap, ang matitipid sa oras mula sa pagpuno sa slot ng pagkaantala ay magiging minimal kaya huminto
naghahanap. Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, ginagawa ang
pagtaas ng oras ng compilation na may malamang na maliit na pagpapabuti sa oras ng pagpapatupad.

max-delay-slot-live-search
Kapag sinusubukang punan ang mga puwang ng pagkaantala, ang maximum na bilang ng mga tagubilin na dapat isaalang-alang
kapag naghahanap ng isang bloke na may wastong impormasyon sa live na pagpaparehistro. Ang pagtaas nito
Ang arbitraryong napiling halaga ay nangangahulugan ng mas agresibong pag-optimize, pagtaas ng
oras ng compilation. Dapat alisin ang parameter na ito kapag ang code ng delay na slot ay
muling isinulat upang mapanatili ang control-flow graph.

max-gcse-memory
Ang tinatayang maximum na halaga ng memorya na ilalaan upang
isagawa ang pandaigdigang karaniwang subexpression elimination optimization. Kung higit na alaala
kaysa sa tinukoy ay kinakailangan, ang pag-optimize ay hindi gagawin.

max-gcse-insertion-ratio
Kung ang ratio ng mga pagpapasok ng expression sa mga pagtanggal ay mas malaki kaysa sa halagang ito para sa
anumang expression, pagkatapos ay ipapasok o aalisin ng RTL PRE ang expression at sa gayon ay aalis
bahagyang redundant computations sa stream ng pagtuturo. Ang default na halaga ay
20.

max-pending-list-length
Ang maximum na bilang ng mga nakabinbing dependency na pag-iiskedyul ay papayagan bago mag-flush
ang kasalukuyang estado at magsimulang muli. Malaking function na may kakaunting branch o tawag
ay maaaring lumikha ng labis na malalaking listahan na hindi kailangang kumonsumo ng memorya at mga mapagkukunan.

max-modulo-backtrack-attempts
Ang maximum na bilang ng mga pagtatangka sa backtrack na dapat gawin ng scheduler kapag modulo
pag-iskedyul ng isang loop. Ang mas malalaking halaga ay maaaring magpapataas ng oras ng pag-compile.

max-inline-insns-single
Kinokontrol ng ilang parameter ang tree inliner na ginamit sa gcc. Itinatakda ng numerong ito ang
maximum na bilang ng mga tagubilin (binibilang sa panloob na representasyon ng GCC) sa a
solong function na isasaalang-alang ng tree inliner para sa inlining. Ito lang
nakakaapekto sa mga function na ipinahayag inline at mga pamamaraan na ipinatupad sa isang deklarasyon ng klase
(C++). Ang default na halaga ay 400.

max-inline-insns-auto
Kapag gumamit ka ng -finline-function (kasama sa -O3), maraming mga function na gagawin
kung hindi ay hindi isasaalang-alang para sa inlining ng compiler ay iimbestigahan. Upang
ang mga function na iyon, ibang (mas mahigpit) na limitasyon kumpara sa mga function
maaaring ilapat ang ipinahayag na inline. Ang default na halaga ay 40.

large-function-inns
Ang limitasyon na tumutukoy sa talagang malalaking function. Para sa mga function na mas malaki kaysa sa limitasyong ito
pagkatapos ng inlining, inlining ay pinipigilan ng --param malaking-function-paglago. ito
Ang parameter ay pangunahing kapaki-pakinabang upang maiwasan ang matinding oras ng compilation na dulot ng hindi-
linear algorithm na ginagamit ng back end. Ang default na halaga ay 2700.

malaking-function-paglago
Tinutukoy ang pinakamataas na paglaki ng malaking function na dulot ng inlining sa mga porsyento. Ang
Ang default na halaga ay 100 na naglilimita sa malaking paglaki ng function sa 2.0 beses sa orihinal
laki.

malalaking-unit-inns
Ang limitasyon na tumutukoy sa malaking unit ng pagsasalin. Paglago sanhi ng inlining ng mga yunit
mas malaki kaysa sa limitasyong ito ay nililimitahan ng --param inline-unit-growth. Para sa maliliit na unit
ito ay maaaring masyadong masikip (isaalang-alang ang yunit na binubuo ng function A na inline at
B na tatlong beses lang tumawag sa A. Kung ang B ay maliit na may kaugnayan sa A, ang paglaki ng yunit
ay 300\% at gayon pa man ang gayong inlining ay napakahusay. Para sa napakalaking unit na binubuo ng
maliit na inlineable na function gayunpaman ang kabuuang limitasyon ng paglago ng unit ay kailangan upang
maiwasan ang exponential exponential ng code size. Kaya para sa mas maliliit na yunit, ang laki ay
tumaas sa --param malalaking-unit-inns bago mag-apply --param inline-unit-growth.
Ang default ay 10000

inline-unit-growth
Tinutukoy ang pinakamataas na kabuuang paglaki ng compilation unit na dulot ng inlining. Ang
Ang default na halaga ay 30 na naglilimita sa paglaki ng unit sa 1.3 beses sa orihinal na laki.

ipcp-unit-growth
Tinutukoy ang pinakamataas na kabuuang paglaki ng compilation unit na dulot ng interprocedural
patuloy na pagpapalaganap. Ang default na halaga ay 10 na naglilimita sa paglaki ng unit sa 1.1
beses sa orihinal na sukat.

malaking-stack-frame
Ang limitasyon na tumutukoy sa malalaking stack frame. Habang sinusubukan ang inlining ng algorithm
upang hindi lumampas sa limitasyong ito nang labis. Ang default na halaga ay 256 bytes.

malaking-stack-frame-growth
Tinutukoy ang pinakamataas na paglaki ng malalaking stack frame na dulot ng inlining sa mga porsyento.
Ang default na halaga ay 1000 na naglilimita sa malaking stack frame na paglaki sa 11 beses
orihinal na sukat.

max-inline-insns-recursive
max-inline-insns-recursive-auto
Tinutukoy ang maximum na bilang ng mga tagubilin na out-of-line na kopya ng self recursive inline
maaaring lumaki ang function sa pamamagitan ng pagsasagawa ng recursive inlining.

Para sa mga function na ipinahayag inline --param max-inline-insns-recursive ay kinuha sa
account. Para sa function na hindi idineklara na inline, ang recursive inlining ay nangyayari lamang kapag
-finline-function (kasama sa -O3) ay pinagana at --param max-inline-insns-
recursive-auto Ginagamit. Ang default na halaga ay 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Tinutukoy ang maximum na lalim ng recursion na ginagamit ng recursive inlining.

Para sa mga function na ipinahayag inline --param max-inline-recursive-depth ay kinuha sa
account. Para sa function na hindi idineklara na inline, ang recursive inlining ay nangyayari lamang kapag
-finline-function (kasama sa -O3) ay pinagana at --param max-inline-recursive-
depth-auto Ginagamit. Ang default na halaga ay 8.

min-inline-recursive-probability
Ang recursive inlining ay kumikita lamang para sa function na may malalim na recursion in
average at maaaring masakit para sa function na may maliit na recursion depth sa pamamagitan ng pagtaas ng
laki ng prologue o pagiging kumplikado ng function body sa iba pang mga optimizer.

Kapag available ang feedback sa profile (tingnan -fprofile-bumuo) ang aktwal na recursion
Ang lalim ay maaaring hulaan mula sa posibilidad na ang pag-andar ay mauulit sa pamamagitan ng ibinigay na tawag
pagpapahayag. Nililimitahan lang ng parameter na ito ang pag-inlin sa tawag na expression kung kaninong
ang posibilidad ay lumampas sa ibinigay na threshold (sa mga porsyento). Ang default na halaga ay 10.

maagang-inlining-insns
Tukuyin ang paglago na maaaring gawin ng maagang inliner. Sa epekto ito ay nagdaragdag ng halaga ng
inlining para sa code na may malaking abstraction penalty. Ang default na halaga ay 10.

max-early-inliner-iteration
max-early-inliner-iteration
Limitasyon ng mga pag-ulit ng maagang inliner. Karaniwang nililimitahan nito ang bilang ng mga nested
Maaaring malutas ng mga hindi direktang tawag ang maagang inliner. Ang mga mas malalalim na kadena ay hinahawakan pa rin ng huli
inlining.

comdat-sharing-probability
comdat-sharing-probability
Probability (sa porsyento) na ang C++ inline na function na may comdat visibility ay magiging
ibinahagi sa maraming unit ng compilation. Ang default na halaga ay 20.

min-vect-loop-bound
Ang pinakamababang bilang ng mga pag-ulit kung saan ang isang loop ay hindi ma-vector kapag
-free-vectorize Ginagamit. Ang bilang ng mga pag-ulit pagkatapos ng vectorization ay kailangang
ay mas malaki kaysa sa halagang tinukoy ng opsyong ito upang payagan ang vectorization. Ang
ang default na halaga ay 0.

gcse-cost-distance-ratio
Scaling factor sa pagkalkula ng maximum na distansya na maaaring ilipat ng isang expression
Mga pag-optimize ng GCSE. Ito ay kasalukuyang sinusuportahan lamang sa code hoisting pass.
Kung mas malaki ang ratio, mas agresibo ang code hoisting sa simple
expression, ibig sabihin, ang mga expression na may mas mura kaysa sa gcse-unrestricted-
gastos. Ang pagtukoy sa 0 ay hindi papaganahin ang pagtaas ng mga simpleng expression. Ang default
ang halaga ay 10.

gcse-unrestricted-cost
Gastos, halos sinusukat bilang halaga ng isang karaniwang pagtuturo sa makina, sa
kung aling mga pag-optimize ng GCSE ang hindi makakapigil sa distansya na maaaring ilakbay ng isang expression.
Ito ay kasalukuyang sinusuportahan lamang sa code hoisting pass. Ang mas mababang gastos,
magiging mas agresibo ang code hoisting. Ang pagtukoy sa 0 ay magpapahintulot sa lahat
mga expression upang maglakbay ng walang limitasyong mga distansya. Ang default na halaga ay 3.

max-hoist-depth
Ang lalim ng paghahanap sa dominator tree para sa mga expression na ipapataas. Ito ay ginagamit
upang maiwasan ang quadratic na pag-uugali sa hoisting algorithm. Ang halaga ng 0 ay maiiwasan
nililimitahan ang paghahanap, ngunit maaaring makapagpabagal sa pagsasama-sama ng malalaking function. Ang default
ang halaga ay 30.

max-tail-merge-comparisons
Ang maximum na halaga ng mga katulad na bb na ihahambing sa isang bb. Ito ay ginagamit upang maiwasan
parisukat na pag-uugali sa pagsasama ng buntot ng puno. Ang default na halaga ay 10.

max-tail-merge-iteration
Ang maximum na dami ng mga pag-ulit ng pagpasa sa function. Ito ay nakasanayan na
limitahan ang oras ng compilation sa tree tail merging. Ang default na halaga ay 2.

max-unrolled-insns
Ang maximum na bilang ng mga tagubilin na dapat magkaroon ng loop kung ang loop na iyon ay
na-unroll, at kung na-unroll ang loop, tinutukoy nito kung gaano karaming beses ang loop code
ay nakabukas.

max-average-unrolled-insns
Ang maximum na bilang ng mga tagubilin na pinapanigang ng mga probabilidad ng kanilang pagpapatupad na
ang loop ay dapat magkaroon kung ang loop na iyon ay na-unroll, at kung ang loop ay naka-unroll, ito
tinutukoy kung ilang beses na-unroll ang loop code.

max-unroll-times
Ang maximum na bilang ng mga unrollings ng isang loop.

max-peeled-insns
Ang maximum na bilang ng mga tagubilin na dapat magkaroon ng loop kung ang loop na iyon ay binalatan,
at kung ang loop ay binalatan, tinutukoy nito kung gaano karaming beses ang loop code ay binalatan.

max-peel-times
Ang maximum na bilang ng mga pagbabalat ng isang solong loop.

max-completely-peeled-inns
Ang maximum na bilang ng mga ins ng isang ganap na peeled na loop.

max-completely-peel-times
Ang maximum na bilang ng mga pag-ulit ng isang loop na angkop para sa kumpletong pagbabalat.

max-completely-peel-loop-nest-depth
Ang pinakamataas na lalim ng isang loop nest na angkop para sa kumpletong pagbabalat.

max-unswitch-insns
Ang maximum na bilang ng mga insn ng isang hindi naka-switch na loop.

max-unswitch-level
Ang maximum na bilang ng mga branch na na-unswitch sa isang loop.

lim-mahal
Ang pinakamababang halaga ng isang mamahaling expression sa loop invariant motion.

iv-consider-all-candidates-bound
Nakatali sa bilang ng mga kandidato para sa mga variable ng induction sa ibaba ng lahat ng mga kandidato
ay isinasaalang-alang para sa bawat paggamit sa induction variable optimizations. Tanging ang pinaka
isinasaalang-alang ang mga kaugnay na kandidato kung marami pang kandidato, upang maiwasan
quadratic time complexity.

iv-max-considered-uses
Ang mga induction variable optimization ay sumusuko sa mga loop na naglalaman ng higit pang induction
variable na gamit.

iv-always-prune-cand-set-bound
Kung ang bilang ng mga kandidato sa hanay ay mas maliit kaysa sa halagang ito, palagi naming sinusubukan
alisin ang mga hindi kinakailangang iv mula sa set sa panahon ng pag-optimize nito kapag may idinagdag na bagong iv
sa set.

scev-max-expr-size
Nakatali sa laki ng mga expression na ginamit sa scalar evolutions analyzer. Malaki
ang mga expression ay nagpapabagal sa analyzer.

scev-max-expr-complexity
Nakatali sa pagiging kumplikado ng mga expression sa scalar evolutions analyzer.
Ang mga kumplikadong expression ay nagpapabagal sa analyzer.

omega-max-vars
Ang maximum na bilang ng mga variable sa isang Omega constraint system. Ang default na halaga
ay 128.

omega-max-geqs
Ang maximum na bilang ng mga hindi pagkakapantay-pantay sa isang Omega constraint system. Ang default
ang halaga ay 256.

omega-max-eqs
Ang maximum na bilang ng mga pagkakapantay-pantay sa isang Omega constraint system. Ang default na halaga
ay 128.

omega-max-wild-cards
Ang maximum na bilang ng mga variable na wildcard na magagawa ng Omega solver
ipasok. Ang default na halaga ay 18.

laki ng omega-hash-table
Ang laki ng hash table sa Omega solver. Ang default na halaga ay 550.

mga omega-max-key
Ang pinakamaraming bilang ng mga susi na ginagamit ng Omega solver. Ang default na halaga ay 500.

omega-eliminate-redundant-constraints
Kapag nakatakda sa 1, gumamit ng mga mamahaling pamamaraan para maalis ang lahat ng kalabisan na mga hadlang. Ang
ang default na halaga ay 0.

vect-max-version-for-alignment-checks
Ang maximum na bilang ng mga run-time na pagsusuri na maaaring isagawa kapag gumagawa ng loop
versioning para sa alignment sa vectorizer. Tingnan ang opsyon na ftree-vect-loop-version
para sa karagdagang impormasyon.

vect-max-version-for-alias-checks
Ang maximum na bilang ng mga run-time na pagsusuri na maaaring isagawa kapag gumagawa ng loop
bersyon para sa alias sa vectorizer. Tingnan ang opsyon na ftree-vect-loop-version para sa
karagdagang informasiyon.

max-iteration-to-track
Ang maximum na bilang ng mga pag-ulit ng isang loop ang brute force algorithm para sa pagsusuri
ng # ng mga pag-ulit ng loop na sinusubukang suriin.

hot-bb-count-fraction
Pumili ng fraction ng pinakamaraming bilang ng mga pag-uulit ng basic block sa program
ang ibinigay na pangunahing bloke ay kailangang ituring na mainit.

hot-bb-frequency-fraction
Pumili ng fraction ng entry block frequency ng mga execution ng basic block in
Ang function na ibinigay sa pangunahing bloke ay kailangang ituring na mainit.

max-predicted-iteration
Ang maximum na bilang ng mga pag-ulit ng loop na hinuhulaan namin nang static. Ito ay kapaki-pakinabang sa
mga kaso kung saan ang function ay naglalaman ng iisang loop na may alam na bound at iba pang loop na may
hindi kilala. Hinuhulaan namin nang tama ang alam na bilang ng mga pag-ulit, habang ang hindi alam
bilang ng mga pag-ulit sa average sa humigit-kumulang 10. Nangangahulugan ito na ang loop na walang
Ang mga hangganan ay lalabas na artipisyal na malamig na may kaugnayan sa isa pa.

align-threshold
Pumili ng fraction ng pinakamaraming dalas ng mga pagpapatupad ng basic block sa function
ang ibinigay na pangunahing bloke ay maihanay.

align-loop-iteration
Ang isang loop ay inaasahang umulit at baka makuha ang napiling bilang ng mga pag-ulit
nakahanay

tracer-dynamic-coverage
tracer-dynamic-coverage-feedback
Ginagamit ang value na ito upang limitahan ang pagbuo ng superblock kapag ang ibinigay na porsyento ng
sakop ang mga naisagawang tagubilin. Nililimitahan nito ang hindi kinakailangang pagpapalawak ng laki ng code.

Ang tracer-dynamic-coverage-feedback ay ginagamit lamang kapag ang feedback sa profile ay
magagamit. Ang mga totoong profile (kumpara sa mga statically estimated) ay marami
hindi gaanong balanse na nagpapahintulot sa threshold na maging mas malaking halaga.

tracer-max-code-growth
Itigil ang pagdoble ng buntot kapag naabot na ng paglago ng code ang ibinigay na porsyento. Ito ay
sa halip hokey argument, dahil karamihan sa mga duplicate ay aalisin mamaya sa krus
tumatalon, kaya maaari itong itakda sa mas mataas na mga halaga kaysa sa nais na paglago ng code.

tracer-min-branch-ratio
Itigil ang reverse growth kapag ang reverse probability ng pinakamagandang edge ay mas mababa dito
threshold (sa porsyento).

tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
Itigil ang pasulong na paglago kung ang pinakamagandang gilid ay may posibilidad na mas mababa kaysa dito
threshold.

Katulad din sa tracer-dynamic-coverage dalawang value ang naroroon, isa para sa compilation
para sa feedback sa profile at isa para sa compilation na wala. Ang halaga para sa compilation
na may profile feedback ay kailangang maging mas konserbatibo (mas mataas) upang makagawa
epektibo ang tracer.

max-cse-path-length
Pinakamataas na bilang ng mga pangunahing bloke sa landas na isinasaalang-alang ng cse. Ang default ay 10.

max-cse-insns
Ang maximum na mga tagubilin sa proseso ng CSE bago mag-flush. Ang default ay 1000.

ggc-min-expand
Gumagamit ang GCC ng isang garbage collector upang pamahalaan ang sarili nitong paglalaan ng memorya. Ang parameter na ito
tumutukoy sa pinakamababang porsyento kung saan dapat ang tambak ng basurero
pinapayagang palawakin sa pagitan ng mga koleksyon. Ang pag-tune nito ay maaaring mapabuti ang bilis ng compilation;
wala itong epekto sa pagbuo ng code.

Ang default ay 30% + 70% * (RAM/1GB) na may upper bound na 100% kapag RAM >= 1GB.
Kung magagamit ang "getrlimit", ang paniwala ng "RAM" ay ang pinakamaliit sa aktwal na RAM at
"RLIMIT_DATA" o "RLIMIT_AS". Kung hindi kayang kalkulahin ng GCC ang RAM sa isang partikular
platform, ginagamit ang lower bound na 30%. Ang pagtatakda ng parameter na ito at ggc-min-
bunton sa zero ay nagiging sanhi ng isang buong koleksyon na mangyari sa bawat pagkakataon. Ito ay
napakabagal, ngunit maaaring maging kapaki-pakinabang para sa pag-debug.

ggc-min-heapsize
Pinakamababang sukat ng tambak ng basurero bago ito magsimulang mag-abala sa pagkolekta
basura. Ang unang koleksyon ay nangyayari pagkatapos lumawak ang heap ng ggc-min-expand%
Lampas ggc-min-heapsize. Muli, ang pag-tune nito ay maaaring mapabuti ang bilis ng compilation, at
walang epekto sa pagbuo ng code.

Ang default ay ang mas maliit na RAM/8, RLIMIT_RSS, o isang limitasyon na sinusubukang tiyakin
na ang RLIMIT_DATA o RLIMIT_AS ay hindi lalampas, ngunit may mas mababang hangganan na 4096
(apat na megabytes) at isang upper bound na 131072 (128 megabytes). Kung hindi kaya ng GCC
para kalkulahin ang RAM sa isang partikular na platform, ginagamit ang lower bound. Pagtatakda nito
Ang parameter na napakalaki ay epektibong hindi pinapagana ang koleksyon ng basura. Ang pagtatakda nito
parameter at ggc-min-expand sa zero nagiging sanhi ng isang buong koleksyon na mangyari sa bawat
pagkakataon.

max-reload-search-insns
Ang maximum na bilang ng pag-reload ng pagtuturo ay dapat tumingin pabalik para sa katumbas
magparehistro. Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, ginagawa ang
pagtaas ng oras ng compilation na may malamang na bahagyang mas mahusay na pagganap. Ang default
ang halaga ay 100.

max-cselib-memory-locations
Ang maximum na bilang ng mga lokasyon ng memorya ay dapat isaalang-alang ng cselib.
Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, na ginagawa ang oras ng compilation
pagtaas na may malamang na bahagyang mas mahusay na pagganap. Ang default na halaga ay 500.

muling isaayos-block-duplicate
muling ayusin ang mga bloke-duplicate-feedback
Ginagamit ng basic block reordering pass para magpasya kung gagamit ng unconditional branch
o i-duplicate ang code sa destinasyon nito. Nadoble ang code kapag tinantya ito
ang laki ay mas maliit kaysa sa halagang ito na na-multiply sa tinantyang laki ng walang kondisyon
tumalon sa mga hot spot ng programa.

Ang muling isaayos-block-duplicate-feedback ay ginagamit lamang kapag ang feedback sa profile ay
available at maaaring itakda sa mas mataas na halaga kaysa sa reorder-block-duplicate mula noon
mas tumpak ang impormasyon tungkol sa mga hot spot.

max-sched-ready-insns
Ang maximum na bilang ng mga tagubilin na handa nang ibigay sa scheduler ay dapat
isaalang-alang sa anumang naibigay na oras sa unang pass sa pag-iskedyul. Pagtaas ng halaga
Nangangahulugan ng mas masusing paghahanap, na ginagawang tumaas ang oras ng compilation sa malamang
maliit na benepisyo. Ang default na halaga ay 100.

max-sched-region-blocks
Ang maximum na bilang ng mga block sa isang rehiyon na isasaalang-alang para sa interblock
pag-iiskedyul. Ang default na halaga ay 10.

max-pipeline-region-blocks
Ang maximum na bilang ng mga bloke sa isang rehiyon na isasaalang-alang para sa pipelining sa
selective scheduler. Ang default na halaga ay 15.

max-sched-region-insns
Ang maximum na bilang ng mga insn sa isang rehiyon na isasaalang-alang para sa interblock
pag-iiskedyul. Ang default na halaga ay 100.

max-pipeline-region-insns
Ang maximum na bilang ng mga insn sa isang rehiyon na isasaalang-alang para sa pipelining sa
selective scheduler. Ang default na halaga ay 200.

min-spec-prob
Ang pinakamababang posibilidad (sa mga porsyento) na maabot ang isang source block para sa interblock
speculative scheduling. Ang default na halaga ay 40.

max-sched-extend-regions-iters
Ang maximum na bilang ng mga pag-ulit sa pamamagitan ng CFG upang palawigin ang mga rehiyon. 0 - huwag paganahin
extension ng rehiyon, N - gawin ang pinakamaraming N pag-ulit. Ang default na halaga ay 0.

max-sched-insn-conflict-delay
Ang maximum na pagkaantala ng conflict para sa isang insn na isasaalang-alang para sa speculative motion.
Ang default na halaga ay 3.

sched-spec-prob-cutoff
Ang pinakamaliit na posibilidad ng pagtatagumpay ng haka-haka (sa porsyento), kaya ang haka-haka
insn ay naka-iskedyul. Ang default na halaga ay 40.

sched-mem-true-dep-cost
Minimal na distansya (sa mga cycle ng CPU) sa pagitan ng store at load na nagta-target sa parehong memory
mga lokasyon. Ang default na halaga ay 1.

selsched-max-lookahead
Ang maximum na laki ng lookahead window ng selective scheduling. Ito ay isang lalim
ng paghahanap para sa magagamit na mga tagubilin. Ang default na halaga ay 50.

selsched-max-sched-times
Ang maximum na bilang ng beses na ang isang pagtuturo ay maiiskedyul sa panahon ng pumipili
pag-iiskedyul. Ito ang limitasyon sa bilang ng mga pag-ulit kung saan ang
ang pagtuturo ay maaaring pipeline. Ang default na halaga ay 2.

selsched-max-insns-to-rename
Ang maximum na bilang ng pinakamahusay na mga tagubilin sa handa na listahan na isinasaalang-alang para sa
pagpapalit ng pangalan sa selective scheduler. Ang default na halaga ay 2.

sms-min-sc
Ang pinakamababang halaga ng bilang ng yugto na bubuo ng swing modulo scheduler. Ang
ang default na halaga ay 2.

max-last-value-rtl
Ang maximum na laki na sinusukat bilang bilang ng mga RTL na maaaring i-record sa isang expression
sa combiner para sa isang pseudo register bilang huling kilalang halaga ng register na iyon. Ang
ang default ay 10000.

integer-share-limit
Ang mga maliliit na integer constant ay maaaring gumamit ng shared data structure, na binabawasan ang compiler's
paggamit ng memorya at pagtaas ng bilis nito. Itinatakda nito ang maximum na halaga ng isang nakabahagi
integer pare-pareho. Ang default na halaga ay 256.

min-virtual-mappings
Tinutukoy ang pinakamababang bilang ng mga virtual na pagmamapa sa incremental na SSA updater
na dapat na nakarehistro upang ma-trigger ang virtual mappings heuristic na tinukoy ng
virtual-mappings-ratio. Ang default na halaga ay 100.

virtual-mappings-ratio
Kung ang bilang ng mga virtual na pagmamapa ay virtual-mappings-ratio na mas malaki kaysa sa numero
ng mga virtual na simbolo na ia-update, pagkatapos ay lilipat ang incremental na SSA updater sa a
buong update para sa mga simbolo na iyon. Ang default na ratio ay 3.

ssp-buffer-size
Ang pinakamababang laki ng mga buffer (ibig sabihin, mga array) na makakatanggap ng stack smashing
proteksyon kapag -fstack-proteksyon Ginagamit.

Ang default na ito bago ang Ubuntu 10.10 ay "8". Sa kasalukuyan ito ay "4", upang madagdagan ang
bilang ng mga function na protektado ng stack protector.

max-jump-thread-duplication-stmts
Pinakamataas na bilang ng mga pahayag na pinapayagan sa isang bloke na kailangang ma-duplicate kung kailan
threading jumps.

max-fields-for-field-sensitive
Pinakamataas na bilang ng mga patlang sa isang istraktura na aming ituturing sa paraang sensitibo sa larangan
sa panahon ng pagtatasa ng pointer. Ang default ay zero para sa -O0, at -O1 at 100 para sa -Os,
-O2, at -O3.

prefetch-latency
Tantyahin ang average na bilang ng mga tagubilin na isinasagawa bago ang prefetch
matatapos. Ang distansya na prefetch namin sa unahan ay proporsyonal sa pare-parehong ito.
Ang pagtaas ng bilang na ito ay maaari ring humantong sa mas kaunting mga stream na na-prefetch (tingnan
sabay-sabay-prefetches).

sabay-sabay-prefetches
Maximum na bilang ng mga prefetch na maaaring tumakbo nang sabay.

l1-cache-line-size
Ang laki ng linya ng cache sa L1 cache, sa mga byte.

l1-laki ng cache
Ang laki ng L1 cache, sa kilobytes.

l2-laki ng cache
Ang laki ng L2 cache, sa kilobytes.

min-insn-to-prefetch-ratio
Ang pinakamababang ratio sa pagitan ng bilang ng mga tagubilin at bilang ng mga prefetch
upang paganahin ang prefetching sa isang loop.

prefetch-min-insn-to-mem-ratio
Ang pinakamababang ratio sa pagitan ng bilang ng mga tagubilin at bilang ng memorya
mga sanggunian upang paganahin ang prefetching sa isang loop.

use-canonical-types
Kung ang compiler ay dapat gumamit ng "canonical" type system. Bilang default, ito
dapat palaging 1, na gumagamit ng mas mahusay na panloob na mekanismo para sa paghahambing
mga uri sa C++ at Objective-C++. Gayunpaman, kung ang mga bug sa canonical type system ay
nagiging sanhi ng mga pagkabigo sa compilation, itakda ang value na ito sa 0 para i-disable ang mga canonical na uri.

switch-conversion-max-branch-ratio
Tatanggi ang conversion ng switch initialization na gumawa ng mga array na mas malaki kaysa
switch-conversion-max-branch-ratio beses ang bilang ng mga sangay sa switch.

max-partial-antic-length
Maximum na haba ng partial antic set na nakalkula sa panahon ng tree partial
redundancy elimination optimization (-free-pre) kapag nag-optimize sa -O3 at sa itaas.
Para sa ilang uri ng source code ang pinahusay na partial redundancy elimination
maaaring tumakas ang pag-optimize, na ubusin ang lahat ng memorya na magagamit sa host
makina. Ang parameter na ito ay nagtatakda ng limitasyon sa haba ng mga set na kinukuwenta,
na pumipigil sa pag-uugaling tumakas. Ang pagtatakda ng value na 0 para sa parameter na ito ay
payagan ang isang walang limitasyong haba ng hanay.

sccvn-max-scc-size
Pinakamataas na laki ng isang malakas na konektadong bahagi (SCC) sa panahon ng pagproseso ng SCCVN. Kung
ang limitasyon na ito ay naabot, ang pagpoproseso ng SCCVN para sa buong function ay hindi gagawin at
idi-disable ang mga optimization depende dito. Ang default na maximum na laki ng SCC ay
10000.

ira-max-loops-num
Gumagamit ang IRA ng regional register allocation bilang default. Kung ang isang function ay naglalaman ng higit pa
mga loop kaysa sa numerong ibinigay ng parameter na ito, sa pinakamaraming ibinigay na numero ng
ang pinakamadalas na isinasagawang mga loop ay bumubuo ng mga rehiyon para sa paglalaan ng rehistro ng rehiyon.
Ang default na halaga ng parameter ay 100.

ira-max-conflict-table-size
Kahit na ang IRA ay gumagamit ng isang sopistikadong algorithm upang i-compress ang conflict table, ang
Ang talahanayan ay maaari pa ring mangailangan ng labis na dami ng memorya para sa malalaking pag-andar. Kung ang
conflict table para sa isang function ay maaaring higit pa sa laki sa MB na ibinigay nito
parameter, ang register allocator sa halip ay gumagamit ng mas mabilis, mas simple, at mas mababang-
kalidad na algorithm na hindi nangangailangan ng pagbuo ng pseudo-register conflict table.
Ang default na halaga ng parameter ay 2000.

ira-loop-reserved-regs
Maaaring gamitin ang IRA upang suriin ang mas tumpak na presyon ng pagpaparehistro sa mga loop para sa mga desisyon
para ilipat ang mga loop invariant (tingnan -O3). Ang bilang ng magagamit na mga rehistro na nakalaan para sa
ang ilang iba pang mga layunin ay ibinibigay ng parameter na ito. Ang default na halaga ng
parameter ay 2, na kung saan ay ang minimal na bilang ng mga rehistro na kailangan ng tipikal
mga tagubilin. Ang halagang ito ay ang pinakamahusay na natagpuan mula sa maraming mga eksperimento.

loop-invariant-max-bbs-in-loop
Maaaring maging napakamahal ng loop invariant motion, sa oras ng compilation at in
dami ng kinakailangang compile-time na memorya, na may napakalaking mga loop. Mga loop na may higit pa
ang mga pangunahing bloke kaysa sa parameter na ito ay hindi magkakaroon ng loop invariant motion optimization
ginanap sa kanila. Ang default na halaga ng parameter ay 1000 para sa -O1 at 10000
para sa -O2 at mas mataas.

loop-max-datarefs-for-datadeps
Ang pagbuo ng mga dapendencies ng data ay mahal para sa napakalaking mga loop. Ang parameter na ito
nililimitahan ang bilang ng mga reference ng data sa mga loop na isinasaalang-alang para sa data
pagsusuri ng pagtitiwala. Ang mga malalaking loop na ito ay hindi hahawakan pagkatapos ng
mga pag-optimize gamit ang mga dependency ng data ng loop. Ang default na halaga ay 1000.

max-vartrack-size
Nagtatakda ng maximum na bilang ng mga puwang ng hash table na gagamitin sa daloy ng data ng pagsubaybay sa variable
pagsusuri ng anumang function. Kung ang limitasyong ito ay lumampas sa variable na pagsubaybay sa
pinagana ang mga takdang-aralin, ang pagsusuri para sa function na iyon ay muling susubukan nang wala ito, pagkatapos
inaalis ang lahat ng debug insns mula sa function. Kung ang limitasyon ay lumampas kahit na wala
debug insns, var tracking analysis ay ganap na hindi pinagana para sa function.
Ang pagtatakda ng parameter sa zero ay ginagawa itong walang limitasyon.

max-vartrack-expr-depth
Nagtatakda ng maximum na bilang ng mga antas ng recursion kapag sinusubukang i-map ang mga variable na pangalan o
i-debug ang mga pansamantalang halaga sa mga expression ng halaga. Kinakakalakal nito ang oras ng compilation para sa higit pa
kumpletong impormasyon sa pag-debug. Kung ito ay itinakda nang masyadong mababa, ang mga expression ng halaga ay
magagamit at maaaring katawanin sa impormasyon sa pag-debug ay maaaring hindi magamit;
ang pagtatakda nito nang mas mataas ay maaaring magbigay-daan sa compiler na makahanap ng mas kumplikadong pag-debug
expression, ngunit maaaring lumaki ang oras ng pag-compile at paggamit ng memorya. Ang default ay 12.

min-nondebug-insn-uid
Gumamit ng mga uid simula sa parameter na ito para sa nondebug insns. Ang hanay sa ibaba ng
ang parameter ay eksklusibong nakalaan para sa mga debug insns na ginawa ni
-fvar-tracking-assignments, ngunit ang mga debug insns ay maaaring makakuha ng (hindi magkakapatong) na mga uid sa itaas
ito kung ang nakalaan na hanay ay naubos na.

ipa-sra-ptr-growth-factor
Papalitan ng IPA-SRA ang isang pointer sa isang pinagsama-samang may isa o higit pang mga bagong parameter
lamang kapag ang kanilang pinagsama-samang laki ay mas mababa o katumbas ng ipa-sra-ptr-growth-factor
beses ang laki ng orihinal na parameter ng pointer.

tm-max-aggregate-size
Kapag gumagawa ng mga kopya ng thread-local na variable sa isang transaksyon, ang parameter na ito
Tinutukoy ang laki sa mga byte pagkatapos kung saan ang mga variable ay ise-save sa pag-log
mga function na taliwas sa pag-save/pag-restore ng mga pares ng pagkakasunud-sunod ng code. Ang pagpipiliang ito lamang
nalalapat kapag ginagamit -fgnu-tm.

graphite-max-nb-scop-params
Upang maiwasan ang mga exponential effect sa Graphite loop transforms, ang bilang ng
ang mga parameter sa isang Static Control Part (SCoP) ay may hangganan. Ang default na halaga ay 10
mga parameter. Isang variable na ang halaga ay hindi alam sa oras ng compilation at tinukoy
sa labas ng isang SCoP ay isang parameter ng SCoP.

graphite-max-bbs-per-function
Upang maiwasan ang mga exponential effect sa pagtuklas ng mga SCoP, ang laki ng mga function
nasuri sa pamamagitan ng Graphite ay may hangganan. Ang default na halaga ay 100 pangunahing mga bloke.

loop-block-tile-size
Loop blocking o strip mining transforms, naka-enable sa -floop-block or
-floop-strip-mine, i-strip minahan ang bawat loop sa loop nest sa pamamagitan ng isang ibinigay na bilang ng
mga pag-ulit. Maaaring baguhin ang haba ng strip gamit ang loop-block-tile-size
parameter. Ang default na halaga ay 51 pag-ulit.

ipa-cp-value-list-size
Sinusubukan ng IPA-CP na subaybayan ang lahat ng posibleng halaga at uri na ipinasa sa isang function
parameter upang maipalaganap ang mga ito at maisagawa ang devirtualization. ipa-cp-value-
laki ng listahan ay ang maximum na bilang ng mga value at uri na iniimbak nito sa bawat isang pormal
parameter ng isang function.

lto-partition
Tukuyin ang nais na bilang ng mga partisyon na ginawa sa panahon ng WHOPR compilation. Ang
ang bilang ng mga partisyon ay dapat lumampas sa bilang ng mga CPU na ginamit para sa pagsasama-sama. Ang
ang default na halaga ay 32.

lto-minpartition
Sukat ng minimal na partition para sa WHOPR (sa tinantyang mga tagubilin). Pinipigilan nito
mga gastos sa paghahati ng napakaliit na mga programa sa napakaraming partisyon.

cxx-max-namespaces-for-diagnostic-help
Ang maximum na bilang ng mga namespace na kumonsulta para sa mga mungkahi kapag naghahanap ng pangalan ng C++
nabigo para sa isang identifier. Ang default ay 1000.

sink-frequency-threshold
Ang maximum na relatibong dalas ng pagpapatupad (sa mga porsyento) ng target na bloke
kaugnay sa orihinal na bloke ng isang pahayag upang payagan ang paglubog ng pahayag ng a
pahayag. Ang mas malalaking numero ay nagreresulta sa mas agresibong paglubog ng pahayag. Ang
ang default na halaga ay 75. Ang isang maliit na positibong pagsasaayos ay inilapat para sa mga pahayag na may
memory operand bilang mga mas kumikita kaya lumubog.

max-stores-to-sink
Ang maximum na bilang ng mga pares ng conditional store na maaaring malunod. Itakda sa 0 kung
alinman sa vectorization (-free-vectorize) o kung-conversion (-ftree-loop-if-convert)
ay hindi pinagana. Ang default ay 2.

allow-load-data-races
Payagan ang mga optimizer na magpakilala ng mga bagong lahi ng data sa mga pag-load. Itakda sa 1 upang payagan,
kung hindi sa 0. Ang opsyong ito ay pinagana bilang default maliban kung implicitly na itinakda ng
-fmemory-modelo= pagpipilian.

allow-store-data-races
Payagan ang mga optimizer na magpakilala ng mga bagong lahi ng data sa mga tindahan. Itakda sa 1 upang payagan,
kung hindi sa 0. Ang opsyong ito ay pinagana bilang default maliban kung implicitly na itinakda ng
-fmemory-modelo= pagpipilian.

allow-packed-load-data-races
Payagan ang mga optimizer na magpakilala ng mga bagong lahi ng data sa mga naka-pack na pag-load ng data. Itakda sa 1 sa
payagan, kung hindi sa 0. Ang opsyong ito ay pinagana bilang default maliban kung implicitly na itinakda ni
ang -fmemory-modelo= pagpipilian.

allow-packed-store-data-races
Payagan ang mga optimizer na magpakilala ng mga bagong lahi ng data sa mga naka-pack na data store. Itakda sa 1 sa
payagan, kung hindi sa 0. Ang opsyong ito ay pinagana bilang default maliban kung implicitly na itinakda ni
ang -fmemory-modelo= pagpipilian.

case-values-threshold
Ang pinakamaliit na bilang ng iba't ibang mga halaga kung saan pinakamahusay na gumamit ng jump-table
sa halip na isang puno ng kondisyonal na mga sanga. Kung ang value ay 0, gamitin ang default para sa
ang makina. Ang default ay 0.

puno-reassoc-lapad
Itakda ang maximum na bilang ng mga tagubilin na naisakatuparan sa reassociated tree.
Ino-override ng parameter na ito ang mga heuristic na umaasa sa target na ginagamit bilang default kung hindi
zero na halaga.

Options Pagkontrol ang Preprocessor
Kinokontrol ng mga opsyong ito ang C preprocessor, na pinapatakbo sa bawat C source file bago ang aktwal
compilation.

Kung gagamitin mo ang -E opsyon, walang ginagawa maliban sa preprocessing. Ilan sa mga opsyong ito
magkaroon ng kahulugan lamang kasama ng -E dahil nagiging sanhi sila ng preprocessor na output
hindi angkop para sa aktwal na compilation.

-Wp,opsyon
Maaari mong gamitin ang -Wp,opsyon upang i-bypass ang driver ng compiler at ipasa opsyon direkta sa pamamagitan ng
sa preprocessor. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati sa maraming mga opsyon sa
ang mga kuwit. Gayunpaman, maraming mga opsyon ang binago, isinalin o binibigyang-kahulugan ng
compiler driver bago maipasa sa preprocessor, at -Wp pilit na nilalampasan
yugtong ito. Ang direktang interface ng preprocessor ay hindi dokumentado at napapailalim sa
baguhin, kaya hangga't maaari dapat mong iwasan ang paggamit -Wp at hayaan ang driver na hawakan ang
mga pagpipilian sa halip.

-Xpreprocessor opsyon
Pumasa opsyon bilang isang opsyon sa preprocessor. Magagamit mo ito para magbigay ng system-
mga partikular na opsyon sa preprocessor na hindi alam ng GCC kung paano makilala.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng argumento, dapat mong gamitin -Xpreprocessor
dalawang beses, isang beses para sa opsyon at isang beses para sa argumento.

-D pangalan
Paunang tukuyin pangalan bilang isang macro, na may kahulugan 1.

-D pangalan=depinisyon
Ang mga nilalaman ng depinisyon ay tokenized at pinoproseso na parang sila ay lumitaw noong
ikatlong yugto ng pagsasalin sa a # tukuyin direktiba. Sa partikular, ang magiging kahulugan ay
pinutol ng mga naka-embed na newline na character.

Kung gumagamit ka ng preprocessor mula sa isang shell o shell-like program na maaaring kailanganin mo
upang gamitin ang quoting syntax ng shell upang protektahan ang mga character tulad ng mga puwang na may a
kahulugan sa shell syntax.

Kung nais mong tukuyin ang isang macro na tulad ng function sa command line, isulat ang argumento nito
listahan na may nakapalibot na panaklong bago ang katumbas na tanda (kung mayroon). Ang mga panaklong ay
makabuluhan sa karamihan ng mga shell, kaya kakailanganin mong banggitin ang opsyon. Sa sh at csh,
-D'pangalan(args...)=depinisyon' gawa.

-D at -U Pinoproseso ang mga opsyon sa pagkakasunud-sunod na ibinigay sa command line. Lahat
-imacros file at -isama file ang mga pagpipilian ay naproseso pagkatapos ng lahat -D at -U mga pagpipilian.

-U pangalan
Kanselahin ang anumang dating kahulugan ng pangalan, alinman sa built in o binigyan ng a -D pagpipilian.

-undef
Huwag paunang tukuyin ang anumang mga macro na partikular sa system o partikular sa GCC. Ang pamantayang paunang natukoy
nananatiling tinukoy ang mga macro.

-I dir
Idagdag ang direktoryo dir sa listahan ng mga direktoryo na hahanapin para sa mga file ng header.
Mga direktoryo na pinangalanan ni -I Hinahanap bago ang karaniwang sistema isama ang mga direktoryo.
Kung ang direktoryo dir ay isang karaniwang sistema na may kasamang direktoryo, ang opsyon ay hindi papansinin
tiyakin na ang default na order sa paghahanap para sa mga direktoryo ng system at ang espesyal na paggamot
ng mga header ng system ay hindi natalo. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay magiging
pinalitan ng sysroot prefix; tingnan mo --sysroot at -isysroot.

-o file
Isulat ang output sa file. Ito ay kapareho ng pagtukoy file bilang pangalawang hindi opsyon
pagtatalo sa cpp. gcc ay may ibang interpretasyon ng pangalawang argumentong hindi opsyon,
kaya dapat mong gamitin -o upang tukuyin ang output file.

-Pader
Ino-on ang lahat ng opsyonal na babala na kanais-nais para sa normal na code. Sa kasalukuyan ito
is -Wcomment, -Wtrigraphs, -Wmultichar at isang babala tungkol sa integer promotion na nagdudulot ng a
pagbabago ng sign sa "#if" na mga expression. Tandaan na marami sa mga babala ng preprocessor
ay naka-on bilang default at walang mga opsyon upang kontrolin ang mga ito.

-Wcomment
-Mga komento
Magbabala sa tuwing may sequence ng pagsisimula ng komento /* lilitaw sa a /* komento, o kahit kailan a
lumilitaw ang backslash-newline sa a // komento. (Ang parehong mga anyo ay may parehong epekto.)

-Wtrigraphs
Karamihan sa mga trigraph sa mga komento ay hindi makakaapekto sa kahulugan ng programa. Gayunpaman, a
trigraph na bubuo ng isang nakatakas na bagong linya (??/ sa dulo ng isang linya) maaari, sa pamamagitan ng
pagbabago kung saan nagsisimula o nagtatapos ang komento. Samakatuwid, ang mga trigraph lamang ang bubuo
ang mga nakatakas na bagong linya ay gumagawa ng mga babala sa loob ng isang komento.

Ang pagpipiliang ito ay ipinahiwatig ng -Pader. Kung -Pader ay hindi ibinigay, ang pagpipiliang ito ay pinagana pa rin
maliban kung pinagana ang mga trigraph. Upang makakuha ng trigraph conversion nang walang mga babala, ngunit kumuha
ang iba pang mga -Pader mga babala, gamitin -trigraphs -Pader -Wno-trigraphs.

-Wtradisyonal
Magbabala tungkol sa ilang partikular na konstruksyon na kumikilos nang iba sa tradisyonal at ISO C. Gayundin
bigyan ng babala ang tungkol sa mga konstruksyon ng ISO C na walang tradisyonal na katumbas na C, at may problema
mga konstruksyon na dapat iwasan.

-Wundef
Magbabala sa tuwing may makikitang identifier na hindi isang macro sa isang #kung directive,
sa labas ng tinukoy. Ang mga naturang identifier ay pinapalitan ng zero.

-Wunused-macros
Babala tungkol sa mga macro na tinukoy sa pangunahing file na hindi ginagamit. Ang isang macro ay ginamit kung ito ay
pinalawak o nasubok para sa pagkakaroon ng hindi bababa sa isang beses. Magbabala rin ang preprocessor kung
ang macro ay hindi nagamit sa oras na ito ay muling tinukoy o hindi natukoy.

Mga built-in na macro, macro na tinukoy sa command line, at macro na tinukoy sa kasama
hindi binabalaan ang mga file.

tandaan: Kung ang isang macro ay aktwal na ginagamit, ngunit ginagamit lamang sa mga nilaktawan na conditional block, kung gayon
Iuulat ito ng CPP bilang hindi nagamit. Upang maiwasan ang babala sa ganoong kaso, maaari kang pagbutihin
ang saklaw ng kahulugan ng macro sa pamamagitan ng, halimbawa, ang paglipat nito sa unang nilaktawan
harangan. Bilang kahalili, maaari kang magbigay ng dummy na paggamit sa isang bagay tulad ng:

#if tinukoy ang_macro_causing_the_warning
#endif

-Wendif-label
Magbabala sa tuwing an #iba o isang #endif ay sinusundan ng text. Ito ay kadalasang nangyayari sa
code ng form

#kung FOO
...
#ibang FOO
...
#endif FOO

Ang pangalawa at pangatlong "FOO" ay dapat nasa mga komento, ngunit kadalasan ay wala sa mas lumang mga programa.
Naka-on ang babalang ito bilang default.

-Werror
Gawing mahirap na mga pagkakamali ang lahat ng babala. Ang source code na nagpapalitaw ng mga babala ay magiging
tinanggihan.

-Wsystem-header
Mga babala sa isyu para sa code sa mga header ng system. Ang mga ito ay karaniwang hindi nakakatulong sa paghahanap
mga bug sa iyong sariling code, samakatuwid ay pinigilan. Kung ikaw ay responsable para sa sistema
library, maaaring gusto mong makita sila.

-w Pigilan ang lahat ng babala, kabilang ang mga ini-isyu ng GNU CPP bilang default.

-pedantic
Ibigay ang lahat ng mandatoryong diagnostic na nakalista sa pamantayang C. Ang ilan sa kanila ay naiwan
out bilang default, dahil madalas silang nag-trigger sa hindi nakakapinsalang code.

-pedantic-errors
Ibigay ang lahat ng mandatoryong diagnostic, at gawing mga error ang lahat ng mandatoryong diagnostic.
Kabilang dito ang mga mandatoryong diagnostic na hindi iniisyu ng GCC -pedantic ngunit tinatrato bilang
mga babala

-M Sa halip na i-output ang resulta ng preprocessing, mag-output ng panuntunang angkop para sa gumawa
naglalarawan sa mga dependencies ng pangunahing source file. Ang preprocessor ay naglalabas ng isa
gumawa panuntunan na naglalaman ng object file name para sa source file na iyon, isang colon, at ang mga pangalan
ng lahat ng kasamang file, kabilang ang mga nanggaling -isama or -imacros utos
mga pagpipilian sa linya.

Maliban kung tahasang tinukoy (na may -MT or -MQ), ang pangalan ng object file ay binubuo ng
pangalan ng source file na may anumang suffix na pinalitan ng object file suffix at kahit ano
inalis ang mga nangungunang bahagi ng direktoryo. Kung mayroong maraming kasamang mga file kung gayon ang panuntunan ay
hatiin sa ilang linya gamit ang \-bagong linya. Ang panuntunan ay walang mga utos.

Hindi pinipigilan ng opsyong ito ang debug na output ng preprocessor, gaya ng -dM. Para maiwasan
paghahalo ng naturang debug na output sa mga panuntunan sa dependency na dapat mong tahasang tukuyin ang
dependency output file na may -MF, o gumamit ng environment variable tulad ng
DEPENDENCE_OUTPUT. Ang debug na output ay ipapadala pa rin sa regular na output stream bilang
Normal.

Pagdaan -M sa driver ay nagpapahiwatig -E, at pinipigilan ang mga babala nang may implicit -w.

-MM katulad -M ngunit huwag banggitin ang mga file ng header na matatagpuan sa mga direktoryo ng header ng system,
o mga file ng header na kasama, direkta o hindi direkta, mula sa naturang header.

Ito ay nagpapahiwatig na ang pagpili ng mga angle bracket o double quote sa isang # isama
Hindi mismo tinutukoy ng direktiba kung lalabas ang header na iyon -MM
output ng dependency. Ito ay isang bahagyang pagbabago sa semantics mula sa GCC na bersyon 3.0 at
mas maaga.

-MF file
Kapag ginamit sa -M or -MM, ay tumutukoy sa isang file kung saan isusulat ang mga dependencies. Kung hindi -MF
Ang switch ay binibigyan ng preprocessor na nagpapadala ng mga patakaran sa parehong lugar na ipapadala nito
preprocessed na output.

Kapag ginamit sa mga pagpipilian sa driver -MD or -MMD, -MF override ang default dependency
output file.

-MG Kasabay ng isang opsyon tulad ng -M humihiling ng pagbuo ng dependency, -MG ipinapalagay
Ang mga nawawalang file ng header ay nabuong mga file at idinaragdag ang mga ito sa listahan ng dependency nang wala
pagtataas ng error. Ang dependency filename ay direktang kinuha mula sa "#include"
direktiba nang hindi naghahanda ng anumang landas. -MG pinipigilan din ang preprocessed na output, bilang a
ang nawawalang file ng header ay nagiging walang silbi.

Ang tampok na ito ay ginagamit sa awtomatikong pag-update ng mga makefile.

-MP Ang opsyong ito ay nagtuturo sa CPP na magdagdag ng huwad na target para sa bawat dependency maliban sa
pangunahing file, na nagiging sanhi ng bawat isa na umaasa sa wala. Gumagana ang mga dummy na panuntunang ito sa mga error
gumawa nagbibigay kung aalisin mo ang mga file ng header nang hindi ina-update ang Makefile ipareha.

Ito ay karaniwang output:

pagsubok.o: pagsubok.c pagsubok.h

pagsubok.h:

-MT target
Baguhin ang target ng panuntunang inilabas ng pagbuo ng dependency. Bilang default, tumatagal ang CPP
ang pangalan ng pangunahing input file, tinatanggal ang anumang mga bahagi ng direktoryo at anumang suffix ng file
tulad ng .c, at idinadagdag ang karaniwang object suffix ng platform. Ang resulta ay ang target.

An -MT itatakda ng opsyon ang target na eksaktong string na iyong tinukoy. Kung gusto mo
maramihang mga target, maaari mong tukuyin ang mga ito bilang isang argumento sa -MT, o gumamit ng maramihan
-MT mga pagpipilian.

Halimbawa, -MT '$(objpfx)foo.o' maaaring magbigay

$(objpfx)foo.o: foo.c

-MQ target
Katulad ng -MT, ngunit sinipi nito ang anumang mga character na espesyal na Gawin.
-MQ '$(objpfx)foo.o' Binibigyan

$$(objpfx)foo.o: foo.c

Ang default na target ay awtomatikong sinipi, na para bang ito ay ibinigay kasama -MQ.

-MD -MD ay katumbas ng -M -MF file, maliban doon -E ay hindi ipinahiwatig. Ang driver
determinado file batay sa kung ang isang -o ang pagpipilian ay ibinigay. Kung ito ay, ang driver ay gumagamit nito
argumento ngunit may panlapi ng .d, kung hindi, ito ay kukuha ng pangalan ng input file,
inaalis ang anumang bahagi ng direktoryo at suffix, at inilalapat ang a .d hulapi.

If -MD ay ginagamit kasabay ng -E, anuman -o switch ay nauunawaan upang tukuyin ang
dependency output file, ngunit kung ginamit nang wala -E, bawat isa -o ay nauunawaan upang tukuyin ang a
target na object file.

Dahil sa -E ay hindi ipinahiwatig, -MD ay maaaring magamit upang makabuo ng isang dependency output file bilang a
side-effect ng proseso ng compilation.

-MMD
katulad -MD maliban sa banggitin lamang ang mga file ng header ng gumagamit, hindi ang mga file ng header ng system.

-fpch-deps
Kapag gumagamit ng mga precompiled na header, ang flag na ito ay magiging sanhi ng dependency-output na mga flag
ilista din ang mga file mula sa mga dependency ng precompiled header. Kung hindi tinukoy lamang
ang precompiled na header ang ililista at hindi ang mga file na ginamit sa paggawa nito
dahil hindi kinokonsulta ang mga file na iyon kapag ginamit ang isang precompiled na header.

-fpch-preprocess
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng isang precompiled na header kasama ng -E. Nagsingit ito ng isang espesyal
"#pragma", "#pragma GCC pch_preprocess "filename"" sa output upang markahan ang lugar
kung saan natagpuan ang precompiled header, at ang filename. Kailan -fpreprocessed ay nasa
gamitin, kinikilala ng GCC ang "#pragma" na ito at nilo-load ang PCH.

Naka-off ang opsyong ito bilang default, dahil ang resultang preprocessed na output ay tanging
talagang angkop bilang input sa GCC. Ito ay nakabukas sa pamamagitan ng -save-temps.

Hindi mo dapat isulat itong "#pragma" sa sarili mong code, ngunit ligtas na i-edit ang
filename kung available ang PCH file sa ibang lokasyon. Ang filename ay maaaring
absolute o maaaring nauugnay ito sa kasalukuyang direktoryo ng GCC.

-x c
-x c ++
-x layunin-c
-x assembler-with-cpp
Tukuyin ang pinagmulang wika: C, C++, Objective-C, o assembly. Wala itong kinalaman
na may pagsunod sa mga pamantayan o mga extension; pinipili lang nito kung aling base syntax ang pupuntahan
asahan. Kung wala kang ibibigay sa mga opsyong ito, ihihinuha ng cpp ang wika mula sa
extension ng source file: .c, . Cc, .m, O .S. Ilang iba pang karaniwang extension para sa
Kinikilala din ang C++ at pagpupulong. Kung hindi nakikilala ng cpp ang extension, ito
ituturing ang file bilang C; ito ang pinaka-generic na mode.

tandaan: Ang mga nakaraang bersyon ng cpp ay tinanggap a -lang opsyon na pinili pareho ang
wika at ang antas ng pagsunod sa mga pamantayan. Ang pagpipiliang ito ay inalis, dahil
sumasalungat ito sa -l pagpipilian.

-std=pamantayan
-ansi
Tukuyin ang pamantayan kung saan dapat sumunod ang code. Sa kasalukuyan, alam ng CPP ang tungkol sa C
at mga pamantayan ng C++; ang iba ay maaaring idagdag sa hinaharap.

pamantayan maaaring isa sa:

"c90"
"c89"
"iso9899:1990"
Ang pamantayang ISO C mula 1990. c90 ay ang nakagawiang shorthand para sa bersyong ito ng
ang pamantayan.

Ang -ansi ang opsyon ay katumbas ng -std=c90.

"iso9899:199409"
Ang 1990 C standard, gaya ng amyendahan noong 1994.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Ang binagong pamantayang ISO C, na inilathala noong Disyembre 1999. Bago ilathala, ito
ay kilala bilang C9X.

"iso9899:2011"
"c11"
"c1x"
Ang binagong pamantayang ISO C, na inilathala noong Disyembre 2011. Bago ilathala, ito
ay kilala bilang C1X.

"gnu90"
"gnu89"
Ang 1990 C standard at mga extension ng GNU. Ito ang default.

"gnu99"
"gnu9x"
Ang 1999 C standard at mga extension ng GNU.

"gnu11"
"gnu1x"
Ang 2011 C standard at mga extension ng GNU.

"c++98"
Ang 1998 ISO C++ standard plus amendments.

"gnu++98"
Katulad ng -std=c++98 kasama ang mga extension ng GNU. Ito ang default para sa C++ code.

-Ako- Hatiin ang isamang landas. Anumang mga direktoryo na tinukoy sa -I mga pagpipilian bago -Ako- ay
hinanap lamang ang mga header na hiniling na may "#include "file""; hindi sila hinahanap
"#isamafile>". Kung ang mga karagdagang direktoryo ay tinukoy sa -I mga pagpipilian pagkatapos ng
-Ako-, ang mga direktoryo na iyon ay hinahanap para sa lahat # isama mga direktiba

Sa karagdagan, -Ako- pinipigilan ang paggamit ng direktoryo ng kasalukuyang direktoryo ng file bilang
ang unang direktoryo ng paghahanap para sa "#include "file"". Ang pagpipiliang ito ay hindi na ginagamit.

-nostdinc
Huwag maghanap sa mga karaniwang direktoryo ng system para sa mga file ng header. Tanging ang mga direktoryo
tinukoy mo kasama ng -I mga opsyon (at ang direktoryo ng kasalukuyang file, kung
naaangkop) ay hinahanap.

-nostdinc++
Huwag maghanap ng mga file ng header sa mga karaniwang direktoryo na partikular sa C++, ngunit gawin pa rin
hanapin ang iba pang karaniwang mga direktoryo. (Ginagamit ang opsyong ito kapag binubuo ang C++
aklatan.)

-isama file
paraan file na parang "#include "file"" ang lumabas bilang unang linya ng pangunahing source
file. Gayunpaman, hinanap ng unang direktoryo file ay gumagana ang preprocessor
direktoryo sa halip of ang direktoryo na naglalaman ng pangunahing source file. Kung hindi natagpuan
doon, hinahanap ito sa natitirang bahagi ng "#include "..."" search chain bilang
Normal.

Kung maraming -isama Ang mga pagpipilian ay ibinigay, ang mga file ay kasama sa pagkakasunud-sunod ng mga ito
lalabas sa command line.

-imacros file
Eksakto tulad ng -isama, maliban sa anumang output na ginawa sa pamamagitan ng pag-scan file ay itinapon
malayo. Ang mga macro na tinukoy nito ay nananatiling tinukoy. Pinapayagan ka nitong makuha ang lahat ng mga macro
mula sa isang header nang hindi rin pinoproseso ang mga deklarasyon nito.

Lahat ng mga file na tinukoy ni -imacros ay naproseso bago ang lahat ng mga file na tinukoy ng -isama.

-idirafter dir
paghahanap dir para sa mga file ng header, ngunit gawin ito pagkatapos lahat ng mga direktoryo na tinukoy sa -I at ang
Ang mga karaniwang direktoryo ng system ay naubos na. dir ay itinuturing bilang isang sistema kasama
direktoryo. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay papalitan ng sysroot
unlapi; tingnan mo --sysroot at -isysroot.

-iprefix unlapi
Tukuyin unlapi bilang unlapi para sa kasunod -iwithprefix mga pagpipilian. Kung ang unlapi
kumakatawan sa isang direktoryo, dapat mong isama ang pangwakas /.

-iwithprefix dir
-iwithprefixbefore dir
Mag-aplay dir sa prefix na tinukoy dati na may -iprefix, at idagdag ang resulta
direktoryo sa isama ang landas ng paghahanap. -iwithprefixbefore inilalagay ito sa parehong lugar -I
gagawin; -iwithprefix inilalagay kung saan -idirafter ay.

-isysroot dir
Ang pagpipiliang ito ay tulad ng --sysroot opsyon, ngunit nalalapat lamang sa mga file ng header (maliban sa
Mga target ni Darwin, kung saan nalalapat ito sa parehong mga file ng header at mga aklatan). Tingnan ang
--sysroot opsyon para sa karagdagang impormasyon.

-imultilib dir
paggamit dir bilang isang subdirectory ng direktoryo na naglalaman ng mga header ng C++ na tukoy sa target.

-isystem dir
paghahanap dir para sa mga file ng header, pagkatapos ng lahat ng mga direktoryo na tinukoy ni -I ngunit bago ang
karaniwang mga direktoryo ng system. Markahan ito bilang isang direktoryo ng system, upang maging pareho ito
espesyal na pagtrato gaya ng inilalapat sa mga karaniwang direktoryo ng system. Kung dir nagsisimula
na may "=", pagkatapos ay ang "=" ay papalitan ng sysroot prefix; tingnan mo --sysroot at
-isysroot.

-iquote dir
paghahanap dir para lamang sa mga file ng header na hiniling na may "#include "file""; hindi sila
hinanap ang "#includefile>", bago ang lahat ng mga direktoryo na tinukoy ni -I at bago ang
karaniwang mga direktoryo ng system. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay papalitan ng
ang sysroot prefix; tingnan mo --sysroot at -isysroot.

-fdirectives-lamang
Kapag nag-preprocess, pangasiwaan ang mga direktiba, ngunit huwag palawakin ang mga macro.

Ang pag-uugali ng opsyon ay nakasalalay sa -E at -fpreprocessed mga pagpipilian.

may -E, ang preprocessing ay limitado sa paghawak ng mga direktiba gaya ng "#define",
"#ifdef", at "#error". Iba pang mga pagpapatakbo ng preprocessor, tulad ng macro expansion at
hindi ginaganap ang trigraph conversion. Bilang karagdagan, ang -DD ang opsyon ay hayagang
pinagana.

may -fpreprocessed, ang predefinition ng command line at karamihan sa mga builtin na macro ay
may kapansanan. Ang mga macro gaya ng "__LINE__", na nakadepende sa konteksto, ay pinangangasiwaan
karaniwan. Ito ay nagbibigay-daan sa pagsasama-sama ng mga file na dati nang naproseso gamit ang "-E
-fdirectives-lamang".

Sa pareho -E at -fpreprocessed, ang mga patakaran para sa -fpreprocessed unahin. Ito
nagbibigay-daan sa buong preprocessing ng mga file na dati nang na-preprocess gamit ang "-E
-fdirectives-lamang".

-fdollars-in-identifiers
Tanggapin $ sa mga identifier.

-fextended-identifiers
Tanggapin ang mga pangkalahatang pangalan ng character sa mga identifier. Ang pagpipiliang ito ay pang-eksperimento; sa isang
sa hinaharap na bersyon ng GCC, ie-enable ito bilang default para sa C99 at C++.

-fpreprocessed
Ipahiwatig sa preprocessor na ang input file ay na-preprocess na. Ito
pinipigilan ang mga bagay tulad ng macro expansion, trigraph conversion, escaped newline splicing,
at pagproseso ng karamihan sa mga direktiba. Kinikilala at inaalis pa rin ng preprocessor
mga komento, upang maipasa mo ang isang file na na-preprocess na gamit ang -C sa compiler na wala
mga problema. Sa mode na ito ang pinagsamang preprocessor ay higit pa sa isang tokenizer
para sa mga dulo sa harap.

-fpreprocessed ay implicit kung ang input file ay may isa sa mga extension .i, .ii or .mi.
Ito ang mga extension na ginagamit ng GCC para sa mga preprocessed na file na ginawa ni -save-temps.

-ftabstop=lapad
Itakda ang distansya sa pagitan ng mga tab stop. Nakakatulong ito sa preprocessor na mag-ulat ng tamang column
mga numero sa mga babala o error, kahit na lumitaw ang mga tab sa linya. Kung ang halaga ay mas mababa
kaysa sa 1 o higit sa 100, ang opsyon ay binabalewala. Ang default ay 8.

-fdebug-cpp
Ang pagpipiliang ito ay kapaki-pakinabang lamang para sa pag-debug ng GCC. Kapag ginamit sa -E, nagtatapon ng pag-debug
impormasyon tungkol sa mga mapa ng lokasyon. Ang bawat token sa output ay nauunahan ng dump ng
ang mapa na kinabibilangan nito. Ang dump ng mapa na naglalaman ng lokasyon ng isang token
maaring maging:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }

Kapag ginamit nang wala -E, walang epekto ang opsyong ito.

-ftrack-macro-expansion[=antas]
Subaybayan ang mga lokasyon ng mga token sa mga macro expansion. Pinapayagan nito ang compiler na maglabas
diagnostic tungkol sa kasalukuyang macro expansion stack kapag may naganap na error sa compilation
isang macro expansion. Ang paggamit ng opsyong ito ay ginagawang kumonsumo ang preprocessor at ang compiler
higit pang memorya. Ang antas Maaaring gamitin ang parameter upang piliin ang antas ng katumpakan ng token
pagsubaybay sa lokasyon kaya binabawasan ang pagkonsumo ng memorya kung kinakailangan. Halaga 0 of
antas i-de-activate ang opsyong ito na parang hindi -ftrack-macro-expansion ay naroroon sa
ang command line. Halaga 1 sinusubaybayan ang mga lokasyon ng mga token sa isang degradong mode para sa kapakanan ng
minimal na memory overhead. Sa mode na ito lahat ng mga token na nagreresulta mula sa pagpapalawak ng isang
argument ng isang function-like macro ay may parehong lokasyon. Halaga 2 sinusubaybayan ang mga token
ganap na mga lokasyon. Ang halagang ito ay ang pinaka-gutom sa memorya. Kapag ibinigay ang pagpipiliang ito
walang argumento, ang default na halaga ng parameter ay 2.

-fexec-charset=charset
Itakda ang execution character set, na ginagamit para sa string at character constants. Ang default
ay UTF-8. charset maaaring anumang encoding na sinusuportahan ng "iconv" library ng system
gawain.

-fwide-exec-charset=charset
Itakda ang wide execution character set, na ginagamit para sa wide string at character constants.
Ang default ay UTF-32 o UTF-16, alinman ang tumutugma sa lapad ng "wchar_t". Bilang
sa -fexec-charset, charset maaaring maging anumang encoding na sinusuportahan ng "iconv" ng system
gawain sa silid-aklatan; gayunpaman, magkakaroon ka ng mga problema sa mga pag-encode na hindi akma
eksakto sa "wchar_t".

-finput-charset=charset
Itakda ang input character set, na ginagamit para sa pagsasalin mula sa character set ng input
file sa source character set na ginamit ng GCC. Kung hindi tinukoy ng lokal, o GCC
hindi makuha ang impormasyong ito mula sa lokal, ang default ay UTF-8. Ito ay maaaring
na-override ng alinman sa locale o opsyong command line na ito. Sa kasalukuyan ang utos
inuuna ang opsyon sa linya kung may salungatan. charset maaaring maging anumang encoding
suportado ng "iconv" library routine ng system.

-fworking-directory
Paganahin ang pagbuo ng mga linemarker sa preprocessor na output na hahayaan ang compiler
alamin ang kasalukuyang gumaganang direktoryo sa oras ng preprocessing. Kapag ang pagpipiliang ito ay
pinagana, ang preprocessor ay maglalabas, pagkatapos ng paunang linemarker, ng pangalawang linemarker
kasama ang kasalukuyang gumaganang direktoryo na sinusundan ng dalawang slash. Gagamitin ito ng GCC
direktoryo, kapag ito ay naroroon sa preprocessed input, bilang ang direktoryo na inilabas bilang
ang kasalukuyang gumaganang direktoryo sa ilang mga format ng impormasyon sa pag-debug. Ang pagpipiliang ito ay
implicitly na pinagana kung ang impormasyon sa pag-debug ay pinagana, ngunit maaari itong pigilan sa
ang negadong anyo -fno-working-directory. Kung ang -P ang bandila ay naroroon sa utos
linya, ang opsyong ito ay walang epekto, dahil walang "#line" na mga direktiba ang ilalabas.

-fno-show-column
Huwag mag-print ng mga numero ng column sa mga diagnostic. Maaaring kailanganin ito kung ang mga diagnostic ay
ini-scan ng isang program na hindi nakakaintindi sa mga numero ng column, gaya ng
dejagnu.

-A predicate=sagutin
Gumawa ng paninindigan gamit ang panaguri predicate at sagutin sagutin. Ang form na ito ay
mas gusto sa mas lumang anyo -A predicate(sagutin), na sinusuportahan pa rin, dahil ito
ay hindi gumagamit ng mga espesyal na character ng shell.

-A -predicate=sagutin
Kanselahin ang isang assertion na may panaguri predicate at sagutin sagutin.

-dCHARS
CHARS ay isang sequence ng isa o higit pa sa mga sumusunod na character, at hindi dapat
pinangungunahan ng isang espasyo. Ang ibang mga character ay binibigyang-kahulugan ng compiler proper, o
nakalaan para sa mga hinaharap na bersyon ng GCC, at sa gayon ay tahimik na binabalewala. Kung tinukoy mo
mga character na ang pag-uugali ay sumasalungat, ang resulta ay hindi natukoy.

M Sa halip na ang normal na output, bumuo ng isang listahan ng # tukuyin mga direktiba para sa lahat ng
mga macro na tinukoy sa panahon ng pagpapatupad ng preprocessor, kabilang ang paunang natukoy
mga macro. Nagbibigay ito sa iyo ng paraan upang malaman kung ano ang paunang natukoy sa iyong bersyon ng
ang preprocessor. Ipagpalagay na wala kang file foo.h, ang utos

pindutin ang foo.h; cpp -dM foo.h

ipapakita ang lahat ng paunang natukoy na macro.

Kung gumagamit ka ng -dM wala ang -E pagpipilian, -dM ay binibigyang-kahulugan bilang kasingkahulugan ng
-fdump-rtl-mach.

D katulad M maliban sa dalawang aspeto: ginagawa nito hindi isama ang mga paunang natukoy na macro, at ito
output kapwa ang # tukuyin mga direktiba at ang resulta ng preprocessing. Parehong uri
ng output pumunta sa karaniwang output file.

N katulad D, ngunit naglalabas lamang ng mga macro name, hindi ang kanilang mga pagpapalawak.

I Pagbubuhos # isama mga direktiba bilang karagdagan sa resulta ng preprocessing.

U katulad D maliban na ang mga macro lamang na pinalawak, o nasubok ang pagkatukoy
sa preprocessor direktiba, ay output; ang output ay naantala hanggang sa paggamit o
pagsubok ng macro; at #undef Ang mga direktiba ay output din para sa mga nasubok na macro ngunit
hindi natukoy sa panahong iyon.

-P Pigilan ang pagbuo ng mga linemarker sa output mula sa preprocessor. Ito ay maaaring
kapaki-pakinabang kapag nagpapatakbo ng preprocessor sa isang bagay na hindi C code, at ipapadala
sa isang programa na maaaring malito ng mga linemarker.

-C Huwag itapon ang mga komento. Ang lahat ng mga komento ay ipinapasa sa output file, maliban
para sa mga komento sa mga naprosesong direktiba, na tinatanggal kasama ng direktiba.

Dapat kang maging handa para sa mga side effect kapag gumagamit -C; nagiging sanhi ito ng preprocessor sa
ituring ang mga komento bilang mga token sa kanilang sariling karapatan. Halimbawa, lumalabas ang mga komento sa
simula ng kung ano ang magiging isang direktiba na linya ay may epekto ng paggawa ng linyang iyon sa isang
ordinaryong linya ng pinagmulan, dahil ang unang token sa linya ay hindi na a #.

-CC Huwag itapon ang mga komento, kabilang ang habang macro expansion. Ito ay tulad ng -C, maliban
na ang mga komentong nakapaloob sa loob ng mga macro ay ipinapasa din sa output file kung saan
ang macro ay pinalawak.

Bilang karagdagan sa mga side-effects ng -C opsyon, ang -CC ang opsyon ay nagiging sanhi ng lahat ng C++-style
mga komento sa loob ng isang macro na iko-convert sa C-style na mga komento. Ito ay upang maiwasan mamaya
paggamit ng macro na iyon mula sa hindi sinasadyang pagkomento sa natitirang linya ng pinagmulan.

Ang -CC Ang opsyon ay karaniwang ginagamit upang suportahan ang mga komento ng lint.

-tradisyonal-cpp
Subukang gayahin ang pag-uugali ng mga makalumang C preprocessors, kumpara sa ISO C
mga preprocessor.

-trigraphs
Iproseso ang mga pagkakasunud-sunod ng trigraph. Ito ay tatlong-character na pagkakasunud-sunod, lahat ay nagsisimula sa
??, na tinukoy ng ISO C upang tumayo para sa mga solong character. Halimbawa, ??/ nakatayo
para \, Kaya '??/n' ay isang character constant para sa isang bagong linya. Bilang default, binabalewala ng GCC
trigraph, ngunit sa mga mode na sumusunod sa pamantayan, kino-convert nito ang mga ito. Tingnan ang -std at -ansi
mga pagpipilian.

Ang siyam na trigraph at ang mga kapalit nito ay

Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Kapalit: [ ] { } # \ ^ | ~

-mapa muli
Paganahin ang espesyal na code upang gumana sa paligid ng mga file system na pinahihintulutan lamang ang napakaikling file
mga pangalan, tulad ng MS-DOS.

- Tumulong
--target-tulong
Mag-print ng text na naglalarawan sa lahat ng mga opsyon sa command line sa halip na mag-preprocess ng kahit ano.

-v Verbose mode. I-print ang numero ng bersyon ng GNU CPP sa simula ng pagpapatupad, at
iulat ang huling anyo ng isamang landas.

-H I-print ang pangalan ng bawat header file na ginamit, bilang karagdagan sa iba pang normal na aktibidad. Bawat isa
pangalan ay naka-indent upang ipakita kung gaano kalalim ang # isama stack ito. Precompiled na header
ang mga file ay naka-print din, kahit na sila ay napag-alamang hindi wasto; isang di-wastong precompiled
header file ay naka-print na may ...x at isang wastong may ...! .

-version
--bersyon
I-print ang numero ng bersyon ng GNU CPP. Sa isang gitling, magpatuloy sa preprocess gaya ng normal.
Sa dalawang gitling, lumabas kaagad.

Pagdaan Options sa ang Assembler
Maaari mong ipasa ang mga opsyon sa assembler.

-Wa,opsyon
Pumasa opsyon bilang isang opsyon sa assembler. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati
sa maraming mga opsyon sa mga kuwit.

-Xassembler opsyon
Pumasa opsyon bilang isang opsyon sa assembler. Magagamit mo ito para magbigay ng partikular sa system
mga opsyon sa assembler na hindi alam ng GCC kung paano makilala.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng argumento, dapat mong gamitin -Xassembler dalawang beses,
isang beses para sa opsyon at isang beses para sa argumento.

Options para Pag-uugnay
Naglalaro ang mga opsyong ito kapag ini-link ng compiler ang mga object file sa isang executable
output file. Ang mga ito ay walang kahulugan kung ang tagatala ay hindi gumagawa ng isang hakbang na link.

object-file-name
Ang isang pangalan ng file na hindi nagtatapos sa isang espesyal na kinikilalang suffix ay itinuturing na pangalan ng isang
object file o library. (Ang mga file ng object ay nakikilala mula sa mga aklatan ng linker
ayon sa mga nilalaman ng file.) Kung ang pag-link ay tapos na, ang mga object file na ito ay ginagamit bilang
input sa linker.

-c
-S
-E Kung ang alinman sa mga opsyon na ito ay ginagamit, ang linker ay hindi tatakbo, at object file name
hindi dapat gamitin bilang argumento.

-laklatan
-l aklatan
Hanapin ang library na pinangalanan aklatan kapag nagli-link. (Ang pangalawang alternatibo kasama ang
library bilang isang hiwalay na argumento ay para lamang sa pagsunod sa POSIX at hindi inirerekomenda.)

Ito ay gumagawa ng isang pagkakaiba kung saan sa command isulat mo ang pagpipiliang ito; naghahanap ang linker
at pinoproseso ang mga aklatan at object file sa pagkakasunud-sunod ng mga ito ay tinukoy. kaya, foo.o
-lz bar.o naghahanap sa library z pagkatapos ng file foo.o ngunit bago bar.o. Kung bar.o ay tumutukoy sa
mga function sa z, maaaring hindi ma-load ang mga function na iyon.

Ang linker ay naghahanap ng karaniwang listahan ng mga direktoryo para sa library, na sa totoo lang
isang file na pinangalanan aklatan.a. Pagkatapos ay ginagamit ng linker ang file na ito na parang tinukoy
tiyak sa pamamagitan ng pangalan.

Ang mga direktoryo na hinanap ay may kasamang ilang karaniwang mga direktoryo ng system at anuman na ikaw
tukuyin na may -L.

Karaniwan ang mga file na matatagpuan sa ganitong paraan ay mga file ng library---archive file na ang mga miyembro ay
object file. Pinangangasiwaan ng linker ang isang archive file sa pamamagitan ng pag-scan dito para sa mga miyembro
na tumutukoy sa mga simbolo na hanggang ngayon ay isinangguni ngunit hindi tinukoy. Ngunit kung ang
file na natagpuan ay isang ordinaryong object file, ito ay naka-link sa karaniwang paraan. Ang
tanging pagkakaiba sa pagitan ng paggamit ng isang -l opsyon at pagtukoy ng pangalan ng file ay iyon -l
nakapaligid aklatan sa lib at .a at naghahanap ng ilang direktoryo.

-lobjc
Kailangan mo itong espesyal na kaso ng -l opsyon upang maiugnay ang isang Objective-C o
Layunin-C++ na programa.

-nostartfiles
Huwag gamitin ang karaniwang system startup file kapag nagli-link. Ang karaniwang sistema
ang mga aklatan ay karaniwang ginagamit, maliban kung -nostdlib or -nodefaultlibs Ginagamit.

-nodefaultlibs
Huwag gamitin ang mga karaniwang library ng system kapag nagli-link. Tanging ang mga aklatan na iyong tinukoy
ipapasa sa linker, mga opsyon na tumutukoy sa linkage ng mga library ng system, tulad
bilang "-static-libgcc" o "-shared-libgcc", ay hindi papansinin. Ang karaniwang mga startup file
ay ginagamit nang normal, maliban kung -nostartfiles Ginagamit. Ang compiler ay maaaring bumuo ng mga tawag sa
"memcmp", "memset", "memcpy" at "memmove". Ang mga entry na ito ay kadalasang nireresolba ng
mga entry sa libc. Ang mga entry point na ito ay dapat ibigay sa pamamagitan ng ibang mekanismo
kapag tinukoy ang pagpipiliang ito.

-nostdlib
Huwag gamitin ang karaniwang system startup file o library kapag nagli-link. Walang startup
file at tanging ang mga aklatan na iyong tinukoy ang ipapasa sa linker, mga opsyon
pagtukoy ng linkage ng mga library ng system, gaya ng "-static-libgcc" o
Ang "-shared-libgcc", ay hindi papansinin. Ang compiler ay maaaring bumuo ng mga tawag sa "memcmp",
"memset", "memcpy" at "memmove". Ang mga entry na ito ay kadalasang nireresolba ng mga entry sa
libc. Ang mga entry point na ito ay dapat ibigay sa pamamagitan ng ilang iba pang mekanismo kapag ito
ang pagpipilian ay tinukoy.

Isa sa mga karaniwang aklatan na nilalampasan -nostdlib at -nodefaultlibs is libgcc.aSa
library ng mga panloob na subroutine na ginagamit ng GCC para malampasan ang mga partikular na pagkukulang
mga makina, o mga espesyal na pangangailangan para sa ilang wika.

Sa karamihan ng mga kaso, kailangan mo libgcc.a kahit na gusto mong iwasan ang iba pang karaniwang mga aklatan.
Sa madaling salita, kapag tinukoy mo -nostdlib or -nodefaultlibs dapat karaniwan
tukuyin -lgcc din. Tinitiyak nito na wala kang hindi nalutas na mga sanggunian
panloob na GCC library subroutine. (Halimbawa, __pangunahin, ginamit upang matiyak ang C++
tatawagin ang mga constructor.)

-pie
Gumawa ng isang posisyon na independiyenteng maipapatupad sa mga target na sumusuporta dito. Para predictable
mga resulta, dapat mo ring tukuyin ang parehong hanay ng mga opsyon na ginamit upang bumuo ng code
(-fpie, -fPIE, o mga suboption ng modelo) kapag tinukoy mo ang opsyong ito.

-rdynamic
Ipasa ang bandila -export-dynamic sa ELF linker, sa mga target na sumusuporta dito. Ito
inutusan ang linker na idagdag ang lahat ng mga simbolo, hindi lamang ang mga ginamit, sa dynamic na simbolo
mesa. Ang opsyon na ito ay kailangan para sa ilang paggamit ng "dlopen" o upang payagan ang pagkuha
backtraces mula sa loob ng isang programa.

-s Alisin ang lahat ng talahanayan ng simbolo at impormasyon sa paglilipat mula sa executable.

-static
Sa mga system na sumusuporta sa dynamic na pag-link, pinipigilan nito ang pag-link sa nakabahagi
mga aklatan. Sa ibang mga system, walang epekto ang opsyong ito.

-ibinahagi
Gumawa ng isang nakabahaging bagay na maaaring maiugnay sa iba pang mga bagay upang bumuo ng isang
maipapatupad. Hindi lahat ng system ay sumusuporta sa opsyong ito. Para sa mga mahuhulaan na resulta, kailangan mo
tukuyin din ang parehong hanay ng mga opsyon na ginamit upang bumuo ng code (-fpic, -fPIC, O
mga suboption ng modelo) kapag tinukoy mo ang opsyong ito.[1]

-shared-libgcc
-static-libgcc
Sa mga sistemang nagbibigay libgcc bilang isang shared library, pinipilit ng mga opsyong ito ang paggamit ng
alinman sa nakabahagi o static na bersyon ayon sa pagkakabanggit. Kung walang nakabahaging bersyon ng libgcc ay
na binuo noong na-configure ang compiler, walang epekto ang mga opsyong ito.

Mayroong ilang mga sitwasyon kung saan dapat gamitin ng isang application ang nakabahagi libgcc
sa halip na ang static na bersyon. Ang pinakakaraniwan sa mga ito ay kapag ang aplikasyon
gustong maghagis at makahuli ng mga exception sa iba't ibang shared library. Kung ganoon,
bawat isa sa mga aklatan pati na rin ang application mismo ay dapat gumamit ng nakabahagi libgcc.

Samakatuwid, awtomatikong nagdaragdag ang mga driver ng G++ at GCJ -shared-libgcc sa tuwing magtatayo ka
isang shared library o isang pangunahing executable, dahil karaniwang ginagamit ng mga program na C++ at Java
exceptions, kaya ito ang tamang gawin.

Kung, sa halip, ginagamit mo ang driver ng GCC upang lumikha ng mga nakabahaging aklatan, maaari mong makita na sila
ay hindi palaging mali-link sa ibinahagi libgcc. Kung mahahanap ng GCC, sa configuration nito
oras, na mayroon kang non-GNU linker o GNU linker na hindi sumusuporta sa opsyon
--eh-frame-hdr, ili-link nito ang nakabahaging bersyon ng libgcc sa mga shared library ni
default. Kung hindi, ito ay samantalahin ang linker at i-optimize ang layo
pag-uugnay sa nakabahaging bersyon ng libgcc, na nagli-link sa static na bersyon ng libgcc
bilang default. Nagbibigay-daan ito sa mga pagbubukod na magpalaganap sa pamamagitan ng mga nakabahaging aklatan,
nang hindi nagkakaroon ng mga gastos sa paglipat sa oras ng pag-load ng library.

Gayunpaman, kung ang isang library o pangunahing executable ay dapat na magtapon o makahuli ng mga pagbubukod, ikaw
dapat itong i-link gamit ang G++ o GCJ driver, ayon sa naaangkop para sa mga wikang ginagamit sa
program, o gamit ang opsyon -shared-libgcc, upang ito ay naka-link sa ibinahagi
libgcc.

-static-libstdc++
Kapag ang g ++ Ang program ay ginagamit upang i-link ang isang C++ program, karaniwan itong awtomatiko
link laban sa libstdc++. Kung libstdc++ ay magagamit bilang isang shared library, at ang
-static hindi ginagamit ang opsyon, pagkatapos ay magli-link ito laban sa nakabahaging bersyon ng
libstdc++. Iyan ay karaniwang maayos. Gayunpaman, kung minsan ay kapaki-pakinabang na i-freeze ang
na bersyon ng libstdc++ ginamit ng programa nang hindi napupunta sa ganap na static
link. Ang -static-libstdc++ ang pagpipilian ay nagtuturo sa g ++ driver para i-link libstdc++
statically, nang hindi kinakailangang i-link ang iba pang mga library nang statically.

-simboliko
Magbigkis ng mga sanggunian sa mga pandaigdigang simbolo kapag bumubuo ng isang nakabahaging bagay. Magbabala tungkol sa anuman
hindi nalutas na mga sanggunian (maliban kung na-override ng opsyon sa editor ng link -Xlinker -z
-Xlinker defs). Ilang system lang ang sumusuporta sa opsyong ito.

-T script
paggamit script bilang linker script. Ang opsyong ito ay sinusuportahan ng karamihan sa mga system na gumagamit ng
GNU linker. Sa ilang mga target, tulad ng mga bare-board na target na walang operating system,
ang -T Maaaring kailanganin ang opsyon kapag nagli-link upang maiwasan ang mga sanggunian sa mga hindi natukoy na simbolo.

-Xlinker opsyon
Pumasa opsyon bilang isang opsyon sa linker. Magagamit mo ito para magbigay ng partikular sa system
mga opsyon sa linker na hindi nakikilala ng GCC.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng hiwalay na argumento, dapat mong gamitin -Xlinker
dalawang beses, isang beses para sa opsyon at isang beses para sa argumento. Halimbawa, para pumasa - igiit
mga kahulugan, kailangan mong magsulat -Xlinker - igiit -Xlinker mga kahulugan. Hindi gumagana
sumulat -Xlinker "-pagnindigan mga kahulugan", dahil ipinapasa nito ang buong string bilang a
nag-iisang argumento, na hindi ang inaasahan ng linker.

Kapag gumagamit ng GNU linker, kadalasan ay mas maginhawang ipasa ang mga argumento sa linker
mga opsyon gamit ang opsyon=halaga syntax kaysa bilang magkahiwalay na mga argumento. Halimbawa, ikaw
maaaring tukuyin -Xlinker -Map=output.map sa halip na -Xlinker -Mapa -Xlinker output.mapa.
Maaaring hindi sinusuportahan ng ibang mga linker ang syntax na ito para sa mga opsyon sa command-line.

-Wl,opsyon
Pumasa opsyon bilang isang opsyon sa linker. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati sa
maramihang mga pagpipilian sa mga kuwit. Maaari mong gamitin ang syntax na ito upang magpasa ng argumento sa
opsyon. Halimbawa, -Wl,-Map,output.map pass -Mapa output.mapa sa linker. Kailan
gamit ang GNU linker, maaari ka ring makakuha ng parehong epekto sa -Wl,-Map=output.map.

TANDAAN: Sa Ubuntu 8.10 at mga mas bagong bersyon, para sa LDFLAGS, ang opsyon -Wl,-z,relro Ginagamit.
Upang huwag paganahin, gamitin -Wl,-z, norelro.

-u simbolo
Magkunwaring simbolo simbolo ay hindi natukoy, upang pilitin ang pag-link ng mga module ng library upang tukuyin
ito. Pwede mong gamitin -u maraming beses na may iba't ibang mga simbolo upang puwersahin ang pag-load ng
karagdagang mga module ng aklatan.

Options para Directory paghahanap
Tinukoy ng mga opsyong ito ang mga direktoryo upang maghanap ng mga file ng header, para sa mga aklatan at para sa mga bahagi
ng compiler:

-Idir
Idagdag ang direktoryo dir sa ulo ng listahan ng mga direktoryo na hahanapin para sa header
mga file. Magagamit ito upang i-override ang isang file ng header ng system, na palitan ang iyong sarili
bersyon, dahil hinahanap ang mga direktoryo na ito bago ang file ng header ng system
mga direktoryo. Gayunpaman, hindi mo dapat gamitin ang opsyong ito upang magdagdag ng mga direktoryo na naglalaman
mga file ng header ng system na ibinigay ng vendor (gamitin -isystem para doon). Kung gumamit ka ng higit sa isa
-I opsyon, ang mga direktoryo ay ini-scan sa kaliwa-papuntang-kanang pagkakasunud-sunod; ang karaniwang sistema
kasunod ang mga direktoryo.

Kung ang isang karaniwang sistema ay may kasamang direktoryo, o isang direktoryo na tinukoy sa -isystem, Ay
tinukoy din sa -I, ang -I hindi papansinin ang opsyon. Mananatili pa rin ang direktoryo
hinanap ngunit bilang isang direktoryo ng system sa normal nitong posisyon sa system ay may kasamang chain.
Ito ay upang matiyak na ang pamamaraan ng GCC upang ayusin ang mga header ng buggy system at ang pag-order
para sa include_next na direktiba ay hindi sinasadyang nabago. Kung kailangan mo talaga
baguhin ang pagkakasunud-sunod ng paghahanap para sa mga direktoryo ng system, gamitin ang -nostdinc at / o -isystem
mga pagpipilian.

-iplugindir=dir
Itakda ang direktoryo upang maghanap ng mga plugin na ipinapasa -fplugin=pangalan sa halip ng
-fplugin=landas/pangalan.so. Ang pagpipiliang ito ay hindi nilalayong gamitin ng user, ngunit lamang
dumaan sa driver.

-iquotedir
Idagdag ang direktoryo dir sa ulo ng listahan ng mga direktoryo na hahanapin para sa header
mga file para lamang sa kaso ng # isama "file"; hindi sila hinahanap # isama <file>,
kung hindi ay parang -I.

-Ldir
Magdagdag ng direktoryo dir sa listahan ng mga direktoryo na hahanapin -l.

-Bunlapi
Tinutukoy ng opsyong ito kung saan mahahanap ang mga executable, library, isama ang mga file, at
data file ng compiler mismo.

Ang compiler driver program ay nagpapatakbo ng isa o higit pa sa mga subprogram cpp, cc1, as at ld.
Sinusubukan nito unlapi bilang prefix para sa bawat program na sinusubukan nitong patakbuhin, parehong mayroon at wala
makina/bersyon/.

Para sa bawat subprogram na tatakbo, ang driver ng compiler ay unang sumusubok sa -B prefix, kung mayroon man.
Kung hindi mahanap ang pangalang iyon, o kung -B ay hindi tinukoy, sinusubukan ng driver ang dalawang pamantayan
prefix, /usr/lib/gcc/ at /usr/local/lib/gcc/. Kung wala sa mga iyon ang nagreresulta sa a
pangalan ng file na natagpuan, ang hindi binagong pangalan ng program ay hinahanap gamit ang
mga direktoryo na tinukoy sa iyong PATH variable ng kapaligiran.

Susuriin ng compiler upang makita kung ang landas na ibinigay ng -B ay tumutukoy sa isang direktoryo,
at kung kinakailangan ay magdaragdag ito ng isang character na separator ng direktoryo sa dulo ng landas.

-B ang mga prefix na epektibong tumutukoy sa mga pangalan ng direktoryo ay nalalapat din sa mga aklatan sa
linker, dahil isinasalin ng compiler ang mga opsyong ito sa -L mga opsyon para sa linker.
Nalalapat din ang mga ito sa pagsasama ng mga file sa preprocessor, dahil nagsasalin ang compiler
ang mga pagpipiliang ito sa -isystem mga opsyon para sa preprocessor. Sa kasong ito, ang compiler
append isama sa unlapi.

Ang runtime support file libgcc.a maaari ding hanapin gamit ang -B unlapi, kung
kailangan. Kung hindi ito matatagpuan doon, ang dalawang karaniwang prefix sa itaas ay susubukan, at iyon
ay lahat. Ang file ay naiwan sa link kung hindi ito matagpuan sa mga paraan na iyon.

Ang isa pang paraan upang tukuyin ang isang prefix na katulad ng -B ang prefix ay ang paggamit ng kapaligiran
nagbabago GCC_EXEC_PREFIX.

Bilang isang espesyal na kludge, kung ang landas na ibinigay ng -B is [dir/]stageN/, Kung saan N ay isang numero
sa hanay na 0 hanggang 9, pagkatapos ay papalitan ito ng [dir/]isama. Ito ay para makatulong
boot-strapping ang compiler.

-specs=file
paraan file pagkatapos basahin ng compiler ang pamantayan panoorin file, upang ma-override
ang mga default na kung saan ang gcc ginagamit ng driver program kapag tinutukoy kung anong mga switch ang ipapasa
sa cc1, cc1plus, as, ld, atbp. Higit sa isa -specs=file maaaring tukuyin sa
command line, at pinoproseso ang mga ito sa pagkakasunud-sunod, mula kaliwa hanggang kanan.

--sysroot=dir
paggamit dir bilang lohikal na root directory para sa mga header at library. Halimbawa, kung ang
Ang compiler ay karaniwang naghahanap ng mga header sa / usr / isama at mga aklatan sa / Usr / lib,
sa halip ay maghahanap ito dir/usr/include at dir/usr/lib.

Kung gagamitin mo pareho ang opsyong ito at ang -isysroot opsyon, pagkatapos ay ang --sysroot kalooban ng pagpipilian
nalalapat sa mga aklatan, ngunit ang -isysroot malalapat ang opsyon sa mga file ng header.

Ang linker ng GNU (nagsisimula sa bersyon 2.16) ay mayroong kinakailangang suporta para dito
opsyon. Kung hindi sinusuportahan ng iyong linker ang opsyong ito, ang aspeto ng header file ng
--sysroot gagana pa rin, ngunit ang aspeto ng aklatan ay hindi.

-Ako- Ang opsyon na ito ay hindi na ginagamit. Mangyaring gamitin -iquote sa halip para sa -I mga direktoryo noon
ang -Ako- at alisin ang -Ako-. Anumang mga direktoryo na iyong tinukoy -I mga pagpipilian bago ang
-Ako- Ang pagpipilian ay hinanap lamang para sa kaso ng # isama "file"; hindi sila hinanap
para # isama <file>.

Kung ang mga karagdagang direktoryo ay tinukoy sa -I mga pagpipilian pagkatapos ng -Ako-, Ang mga
Ang mga direktoryo ay hinahanap para sa lahat # isama mga direktiba. (Karaniwan lahat -I mga direktoryo
ay ginagamit sa ganitong paraan.)

Bilang karagdagan, ang -Ako- pinipigilan ng opsyon ang paggamit ng kasalukuyang direktoryo (kung saan ang
nagmula ang kasalukuyang input file) bilang ang unang direktoryo ng paghahanap para sa # isama "file".
Walang paraan upang i-override ang epektong ito ng -Ako-. May -NS. maaari mong tukuyin ang paghahanap
ang direktoryo na kasalukuyang noong ginamit ang compiler. Iyan ay hindi eksakto ang
katulad ng kung ano ang ginagawa ng preprocessor bilang default, ngunit ito ay madalas na kasiya-siya.

-Ako- ay hindi pumipigil sa paggamit ng mga karaniwang direktoryo ng system para sa mga file ng header.
Kaya, -Ako- at -nostdinc ay malaya.

Tinutukoy Target Makina at tagatala bersyon
Ang karaniwang paraan upang patakbuhin ang GCC ay ang patakbuhin ang executable na tinatawag gcc, O makina-gcc kapag tumawid-
pagsasama-sama, o makina-gcc-bersyon upang magpatakbo ng isang bersyon maliban sa na-install
huling.

hardware Modellen at Configuration
Ang bawat uri ng target na makina ay maaaring magkaroon ng sarili nitong mga espesyal na opsyon, simula sa -m, Pumili
sa iba't ibang modelo ng hardware o configuration---halimbawa, 68010 vs 68020, lumulutang
coprocessor o wala. Ang isang naka-install na bersyon ng compiler ay maaaring mag-compile para sa anumang modelo
o pagsasaayos, ayon sa mga tinukoy na opsyon.

Sinusuportahan din ng ilang configuration ng compiler ang mga karagdagang espesyal na opsyon, kadalasan para sa
pagiging tugma sa iba pang mga compiler sa parehong platform.

Adapeva pista ng tatlong hari Options

mga ito -m ang mga opsyon ay tinukoy para sa Adapeva Epiphany:

-mhalf-reg-file
Huwag maglaan ng anumang rehistro sa hanay na "r32"..."r63". Nagbibigay-daan iyon sa code na tumakbo
mga variant ng hardware na kulang sa mga register na ito.

-mprefer-short-insn-regs
Mas gustong maglaan ng mga rehistro na nagpapahintulot sa pagbuo ng maikling pagtuturo. Maaari itong
magreresulta sa pagtaas ng bilang ng pagtuturo, kaya kung babawasan o pinapataas nito ang laki ng code
maaaring mag-iba sa bawat kaso.

-mbranch-cost=num
Itakda ang halaga ng mga sangay sa halos num "simpleng" mga tagubilin. Ang gastos na ito ay a
heuristic at hindi garantisadong makakapagdulot ng mga pare-parehong resulta sa mga release.

-mcmove
I-enable ang pagbuo ng mga conditional na galaw.

-mnops=num
Magbigay num nops bago ang bawat iba pang nabuong pagtuturo.

-mno-malambot-cmpsf
Para sa single-precision floating-point na paghahambing, maglabas ng fsub na pagtuturo at subukan ang
mga watawat. Ito ay mas mabilis kaysa sa paghahambing ng software, ngunit maaaring makakuha ng mga maling resulta
ang pagkakaroon ng NaNs, o kapag ang dalawang magkaibang maliliit na numero ay inihambing na ang kanilang
ang pagkakaiba ay kinakalkula bilang zero. Ang default ay -msoft-cmpsf, na gumagamit ng mas mabagal, ngunit
Sumusunod sa IEEE, mga paghahambing ng software.

-mstack-offset=num
Itakda ang offset sa pagitan ng tuktok ng stack at ng stack pointer. Hal, isang halaga ng 8
nangangahulugan na ang walong byte sa hanay na sp+0...sp+7 ay maaaring gamitin ng mga function ng dahon
walang stack allocation. Mga halaga maliban sa 8 or 16 ay hindi pa nasusubok at malamang na hindi
trabaho. Tandaan din na binabago ng opsyong ito ang ABI, na nag-compile ng program na may a
ibang stack offset kaysa sa mga aklatan na pinagsama-sama ay karaniwang hindi
trabaho. Maaaring maging kapaki-pakinabang ang opsyong ito kung gusto mong suriin kung ibang stack ang offset
ay magbibigay sa iyo ng mas mahusay na code, ngunit upang aktwal na gumamit ng ibang stack offset upang bumuo
gumaganang mga programa, inirerekumenda na i-configure ang toolchain gamit ang naaangkop
--with-stack-offset=num pagpipilian.

-mno-ikot-pinakamalapit
Ipalagay sa scheduler na ang rounding mode ay nakatakda sa pagputol. Ang
ang default ay -mround-pinakalapit.

-mlong-tawag
Kung hindi tinukoy ng isang katangian, ipagpalagay na ang lahat ng mga tawag ay maaaring lampas sa
offset range ng b / bl na mga tagubilin, at samakatuwid ay i-load ang function address sa
isang rehistro bago magsagawa ng (kung hindi man ay direktang) tawag. Ito ang default.

-mshort-calls
Kung hindi tinukoy ng isang katangian, ipagpalagay na ang lahat ng direktang tawag ay nasa hanay
ng mga tagubilin sa b / bl, kaya gamitin ang mga tagubiling ito para sa mga direktang tawag. Ang default
is -mlong-tawag.

-msmall16
Ipagpalagay na ang mga address ay maaaring i-load bilang 16-bit na mga hindi naka-sign na halaga. Hindi ito nalalapat sa
mga address ng function kung saan -mlong-tawag may bisa ang semantika.

-mfp-mode=paraan
Itakda ang umiiral na mode ng floating-point unit. Tinutukoy nito ang lumulutang-
point mode na ibinigay at inaasahan sa function na tawag at oras ng pagbabalik. Paggawa
ang mode na ito ay tumutugma sa mode na higit na kailangan mo sa pagsisimula ng function ay maaaring gawin mo
mas maliit at mas mabilis ang mga programa sa pamamagitan ng pag-iwas sa mga hindi kinakailangang switch ng mode.

paraan maaaring itakda sa isa sa mga sumusunod na halaga:

tumatawag
Ang anumang mode sa pagpasok ng function ay wasto, at pinanatili o ibinalik kapag ang function
bumabalik, at kapag tumawag ito ng iba pang mga function. Ang mode na ito ay kapaki-pakinabang para sa pag-compile
mga aklatan o iba pang mga compilation unit na maaaring gusto mong isama sa iba
mga programa na may iba't ibang umiiral na FPU mode, at ang kaginhawaan ng pagiging magagawang
gumamit ng isang object file na mas malaki kaysa sa laki at bilis ng overhead para sa anumang dagdag na mode
paglipat na maaaring kailanganin, kumpara sa kung ano ang kakailanganin sa isang higit pa
tiyak na pagpipilian ng umiiral na FPU mode.

putulin
Ito ang mode na ginagamit para sa mga pagkalkula ng floating-point na may pinutol (ibig sabihin, round
patungo sa zero) rounding mode. Kasama diyan ang conversion mula sa floating point hanggang
integer

round-pinakamalapit
Ito ang mode na ginagamit para sa mga floating-point na kalkulasyon na may round-to-nerest-o-
kahit rounding mode.

int Ito ang mode na ginagamit upang magsagawa ng mga kalkulasyon ng integer sa FPU, hal integer
multiply, o integer multiply-and-accumulate.

Ang default ay -mfp-mode=tumatawag

-mnosplit-lohi
-mno-postinc
-mno-postmodify
Mga pag-aayos sa pagbuo ng code na hindi pinapagana, ayon sa pagkakabanggit, paghahati ng 32-bit na pag-load,
pagbuo ng mga post-increment na address, at pagbuo ng post-modify na mga address. Ang
ang mga default ay msplit-lohi, -mpost-inc, at -mpost-modify.

-mnovect-doble
Baguhin ang gustong SIMD mode sa SImode. Ang default ay -mvect-doble, Na ginagamit ng
DImode bilang ginustong SIMD mode.

-max-vect-align=num
Ang maximum na pagkakahanay para sa mga uri ng SIMD vector mode. num maaaring 4 o 8. Ang default ay
8. Tandaan na ito ay isang pagbabago sa ABI, kahit na maraming mga interface ng function ng library ang gagawin
hindi maaapektuhan, kung hindi sila gumagamit ng mga SIMD vector mode sa mga lugar kung saan nakakaapekto ang mga ito sa laki
at/o pagkakahanay ng mga nauugnay na uri.

-msplit-vecmove-maaga
Ang hating vector ay gumagalaw sa iisang salita na gumagalaw bago i-reload. Sa teorya na ito ay maaaring magbigay
mas mahusay na irehistro ang paglalaan, ngunit sa ngayon ang kabaligtaran ay tila sa pangkalahatan ang kaso.

-m1reg-reg
Tukuyin ang isang rehistro upang hawakan ang pare-pareho -1, na ginagawang maliit na negatibo ang paglo-load
mga constant at ilang bitmask nang mas mabilis. Ang mga pinapayagang halaga para sa reg ay r43 at r63,
na tumutukoy na gamitin ang rehistrong iyon bilang isang nakapirming rehistro, at wala, na nangangahulugang hindi
rehistro ay ginagamit para sa layuning ito. Ang default ay -m1reg-wala.

AAArch64 Options

Ang mga opsyong ito ay tinukoy para sa mga pagpapatupad ng AArch64:

-big-endian
Bumuo ng big-endian code. Ito ang default kapag ang GCC ay na-configure para sa isang
aarch64_be-*-* target.

-mggeneral-regs-lamang
Bumuo ng code na gumagamit lamang ng mga pangkalahatang rehistro.

-mlittle-endian
Bumuo ng little-endian code. Ito ang default kapag ang GCC ay na-configure para sa isang
aarch64-*-* ngunit hindi isang aarch64_be-*-* target.

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code. Ang programa at ang mga static na tinukoy na simbolo nito
dapat nasa loob ng 1GB ng bawat isa. Ang mga pointer ay 64 bits. Maaaring static ang mga programa
o dynamic na naka-link. Ang modelong ito ay hindi ganap na ipinatupad at karamihan ay itinuturing bilang
"maliit".

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code. Ang programa at ang static na tinukoy nito
ang mga simbolo ay dapat nasa loob ng 4GB ng bawat isa. Ang mga pointer ay 64 bits. Ang mga programa ay maaaring
statically o dynamic na naka-link. Ito ang default na modelo ng code.

-mcmodel=malaki
Bumuo ng code para sa malaking modelo ng code. Hindi ito gumagawa ng mga pagpapalagay tungkol sa mga address at
laki ng mga seksyon. Ang mga pointer ay 64 bits. Ang mga programa ay maaari lamang iugnay sa statically.

-mstrict-align
Huwag ipagpalagay na ang mga hindi nakahanay na memory reference ay hahawakan ng system.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
Alisin o panatilihin ang frame pointer sa mga function ng dahon. Ang dating gawi ay ang
default.

-mtls-dialect=desc
Gumamit ng mga TLS descriptor bilang thread-local na mekanismo ng storage para sa mga dynamic na access ng TLS
mga variable. Ito ang default.

-mtls-dialect=tradisyonal
Gamitin ang tradisyonal na TLS bilang thread-local na mekanismo ng storage para sa mga dynamic na access ng TLS
mga variable.

-martsa=pangalan
Tukuyin ang pangalan ng target na arkitektura, opsyonal na suffix ng isa o higit pa
mga modifier ng tampok. Ang pagpipiliang ito ay may form -martsa=arko{+[hindi]tampok}*, kung saan ang
halaga lamang para sa arko is armv8-a. Ang mga posibleng halaga para sa tampok ay dokumentado sa
sub-section sa ibaba.

Kung saan tinukoy ang mga sumasalungat na feature modifier, ginagamit ang pinaka-kanang feature.

Ginagamit ng GCC ang pangalang ito upang matukoy kung anong uri ng mga tagubilin ang maaari nitong ilabas kapag bumubuo
code ng pagpupulong. Maaaring gamitin ang opsyong ito kasabay ng o sa halip ng -mcpu=
pagpipilian.

-mcpu=pangalan
Tukuyin ang pangalan ng target na processor, opsyonal na nilagyan ng isa o higit pang feature
mga modifier. Ang pagpipiliang ito ay may form -mcpu=CPU{+[hindi]tampok}*, kung saan posible
halaga para sa CPU ay panlahat, malaki. Ang mga posibleng halaga para sa tampok ay dokumentado sa
ang sub-section sa ibaba.

Kung saan tinukoy ang mga sumasalungat na feature modifier, ginagamit ang pinaka-kanang feature.

Ginagamit ng GCC ang pangalang ito upang matukoy kung anong uri ng mga tagubilin ang maaari nitong ilabas kapag bumubuo
code ng pagpupulong.

-mtune=pangalan
Tukuyin ang pangalan ng processor upang ibagay ang pagganap. Aayusin ang code
na parang ang target na processor ay nasa uri na tinukoy sa opsyong ito, ngunit ginagamit pa rin
mga tagubilin na katugma sa target na processor na tinukoy ng a -mcpu= pagpipilian Ito
ang opsyon ay hindi maaaring lagyan ng suffix ng mga feature modifier.

-martsa at -mcpu mga modifier ng tampok

Mga modifier ng feature na ginamit kasama ng -martsa at -mcpu maaaring isa sa mga sumusunod:

crypto
Paganahin ang Crypto extension. Ito ay nagpapahiwatig na ang Advanced na SIMD ay pinagana.

fp Paganahin ang mga tagubilin sa floating-point.

simd
Paganahin ang Advanced na mga tagubilin sa SIMD. Ipinahihiwatig nito ang mga floating-point na mga tagubilin ay
pinagana. Ito ang default para sa lahat ng kasalukuyang posibleng halaga para sa mga opsyon -martsa at
-mcpu=.

Braso Options

mga ito -m ang mga opsyon ay tinukoy para sa mga arkitektura ng Advanced RISC Machines (ARM):

-mabi=pangalan
Bumuo ng code para sa tinukoy na ABI. Ang mga pinahihintulutang halaga ay: apcs-gnu, atpcs, aapcs,
aapcs-linux at iwmmxt.

-mapcs-frame
Bumuo ng stack frame na sumusunod sa ARM Procedure Call Standard para sa lahat
function, kahit na hindi ito mahigpit na kinakailangan para sa tamang pagpapatupad ng code.
Tinutukoy -fomit-frame-pointer sa pagpipiliang ito ay magiging sanhi ng hindi magiging mga stack frame
nabuo para sa mga function ng dahon. Ang default ay -mno-apcs-frame.

-Mapcs
Ito ay kasingkahulugan ng -mapcs-frame.

-mthumb-interwork
Bumuo ng code na sumusuporta sa pagtawag sa pagitan ng mga set ng pagtuturo ng ARM at Thumb.
Kung wala ang opsyong ito, sa mga pre-v5 na arkitektura, hindi maaaring ang dalawang set ng pagtuturo
mapagkakatiwalaang ginagamit sa loob ng isang programa. Ang default ay -mno-thumb-interwork, mula nang bahagya
mas malaking code ay nabuo kapag -mthumb-interwork ay tinukoy. Sa mga pagsasaayos ng AAPCS
ang pagpipiliang ito ay walang kahulugan.

-mno-sched-prolog
Pigilan ang muling pagsasaayos ng mga tagubilin sa prologue ng function, o ang pagsasama ng
yaong mga pagtuturo na may mga tagubilin sa katawan ng function. Ibig sabihin, lahat
Ang mga function ay magsisimula sa isang makikilalang hanay ng mga tagubilin (o sa katunayan ay isa sa a
pagpipilian mula sa isang maliit na hanay ng iba't ibang mga prologue ng function), at ang impormasyong ito ay maaaring
ginagamit upang mahanap ang simula kung gumagana sa loob ng isang executable na piraso ng code. Ang default
is -msched-prolog.

-mfloat-abi=pangalan
Tinutukoy kung aling floating-point ABI ang gagamitin. Ang mga pinahihintulutang halaga ay: malambot, softfp at
mahirap.

Tinutukoy malambot nagiging sanhi ng GCC na makabuo ng output na naglalaman ng mga tawag sa library para sa lumulutang-
mga operasyon ng punto. softfp nagbibigay-daan sa pagbuo ng code gamit ang hardware floating-point
mga tagubilin, ngunit ginagamit pa rin ang mga soft-float calling convention. mahirap ay nagbibigay-daan sa
pagbuo ng mga floating-point na mga tagubilin at gumagamit ng mga convention sa pagtawag na partikular sa FPU.

Ang default ay depende sa partikular na target na configuration. Tandaan na ang hard-float
at ang mga soft-float na ABI ay hindi tugma sa link; dapat mong i-compile ang iyong buong programa gamit ang
ang parehong ABI, at nag-link sa isang katugmang hanay ng mga aklatan.

-mlittle-endian
Bumuo ng code para sa isang processor na tumatakbo sa little-endian mode. Ito ang default para sa
lahat ng karaniwang mga pagsasaayos.

-big-endian
Bumuo ng code para sa isang processor na tumatakbo sa big-endian mode; ang default ay i-compile
code para sa isang maliit na-endian na processor.

-mwords-little-endian
Nalalapat lang ang opsyong ito kapag bumubuo ng code para sa mga big-endian na processor. Bumuo
code para sa isang little-endian word order ngunit isang big-endian byte order. Iyon ay, isang byte
pagkakasunud-sunod ng form 32107654. Tandaan: dapat lang gamitin ang opsyong ito kung kailangan mo
pagiging tugma sa code para sa mga big-endian na ARM processor na nabuo ng mga bersyon ng
compiler bago ang 2.8. Hindi na ginagamit ang opsyong ito.

-martsa=pangalan
Tinutukoy nito ang pangalan ng arkitektura ng target na ARM. Ginagamit ng GCC ang pangalang ito sa
tukuyin kung anong uri ng mga tagubilin ang mailalabas nito kapag bumubuo ng assembly code. Ito
ang opsyon ay maaaring gamitin kasabay ng o sa halip ng -mcpu= opsyon. Pinahihintulutan
ang mga pangalan ay: 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.

-martsa=katutubo nagiging sanhi ng auto-detect ng compiler ang arkitektura ng build
kompyuter. Sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa Linux, at hindi lahat
kinikilala ang mga arkitektura. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang
epekto.

-mtune=pangalan
Tinutukoy ng opsyong ito ang pangalan ng target na ARM processor kung saan dapat ibagay ng GCC
ang pagganap ng code. Para sa ilang mga pagpapatupad ng ARM, maaaring maging mas mahusay ang pagganap
nakuha sa pamamagitan ng paggamit ng pagpipiliang ito. Ang mga pinahihintulutang pangalan ay: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, braso7m, braso7d, braso7dm, braso7di, arm7dmi, arm70,
arm700, braso700i, arm710, braso710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, braso710t, braso720t, braso740t, malakas na bisig, malakas na sandata110, malakas na sandata1100,
malakas na sandata1110, arm8, arm810, arm9, braso9e, arm920, braso920t, braso922t, arm946e-s,
arm966e-s, arm968e-s, braso926ej-s, braso940t, arm9tdmi, arm10tdmi, braso1020t, braso1026ej-s,
braso10e, braso1020e, braso1022e, braso1136j-s, braso1136jf-s, mpcore, mpcorenovfp, braso1156t2-s,
braso1156t2f-s, braso1176jz-s, braso1176jzf-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, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=generic-arko tumutukoy na dapat ibagay ng GCC ang pagganap para sa isang timpla ng
mga processor sa loob ng arkitektura arko. Ang layunin ay upang makabuo ng code na gumagana nang maayos sa
kasalukuyang pinakasikat na mga processor, na nagbabalanse sa pagitan ng mga pag-optimize na nakikinabang sa ilan
Mga CPU sa hanay, at pag-iwas sa mga pitfall sa pagganap ng iba pang mga CPU. Ang mga epekto ng
maaaring magbago ang opsyong ito sa mga bersyon ng GCC sa hinaharap habang dumarating at umalis ang mga modelo ng CPU.

-mtune=katutubo nagiging sanhi ng auto-detect ng compiler ang CPU ng build computer. Sa
Sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa Linux, at hindi lahat ng mga arkitektura ay sinusuportahan
kinikilala. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang epekto.

-mcpu=pangalan
Tinutukoy nito ang pangalan ng target na ARM processor. Ginagamit ng GCC ang pangalang ito para makuha ang
pangalan ng target na arkitektura ng ARM (parang tinukoy ng -martsa) at ang processor ng ARM
uri para sa kung saan tune para sa pagganap (parang tinukoy ng -mtune). Kung saan ang pagpipiliang ito
ay ginagamit kasabay ng -martsa or -mtune, ang mga pagpipiliang iyon ay mauuna kaysa sa
naaangkop na bahagi ng opsyong ito.

Ang mga pinahihintulutang pangalan para sa opsyong ito ay pareho sa para sa -mtune.

-mcpu=generic-arko ay pinahihintulutan din, at katumbas ng -martsa=arko
-mtune=generic-arko. Tingnan -mtune para sa karagdagang impormasyon.

-mcpu=katutubo nagiging sanhi ng auto-detect ng compiler ang CPU ng build computer. Sa
Sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa Linux, at hindi lahat ng mga arkitektura ay sinusuportahan
kinikilala. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang epekto.

-mfpu=pangalan
-mfpe=numero
-mfp=numero
Tinutukoy nito kung saan available ang floating-point hardware (o hardware emulation).
ang target. Ang mga pinahihintulutang pangalan ay: fpa, fpe2, fpe3, taong lagalag, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 at neon-vfpv4. -mfp at -mfpe ay kasingkahulugan ng -mfpu=fpenumero, Para sa
pagiging tugma sa mga mas lumang bersyon ng GCC.

If -msoft-float ay tinukoy na ito ay tumutukoy sa format ng mga floating-point na halaga.

Kung kasama sa napiling floating-point hardware ang NEON extension (hal -mfpu=neon),
tandaan na ang mga floating-point na operasyon ay hindi gagamitin ng auto-vectorization pass ng GCC
maliban na lamang kung -funsafe-math-optimizations ay tinukoy din. Ito ay dahil sa NEON hardware
ay hindi ganap na nagpapatupad ng pamantayang IEEE 754 para sa floating-point arithmetic (sa
ang mga partikular na denormal na halaga ay itinuturing bilang zero), kaya ang paggamit ng mga tagubilin sa NEON ay maaaring
humantong sa pagkawala ng katumpakan.

-mfp16-format=pangalan
Tukuyin ang format ng "__fp16" na half-precision na floating-point na uri. Pinahihintulutan
mga pangalan ay wala, heeee, at alternatiba; ang default ay wala, kung saan ang "__fp16"
hindi tinukoy ang uri.

-mstructure-size-boundary=n
Ang laki ng lahat ng istruktura at unyon ay ipapa-round up sa isang multiple ng numero
ng mga bit na itinakda ng opsyong ito. Ang mga pinahihintulutang halaga ay 8, 32 at 64. Ang default na halaga
nag-iiba para sa iba't ibang toolchain. Para sa toolchain na naka-target sa COFF ang default na halaga ay
8. Pinapayagan lang ang value na 64 kung sinusuportahan ito ng pinagbabatayan na ABI.

Ang pagtukoy sa mas malaking bilang ay maaaring makagawa ng mas mabilis, mas mahusay na code, ngunit maaari rin
dagdagan ang laki ng programa. Ang iba't ibang mga halaga ay maaaring hindi tugma.
Ang code na pinagsama-sama sa isang halaga ay hindi kinakailangang umasa na gagana sa code o mga aklatan
pinagsama-sama sa isa pang halaga, kung nagpapalitan sila ng impormasyon gamit ang mga istruktura o unyon.

-mabort-on-noreturn
Bumuo ng isang tawag sa function na "abort" sa dulo ng isang "noreturn" function. Ito ay
ipapatupad kung ang function ay sumusubok na bumalik.

-mlong-tawag
-mno-mahabang-tawag
Sinasabi sa compiler na magsagawa ng mga function call sa pamamagitan ng unang pag-load ng address ng
gumana sa isang rehistro at pagkatapos ay magsagawa ng subroutine na tawag sa rehistrong ito. Ito
kailangan ang switch kung ang target na function ay nasa labas ng 64 megabyte addressing
hanay ng offset based na bersyon ng pagtuturo ng subroutine na tawag.

Kahit na naka-enable ang switch na ito, hindi lahat ng function call ay gagawing mahabang tawag.
Ang heuristic ay ang mga static na function, mga function na mayroong maikling tawag katangian,
mga function na nasa loob ng saklaw ng a #pragma walang_long_tawag direktiba at mga pag-andar
na ang mga kahulugan ay naipon na sa loob ng kasalukuyang compilation unit, ay
hindi gagawing mahabang tawag. Ang pagbubukod sa panuntunang ito ay ang mahinang pag-andar
mga kahulugan, mga function na may mahabang tawag katangian o ang seksyon katangian, at
mga function na nasa saklaw ng a #pragma long_calls direktiba, ay palaging magiging
naging mahabang tawag.

Ang tampok na ito ay hindi pinagana bilang default. Tinutukoy -mno-mahabang-tawag ay ibabalik ang
default na pag-uugali, tulad ng paglalagay ng mga function na tawag sa loob ng saklaw ng a #pragma
long_calls_off direktiba. Tandaan na ang mga switch na ito ay walang epekto sa kung paano ang compiler
bumubuo ng code upang pangasiwaan ang mga tawag sa function sa pamamagitan ng mga function pointer.

-msingle-pic-base
Tratuhin ang rehistro na ginamit para sa PIC addressing bilang read-only, sa halip na i-load ito sa
prologue para sa bawat function. Ang runtime system ang may pananagutan sa pagsisimula nito
magparehistro na may naaangkop na halaga bago magsimula ang pagpapatupad.

-mpic-register=reg
Tukuyin ang rehistro na gagamitin para sa PIC addressing. Ang default ay R10 maliban kung stack-
pinagana ang pagsuri, kapag ginamit ang R9.

-mcirrus-fix-invalid-insns
Ipasok ang mga NOP sa stream ng pagtuturo upang malutas ang mga problema sa
di-wastong mga kumbinasyon ng pagtuturo ng Maverick. Ang pagpipiliang ito ay wasto lamang kung ang
-mcpu=ep9312 ang opsyon ay ginamit upang paganahin ang pagbuo ng mga tagubilin para sa Cirrus
Maverick floating-point co-processor. Ang pagpipiliang ito ay hindi pinagana bilang default, dahil
ang problema ay naroroon lamang sa mas lumang mga pagpapatupad ng Maverick. Ang default ay maaaring muling-
pinagana sa pamamagitan ng paggamit ng -mno-cirrus-fix-invalid-insns Lumipat.

-mpoke-function-name
Isulat ang pangalan ng bawat function sa seksyon ng teksto, nang direkta sa unahan ng function
prologue. Ang nabuong code ay katulad nito:

t0
.ascii "arm_poke_function_name", 0
.align
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4

Kapag nagsasagawa ng stack backtrace, maaaring suriin ng code ang halaga ng "pc" na nakaimbak sa "fp +
0". Kung titingnan ng trace function ang lokasyong "pc - 12" at ang nangungunang 8 bits ay
set, pagkatapos ay alam namin na mayroong isang function name na naka-embed kaagad bago ito
lokasyon at may haba na "((pc[-3]) at 0xff000000)".

-thumb
-marm
Pumili sa pagitan ng pagbuo ng code na ipapatupad sa ARM at Thumb states. Ang default para sa
karamihan sa mga configuration ay upang bumuo ng code na execute sa ARM estado, ngunit ang default
maaaring baguhin sa pamamagitan ng pag-configure ng GCC gamit ang --with-mode=ay opsyon sa pag-configure.

-mtpcs-frame
Bumuo ng stack frame na sumusunod sa Thumb Procedure Call Standard para sa
lahat ng non-leaf function. (Ang isang function ng dahon ay isa na hindi tumatawag sa iba
function.) Ang default ay -mno-tpcs-frame.

-mtpcs-leaf-frame
Bumuo ng stack frame na sumusunod sa Thumb Procedure Call Standard para sa
lahat ng mga function ng dahon. (Ang isang function ng dahon ay isa na hindi tumatawag sa anumang iba pang mga function.)
Ang default ay -mno-apcs-leaf-frame.

-mcallee-super-interworking
Nagbibigay sa lahat ng nakikitang panlabas na mga function sa file na pinagsama-sama ng isang pagtuturo ng ARM
itakda ang header na lilipat sa Thumb mode bago isagawa ang natitirang bahagi ng function.
Nagbibigay-daan ito sa mga function na ito na tawagan mula sa non-interworking code. Ang pagpipiliang ito ay
hindi wasto sa mga configuration ng AAPCS dahil pinagana ang interworking bilang default.

-mcaller-super-interworking
Nagbibigay-daan sa mga tawag sa pamamagitan ng mga function pointer (kabilang ang mga virtual function) na maisagawa nang tama
hindi alintana kung ang target code ay pinagsama-sama para sa interworking o hindi.
Mayroong maliit na overhead sa halaga ng pagsasagawa ng isang function pointer kung ang pagpipiliang ito
ay pinagana. Hindi wasto ang opsyong ito sa mga configuration ng AAPCS dahil ang interworking ay
pinagana bilang default.

-mtp=pangalan
Tukuyin ang modelo ng pag-access para sa pointer ng lokal na imbakan ng thread. Ang mga wastong modelo ay
malambot, na bumubuo ng mga tawag sa "__aeabi_read_tp", cp15, na kumukuha ng thread
pointer mula sa "cp15" nang direkta (sinusuportahan sa arm6k architecture), at kotse, Na
gumagamit ng pinakamahusay na magagamit na paraan para sa napiling processor. Ang default na setting ay
kotse.

-mtls-dialect=dialect
Tukuyin ang diyalektong gagamitin para sa pag-access ng lokal na imbakan ng thread. Dalawang diyalekto ang
suportado --- gnu at gnu2. ang gnu Pinipili ng dialect ang orihinal na GNU scheme para sa
pagsuporta sa mga lokal at pandaigdigang dynamic na modelo ng TLS. Ang gnu2 pinipili ng diyalekto ang GNU
descriptor scheme, na nagbibigay ng mas mahusay na performance para sa mga shared library. Ang GNU
Ang descriptor scheme ay tugma sa orihinal na scheme, ngunit nangangailangan ito ng bago
assembler, linker at suporta sa library. Ang mga inisyal at lokal na exec na modelo ng TLS ay
hindi apektado ng opsyong ito at palaging gamitin ang orihinal na scheme.

-mword-relocations
Bumuo lamang ng ganap na mga relokasyon sa mga halagang kasing laki ng salita (ibig sabihin, R_ARM_ABS32). Ito ay
pinagana bilang default sa mga target (uClinux, SymbianOS) kung saan nagpapataw ang runtime loader
ang paghihigpit na ito, at kung kailan -fpic or -fPIC ay tinukoy.

-mfix-cortex-m3-ldrd
Ang ilang mga Cortex-M3 core ay maaaring magdulot ng katiwalian ng data kapag may "ldrd" na mga tagubilin
ginagamit ang magkakapatong na destinasyon at mga base register. Iniiwasan ng pagpipiliang ito ang pagbuo
mga tagubiling ito. Ang opsyong ito ay pinagana bilang default kapag -mcpu=cortex-m3 is
tinukoy.

-munaligned-access
-mno-unaaligned-access
Pinapagana (o hindi pinapagana) ang pagbabasa at pagsulat ng 16- at 32-bit na mga halaga mula sa mga address
na hindi 16- o 32-bit na nakahanay. Bilang default, ang hindi nakahanay na pag-access ay hindi pinagana para sa lahat
pre-ARMv6 at lahat ng arkitektura ng ARMv6-M, at pinagana para sa lahat ng iba pang arkitektura. Kung
hindi pinagana ang hindi nakahanay na pag-access pagkatapos ay maa-access ang mga salita sa mga istrukturang naka-pack na data
isang byte sa isang pagkakataon.

Ang ARM attribute na "Tag_CPU_unaaligned_access" ay itatakda sa nabuong object file
sa alinman sa tama o mali, depende sa setting ng opsyong ito. Kung hindi magkatugma
ang pag-access ay pinagana pagkatapos ang simbolo ng preprocessor na "__ARM_FEATURE_UNALIGNED" ay magiging
tinukoy.

-mneon-para-64bits
Pinapagana ang paggamit ng Neon upang pangasiwaan ang mga scalar na 64-bit na operasyon. Ito ay hindi pinagana bilang default
dahil ang halaga ng paglipat ng data mula sa mga pangunahing rehistro patungo sa Neon ay mataas.

AVR Options

-mmcu=mcu
Tukuyin ang Atmel AVR instruction set architectures (ISA) o uri ng MCU.

Ang default para sa opsyong ito ay@tie{}"avr2".

Sinusuportahan ng GCC ang mga sumusunod na AVR device at ISA:

"avr2"
Mga "Classic" na device na may hanggang 8@tie{}KiB ng memorya ng program. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
Mga "Classic" na device na may hanggang 8@tie{}KiB ng memorya ng program at may "MOVW"
tagubilin. 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"
Mga "Classic" na device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
Mga "Classic" na device na may 128@tie{}KiB ng memory ng program. mcu@tie{}= "atmega103",
"at43usb320".

"avr35"
Mga "Classic" na device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program at may
ang "MOVW" na pagtuturo. mcu@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
"Pinahusay" na mga device na may hanggang 8@tie{}KiB ng memorya ng program. mcu@tali{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
"Pinahusay" na mga device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program.
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"
Mga "Pinahusay" na device na may 128@tie{}KiB ng memorya ng program. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
"Pinahusay" na mga device na may 3-byte na PC, ibig sabihin, may higit sa 128@tie{}KiB ng program
memorya. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
Mga "XMEGA" na device na may higit sa 8@tie{}KiB at hanggang 64@tie{}KiB ng memorya ng program.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Mga "XMEGA" na device na may higit sa 64@tie{}KiB at hanggang 128@tie{}KiB ng program
memorya. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
Mga "XMEGA" na device na may higit sa 64@tie{}KiB at hanggang 128@tie{}KiB ng program
memorya at higit sa 64@tie{}KiB ng RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Mga "XMEGA" na device na may higit sa 128@tie{}KiB ng memorya ng program. mcu@tali{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Mga "XMEGA" na device na may higit sa 128@tie{}KiB ng memorya ng program at higit pa sa
64@tie{}KiB ng RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
Ang ISA na ito ay ipinatupad ng kaunting AVR core at sinusuportahan para sa assembler lamang.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Mag-ipon ng mga papalabas na argumento ng function at kunin/i-release ang kinakailangang stack space para sa
mga papalabas na argumento ng function nang isang beses sa function prologue/epilogue. Kung wala ang pagpipiliang ito,
ang mga papalabas na argumento ay itinutulak bago tumawag ng isang function at nag-pop pagkatapos.

Ang pagpo-pop ng mga argumento pagkatapos ng function na tawag ay maaaring magastos sa AVR upang iyon
ang pag-iipon ng stack space ay maaaring humantong sa mas maliliit na executable dahil kailangan ng mga argumento
hindi dapat alisin sa stack pagkatapos ng naturang function na tawag.

Ang pagpipiliang ito ay maaaring humantong sa pinababang laki ng code para sa mga function na nagsasagawa ng ilang mga tawag sa
mga function na kumukuha ng kanilang mga argumento sa stack tulad ng mga tawag sa printf-like function.

-mbranch-cost=gastos
Itakda ang mga gastos sa sangay para sa mga tagubiling may kondisyong sangay gastos. Mga makatwirang halaga
para gastos ay maliliit, hindi negatibong integer. Ang default na gastos ng sangay ay 0.

-mcall-prologues
Ang mga function na prologue/epilogue ay pinalawak bilang mga tawag sa mga naaangkop na subroutine. Code
mas maliit ang sukat.

-mint8
Ipagpalagay na ang "int" ay 8-bit integer. Nakakaapekto ito sa laki ng lahat ng uri: ang "char" ay 1
byte, ang "int" ay 1 byte, ang "long" ay 2 byte, at ang "long long" ay 4 byte. Pakiusap
tandaan na ang pagpipiliang ito ay hindi sumusunod sa mga pamantayan ng C, ngunit nagreresulta ito sa mas maliit
laki ng code.

-mno-interrupts
Ang nabuong code ay hindi tugma sa mga pagkagambala sa hardware. Mas maliit ang laki ng code.

-magpahinga
Subukang palitan ang "CALL" resp. "JMP" na pagtuturo ng mas maikling "RCALL" resp. "RJMP"
pagtuturo kung naaangkop. Ang pagtatakda ng "-mrelax" ay nagdaragdag lamang ng "--relax" na opsyon sa
linker command line kapag tinawag ang linker.

Ang jump relaxing ay ginagawa ng linker dahil hindi pa alam ang mga jump offset
matatagpuan ang code. Samakatuwid, ang assembler code na nabuo ng compiler ay pareho,
ngunit ang mga tagubilin sa executable ay maaaring iba sa mga tagubilin sa assembler
code.

Dapat i-on ang pagre-relax kung kailangan ang mga linker stub, tingnan ang seksyon sa "EIND" at
linker stubs sa ibaba.

-mshort-calls
Ang opsyong ito ay hindi na ginagamit at aalisin sa GCC 4.8. Tingnan ang "-mrelax" para sa a
kapalit.

Gamitin ang mga tagubiling "RCALL"/"RJMP" kahit na sa mga device na may 16@tie{}KiB o higit pa sa program
memorya, ibig sabihin, sa mga device na mayroong "TAWAG" at "JMP" na mga tagubilin.

-msp8
Tratuhin ang stack pointer register bilang isang 8-bit register, ibig sabihin, ipalagay ang mataas na byte ng
ang stack pointer ay zero. Sa pangkalahatan, hindi mo kailangang itakda ang opsyong ito sa pamamagitan ng kamay.

Ang opsyong ito ay panloob na ginagamit ng compiler para pumili at bumuo ng mga multilibs
mga arkitektura na "avr2" at "avr25". Pinaghahalo ng mga arkitektura na ito ang mga device na mayroon at wala
"SPH". Para sa anumang setting maliban sa "-mmcu=avr2" o "-mmcu=avr25" ang driver ng compiler
ay idaragdag o aalisin ang opsyong ito mula sa command line ng compiler proper, dahil ang
alam ng compiler kung ang aparato o arkitektura ay may 8-bit na stack pointer at sa gayon
walang "SPH" na rehistro o hindi.

-mstrict-X
Gamitin ang rehistro ng address na "X" sa paraang iminungkahi ng hardware. Nangangahulugan ito na ang "X" ay
ginagamit lamang sa hindi direkta, post-increment o pre-decrement addressing.

Kung wala ang pagpipiliang ito, ang "X" na rehistro ay maaaring gamitin sa parehong paraan tulad ng "Y" o "Z" na
pagkatapos ay emulated sa pamamagitan ng karagdagang mga tagubilin. Halimbawa, naglo-load ng isang halaga gamit ang
Ang "X+const" ay tumutugon sa isang maliit na hindi negatibong "const < 64" sa isang rehistro Rn is
gumanap bilang

adiw r26, const ; X += const
ld , X ; = *X
sbiw r26, const; X -= const

-mtiny-stack
Baguhin lamang ang mas mababang 8@tie{}bits ng stack pointer.

"EIND" at Mga Device na may higit sa 128 Ki Bytes ng Flash

Ang mga pointer sa pagpapatupad ay 16@tie{}bits ang lapad. Ang address ng isang function o label
ay kinakatawan bilang address ng salita upang ang mga hindi direktang pagtalon at mga tawag ay ma-target ang anumang code
address sa hanay ng 64@tie{}Ki na salita.

Upang mapadali ang hindi direktang pagtalon sa mga device na may higit sa 128@tie{}Ki byte ng
program memory space, mayroong isang espesyal na function na rehistro na tinatawag na "EIND" na nagsisilbing
pinakamahalagang bahagi ng target na address kapag ang "EICALL" o "EIJMP" na mga tagubilin ay
ginagamit.

Ang mga hindi direktang pagtalon at tawag sa mga device na ito ay pinangangasiwaan bilang mga sumusunod ng compiler at ay
napapailalim sa ilang mga limitasyon:

· Ang compiler ay hindi kailanman nagtatakda ng "EIND".

· Ang compiler ay gumagamit ng "EIND" nang tahasan sa "EICALL"/"EIJMP" na mga tagubilin o maaaring basahin
Direktang "EIND" upang tularan ang isang hindi direktang tawag/lundag sa pamamagitan ng isang "RET"
tagubilin.

· Ipinapalagay ng compiler na ang "EIND" ay hindi nagbabago sa panahon ng startup code o sa panahon ng
aplikasyon. Sa partikular, ang "EIND" ay hindi nai-save/na-restore sa function o interrupt
paunang salita/epilogue ng nakagawiang serbisyo.

· Para sa hindi direktang mga tawag sa mga function at nakalkulang goto, ang linker ay bumubuo stubs. Mga stub
ay mga jump pad kung minsan ay tinatawag din mga trampoline. Kaya, ang hindi direktang tawag/paglukso ay tumalon sa
ganyang usbong. Ang stub ay naglalaman ng direktang pagtalon sa nais na address.

· Ang pagpapahinga ng linker ay dapat na naka-on upang ang linker ay bubuo ng mga stub
tama ang lahat ng sitwasyon. Tingnan ang opsyon ng compiler na "-mrelax" at ang opsyon ng linler
"--relax". May mga sulok na kaso kung saan ang linker ay dapat na bumuo ng mga stub ngunit
abort nang walang pagpapahinga at walang kapaki-pakinabang na mensahe ng error.

· Ang default na linker script ay nakaayos para sa code na may "EIND = 0". Kung ang code ay dapat
upang gumana para sa isang setup na may "EIND != 0", isang custom na linker script ay kailangang gamitin sa pagkakasunud-sunod
upang ilagay ang mga seksyon na ang pangalan ay nagsisimula sa ".trampolines" sa segment kung saan
Ang "EIND" ay tumuturo sa.

· Ang startup code mula sa libgcc ay hindi kailanman nagtatakda ng "EIND". Pansinin na ang startup code ay isang timpla
ng code mula sa libgcc at AVR-LibC. Para sa epekto ng AVR-LibC sa "EIND", tingnan ang AVR-
LibC user manual ("http://nongnu.org/avr-libc/user-manual/").

· Lehitimo para sa startup code na partikular sa user na i-set up ang "EIND" nang maaga, halimbawa sa pamamagitan ng
ibig sabihin ng initialization code na matatagpuan sa seksyong ".init3". Ang nasabing code ay tumatakbo bago ang
pangkalahatang startup code na nagpapasimula ng RAM at tumatawag sa mga constructor, ngunit pagkatapos ng kaunting
startup code mula sa AVR-LibC na nagtatakda ng "EIND" sa segment kung nasaan ang vector table
matatagpuan.

#isama

static na walang bisa
__attribute__((section(".init3"),hubad,gamit,walang_instrument_function))
init3_set_eind (walang bisa)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24","memory");
}

Ang simbolo na "__trampolines_start" ay tinukoy sa script ng linker.

· Ang mga stub ay awtomatikong nabuo ng linker kung ang sumusunod na dalawang kundisyon ay
nakilala:

-
(maikli para sa lumikha stubs) tulad nito:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
sa labas ang segment kung saan matatagpuan ang mga stub.

· Ang compiler ay naglalabas ng mga ganitong "gs" modifier para sa mga code label sa mga sumusunod na sitwasyon:

-
-
- -mcall-prologues>
opsyon sa command-line.

-
mga talahanayan na maaari mong tukuyin ang -fno-jump-tables opsyon sa command-line.

-
-
· Paglukso sa mga hindi simbolikong address na tulad ng sa gayon hindi suportado:

int pangunahing (walang bisa)
{
/* Call function sa word address 0x2 */
return ((int(*)(void)) 0x2)();
}

Sa halip, kailangang i-set up ang isang stub, ibig sabihin, kailangang tawagan ang function sa pamamagitan ng isang simbolo
("func_4" sa halimbawa):

int pangunahing (walang bisa)
{
extern int func_4 (walang bisa);

/* Call function sa byte address 0x4 */
ibalik ang func_4();
}

at ang application ay maiugnay sa "-Wl,--defsym,func_4=0x4". Bilang kahalili, "func_4"
maaaring tukuyin sa script ng linker.

Pangangasiwa ng "RAMPD", "RAMPX", "RAMPY" at "RAMPZ" na Mga Espesyal na Function Register

Sinusuportahan ng ilang AVR device ang mga memoryang mas malaki kaysa sa 64@tie{}KiB range na maaaring ma-access
na may 16-bit na mga payo. Upang ma-access ang mga lokasyon ng memorya sa labas nitong 64@tie{}KiB range, ang
Ang nilalaman ng isang "RAMP" na rehistro ay ginagamit bilang mataas na bahagi ng address: Ang "X", "Y", "Z"
ang rehistro ng address ay pinagsama sa espesyal na function na "RAMPX", "RAMPY", "RAMPZ".
magparehistro, ayon sa pagkakabanggit, upang makakuha ng malawak na address. Katulad nito, ang "RAMPD" ay ginagamit kasama ng
direktang pagtugon.

· Sinisimulan ng startup code ang "RAMP" special function na nagrerehistro na may zero.

· Kung ang AVR Pinangalanan address Mga puwang, pinangalanan tirahan puwang maliban sa generic o "__flash" ay
ginamit, pagkatapos ay itinakda ang "RAMPZ" kung kinakailangan bago ang operasyon.

· Kung sinusuportahan ng device ang RAM na mas malaki sa 64@tie{KiB} at kailangang magbago ang compiler
"RAMPZ" upang magawa ang isang operasyon, ang "RAMPZ" ay ni-reset sa zero pagkatapos ng operasyon.

· Kung ang device ay may kasamang partikular na "RAMP" na rehistro, ang ISR prologue/epilogue
sine-save/ibinabalik ang SFR na iyon at sinisimulan ito ng zero kung sakaling ang ISR code ay maaaring
(implicitly) gamitin ito.

· Ang RAM na mas malaki sa 64@tie{KiB} ay hindi sinusuportahan ng GCC para sa mga AVR target. Kung gagamit ka
inline assembler upang basahin mula sa mga lokasyon sa labas ng 16-bit na hanay ng address at magbago
isa sa mga "RAMP" na rehistro, dapat mong i-reset ito sa zero pagkatapos ng pag-access.

AVR Built-in na Macros

Tinutukoy ng GCC ang ilang built-in na macro upang masubukan ng user code ang presensya o
kawalan ng mga tampok. Halos alinman sa mga sumusunod na built-in na macro ay hinuhusgahan mula sa device
mga kakayahan at sa gayon ay na-trigger ng "-mmcu=" command-line na opsyon.

Para sa higit pang mga built-in na macro na partikular sa AVR tingnan AVR Pinangalanan address Puwang at AVR Built-in
Pag-andar.

"__AVR_ARCH__"
Build-in na macro na lumulutas sa isang decimal na numero na tumutukoy sa arkitektura at
depende sa "-mmcu=mcu" opsyon. Ang mga posibleng halaga ay:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

para mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", ayon sa pagkakabanggit. Kung mcu
tumutukoy sa isang device, ang built-in na macro na ito ay nakatakda nang naaayon. Halimbawa, may
"-mmcu=atmega8" ang macro ay tutukuyin sa 4.

"__AVR_Device__"
Ang pagtatakda ng "-mmcu=aparato" tumutukoy sa built-in na macro na ito na nagpapakita ng pangalan ng device.
Halimbawa, tinutukoy ng "-mmcu=atmega8" ang built-in na macro na "__AVR_ATmega8__",
Tinutukoy ng "-mmcu=attiny261a" ang "__AVR_ATtiny261A__", atbp.

Ang mga pangalan ng built-in na macro ay sumusunod sa scheme na "__AVR_Device__" saan Device ay ang
pangalan ng device mula sa manwal ng gumagamit ng AVR. Ang pagkakaiba sa pagitan ng Device sa built-in
macro at aparato sa "-mmcu=aparato" ay ang huli ay palaging lowercase.

If aparato ay hindi isang aparato ngunit isang pangunahing arkitektura lamang tulad ng "avr51", gagawin ng macro na ito
hindi matukoy.

"__AVR_XMEGA__"
Ang device/architecture ay kabilang sa XMEGA family ng mga device.

"__AVR_MAY_ELPM__"
Ang aparato ay may tagubiling "ELPM".

"__AVR_HAVE_ELPMX__"
Ang device ay may "ELPM Rn,Z" at "ELPM Rn,Z+" mga tagubilin.

"__AVR_HAVE_MOVW__"
Ang aparato ay may tagubiling "MOVW" upang magsagawa ng 16-bit na mga paggalaw ng rehistro-rehistro.

"__AVR_MAY_LPMX__"
Ang device ay may "LPM Rn,Z" at "LPM Rn,Z+" mga tagubilin.

"__AVR_HAVE_MUL__"
Ang device ay may hardware multiplier.

"__AVR_HAVE_JMP_CALL__"
Ang device ay may mga tagubiling "JMP" at "TUMAWAG". Ito ang kaso para sa mga device na may
hindi bababa sa 16@tie{}KiB ng memorya ng program at kung hindi nakatakda ang "-mshort-calls."

"__AVR_MAY_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Ang device ay may mga tagubiling "EIJMP" at "EICALL". Ito ang kaso para sa mga device
na may higit sa 128@tie{}KiB ng memorya ng program. Nangangahulugan din ito na ang programa
ang counter (PC) ay 3@tie{}bytes ang lapad.

"__AVR_2_BYTE_PC__"
Ang program counter (PC) ay 2@tie{}bytes ang lapad. Ito ang kaso para sa mga device na may hanggang sa
128@tie{}KiB ng memorya ng program.

"__AVR_MAY_8BIT_SP__"
"__AVR_MAY_16BIT_SP__"
Ang stack pointer (SP) na rehistro ay itinuturing bilang 8-bit ayon sa pagkakabanggit 16-bit na rehistro ng
ang compiler. Ang kahulugan ng mga macro na ito ay apektado ng "-mtiny-stack".

"__AVR_MAY_SPH__"
"__AVR_SP8__"
Ang aparato ay may SPH (mataas na bahagi ng stack pointer) na espesyal na rehistro o mayroon
isang 8-bit na stack pointer, ayon sa pagkakabanggit. Ang kahulugan ng mga macro na ito ay apektado ng
"-mmcu=" at sa mga kaso ng "-mmcu=avr2" at "-mmcu=avr25" din ng "-msp8".

"__AVR_MAY_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Ang device ay may "RAMPD", "RAMPX", "RAMPY", "RAMPZ" na espesyal na rehistro ng function,
ayon sa pagkakabanggit.

"__NO_INTERRUPTS__"
Sinasalamin ng macro na ito ang "-mno-interrupts" na opsyon sa command line.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Ang ilang AVR device (AT90S8515, ATmega103) ay hindi dapat laktawan ang 32-bit na mga tagubilin dahil sa isang
erratum ng hardware. Ang mga tagubilin sa paglaktaw ay "SBRS", "SBRC", "SBIS", "SBIC" at "CPSE".
Ang pangalawang macro ay tinukoy lamang kung ang "__AVR_HAVE_JMP_CALL__" ay nakatakda din.

"__AVR_SFR_OFFSET__=offset"
Mga tagubilin na maaaring tumugon sa I/O special function registers nang direkta tulad ng "IN",
Maaaring gumamit ng ibang address ang "OUT", "SBI", atbp. na parang tinutugunan ng isang tagubilin sa
i-access ang RAM tulad ng "LD" o "STS". Nakadepende ang offset na ito sa arkitektura ng device at mayroon
na ibawas sa RAM address upang makuha ang kaukulang I/O@tie{}address.

"__WITH_AVRLIBC__"
Ang compiler ay na-configure upang magamit kasama ng AVR-Libc. Tingnan ang
"--with-avrlibc" na opsyon sa pag-configure.

Blackfin Options

-mcpu=CPU[-sirevision]
Tinutukoy ang pangalan ng target na processor ng Blackfin. Kasalukuyan, CPU maaaring isa sa
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. Ang opsyonal sirevision tinutukoy ang
rebisyon ng silikon ng target na processor ng Blackfin. Anumang mga solusyong magagamit para sa
paganahin ang naka-target na rebisyon ng silikon. Kung sirevision is wala, walang mga solusyon
pinagana. Kung sirevision is anumang, ang lahat ng mga workaround para sa naka-target na processor ay magiging
pinagana. Ang "__SILICON_REVISION__" na macro ay tinukoy sa dalawang hexadecimal digit
kumakatawan sa mga mayor at minor na numero sa rebisyon ng silikon. Kung sirevision is
wala, ang "__SILICON_REVISION__" ay hindi tinukoy. Kung sirevision is anumang, ang
Ang "__SILICON_REVISION__" ay tinukoy bilang 0xffff. Kung ito ay opsyonal sirevision Hindi
ginamit, ipinapalagay ng GCC ang pinakabagong kilalang rebisyon ng silicon ng target na Blackfin
processor.

Suporta para sa bf561 ay hindi kumpleto. Para sa bf561, Tanging ang processor macro ang tinukoy.
Kung wala ang pagpipiliang ito, bf532 ay ginagamit bilang processor bilang default. Ang kaukulang
paunang-natukoy na mga macro ng processor para sa CPU ay dapat tukuyin. At para sa bfin-elf toolchain,
nagiging sanhi ito ng hardware na BSP na ibinigay ng libgloss upang maiugnay sa if -msim Hindi
binigay

-msim
Tinutukoy na ang programa ay tatakbo sa simulator. Nagiging sanhi ito ng simulator
BSP na ibinigay ng libgloss upang maiugnay. Ang pagpipiliang ito ay may epekto lamang para sa bfin-elf
toolchain. Ilang iba pang opsyon, gaya ng -mid-shared-library at -mfdpic, ipahiwatig
-msim.

-momit-leaf-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function ng dahon. Iniiwasan nito ang
mga tagubilin para i-save, i-set up at i-restore ang mga frame pointer at gumawa ng karagdagang rehistro
magagamit sa mga function ng dahon. Ang pagpipilian -fomit-frame-pointer inaalis ang frame
pointer para sa lahat ng mga function, na maaaring magpahirap sa pag-debug.

-mspecld-anomalya
Kapag pinagana, titiyakin ng compiler na hindi naglalaman ang nabuong code
speculative load pagkatapos ng mga tagubilin sa pagtalon. Kung gagamitin ang opsyong ito,
Ang "__WORKAROUND_SPECULATIVE_LOADS" ay tinukoy.

-mno-specld-anomalya
Huwag bumuo ng dagdag na code para maiwasan ang mga speculative load na mangyari.

-mcsync-anomalya
Kapag pinagana, titiyakin ng compiler na ang nabuong code ay hindi naglalaman ng CSYNC
o mga tagubilin ng SSYNC sa lalong madaling panahon pagkatapos ng mga kondisyonal na sangay. Kung gagamitin ang opsyong ito,
Ang "__WORKAROUND_SPECULATIVE_SYNCS" ay tinukoy.

-mno-csync-anomalya
Huwag bumuo ng dagdag na code upang maiwasang mangyari din ang mga tagubilin ng CSYNC o SSYNC
sa lalong madaling panahon pagkatapos ng isang kondisyonal na sangay.

-mlow-64k
Kapag pinagana, ang compiler ay libre upang samantalahin ang kaalaman na ang kabuuan
Ang programa ay umaangkop sa mababang 64k ng memorya.

-mno-mababa-64k
Ipagpalagay na ang programa ay arbitraryong malaki. Ito ang default.

-mstack-check-l1
Gawin ang stack checking gamit ang impormasyong inilagay sa L1 scratchpad memory ng uClinux
kernel

-mid-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method. Ito ay nagpapahintulot
para isagawa sa lugar at nakabahaging mga aklatan sa isang kapaligiran na walang virtual memory
pamamahala. Ang pagpipiliang ito ay nagpapahiwatig -fPIC. Sa a bfin-elf target, ipinahihiwatig ng pagpipiliang ito
-msim.

-mno-id-shared-library
Bumuo ng code na hindi ipinapalagay na ginagamit ang mga nakabahaging aklatan batay sa ID. Ito ay
ang default.

-mleaf-id-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method, ngunit ipinapalagay
na ang library o executable na ito ay hindi magli-link laban sa anumang iba pang ID shared library.
Nagbibigay-daan iyon sa compiler na gumamit ng mas mabilis na code para sa mga jump at tawag.

-mno-leaf-id-shared-library
Huwag ipagpalagay na ang code na kino-compile ay hindi magli-link laban sa anumang ID shared library.
Ang mas mabagal na code ay bubuo para sa jump at call insns.

-mshared-library-id=n
Tinukoy ang numero ng pagkakakilanlan ng naka-compile na library na nakabatay sa ID.
Ang pagtukoy ng halaga ng 0 ay bubuo ng mas compact na code, na tumutukoy sa iba pang mga halaga
pilitin ang paglalaan ng numerong iyon sa kasalukuyang aklatan ngunit wala nang espasyo o
mas mahusay sa oras kaysa sa pagtanggal sa opsyong ito.

-msep-data
Bumuo ng code na nagbibigay-daan sa segment ng data na matatagpuan sa ibang lugar ng memorya
mula sa segment ng teksto. Ito ay nagbibigay-daan para sa execute sa lugar sa isang kapaligiran na walang
pamamahala ng virtual memory sa pamamagitan ng pag-aalis ng mga relokasyon laban sa seksyon ng teksto.

-mno-sep-data
Bumuo ng code na ipinapalagay na ang segment ng data ay sumusunod sa segment ng text. Ito ay
ang default.

-mlong-tawag
-mno-mahabang-tawag
Sinasabi sa compiler na magsagawa ng mga function call sa pamamagitan ng unang pag-load ng address ng
gumana sa isang rehistro at pagkatapos ay magsagawa ng subroutine na tawag sa rehistrong ito. Ito
kailangan ang switch kung ang target na function ay nasa labas ng 24-bit addressing range ng
ang offset-based na bersyon ng pagtuturo ng subroutine na tawag.

Ang tampok na ito ay hindi pinagana bilang default. Tinutukoy -mno-mahabang-tawag ay ibabalik ang
default na pag-uugali. Tandaan na ang mga switch na ito ay walang epekto sa kung paano bumubuo ang compiler
code upang mahawakan ang mga tawag sa function sa pamamagitan ng mga function pointer.

-mfast-fp
Link sa mabilis na floating-point library. Pinapapahinga ng library na ito ang ilan sa mga IEEE
mga panuntunan ng floating-point standard para sa pagsuri ng mga input laban sa Not-a-Number (NAN), sa
interes sa pagganap.

-minline-plt
I-enable ang inlining ng mga PLT entry sa mga function call sa mga function na hindi alam
magbigkis nang lokal. Wala itong epekto kung wala -mfdpic.

-mmulticore
Bumuo ng standalone na application para sa multicore Blackfin processor. Wastong pagsisimula ng mga file at
ang mga script ng link ay gagamitin upang suportahan ang multicore. Tinutukoy ng pagpipiliang ito
"__BFIN_MULTICORE". Maaari lamang itong gamitin sa -mcpu=bf561[-sirevision]. Maaari itong gamitin
sa -mcorea or -mcoreb. Kung ito ay ginagamit nang wala -mcorea or -mcoreb, Single
application/dual core programming model ang ginagamit. Sa modelong ito, ang pangunahing pag-andar ng
Ang Core B ay dapat na pinangalanan bilang coreb_main. Kung ito ay ginagamit sa -mcorea or -mcoreb, isa
application sa bawat pangunahing modelo ng programming ay ginagamit. Kung hindi ginagamit ang opsyong ito, single
ginagamit ang modelo ng pangunahing application programming.

-mcorea
Bumuo ng standalone na application para sa Core A ng BF561 kapag gumagamit ng isang application sa bawat core
modelo ng programming. Gagamitin ang mga wastong panimulang file at link script upang suportahan ang Core A.
Tinutukoy ng opsyong ito ang "__BFIN_COREA". Dapat itong gamitin kasama ng -mmulticore.

-mcoreb
Bumuo ng standalone na application para sa Core B ng BF561 kapag gumagamit ng isang application sa bawat core
modelo ng programming. Gagamitin ang mga wastong panimulang file at link script upang suportahan ang Core B.
Tinutukoy ng opsyong ito ang "__BFIN_COREB". Kapag ginamit ang opsyong ito, dapat ay ang coreb_main
ginamit sa halip na pangunahing. Dapat itong gamitin kasama ng -mmulticore.

-msdram
Bumuo ng standalone na application para sa SDRAM. Ang mga wastong panimulang file at mga script ng link ay magiging
ginamit upang ilagay ang application sa SDRAM. Dapat simulan ng loader ang SDRAM bago mag-load
ang application sa SDRAM. Tinutukoy ng opsyong ito ang "__BFIN_SDRAM".

-micplb
Ipagpalagay na ang mga ICPLB ay pinagana sa oras ng pagtakbo. Ito ay may epekto sa ilang anomalya
mga solusyon. Para sa mga target ng Linux, ang default ay ipagpalagay na ang mga ICPLB ay pinagana; para sa
mga standalone na application ang default ay naka-off.

C6X Options

-martsa=pangalan
Tinutukoy nito ang pangalan ng target na arkitektura. Ginagamit ng GCC ang pangalang ito para matukoy
kung anong uri ng mga tagubilin ang mailalabas nito kapag bumubuo ng assembly code. Pinahihintulutan
ang mga pangalan ay: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Bumuo ng code para sa isang malaking-endian na target.

-mlittle-endian
Bumuo ng code para sa isang maliit na-endian na target. Ito ang default.

-msim
Pumili ng mga startup file at linker script na angkop para sa simulator.

-msdata=default
Maglagay ng maliit na global at static na data sa .neardata seksyon, na itinuturo ng
irehistro ang "B14". Maglagay ng maliit na hindi nasimulang global at static na data sa .bss seksyon,
na katabi ng .neardata seksyon. Maglagay ng maliit na read-only na data sa .rodata
seksyon. Ang kaukulang mga seksyon na ginagamit para sa malalaking piraso ng data ay .fardata, .malayo
at .const.

-msdata=lahat
Ilagay ang lahat ng data, hindi lamang maliliit na bagay, sa mga seksyong nakalaan para sa maliliit na data, at
gumamit ng addressing na nauugnay sa rehistro ng "B14" upang ma-access ang mga ito.

-msdata=wala
Huwag gamitin ang mga seksyong nakalaan para sa maliit na data, at gumamit ng ganap na mga address sa
i-access ang lahat ng data. Ilagay ang lahat ng inisyal na global at static na data sa .fardata seksyon,
at lahat ng uninitialized data sa .malayo seksyon. Ilagay ang lahat ng pare-parehong data sa .const
seksyon.

CRIS Options

Ang mga opsyong ito ay partikular na tinukoy para sa mga CRIS port.

-martsa=uri ng arkitektura
-mcpu=uri ng arkitektura
Bumuo ng code para sa tinukoy na arkitektura. Ang mga pagpipilian para sa uri ng arkitektura ay
v3, v8 at v10 para sa ETRAX 4, ETRAX 100, at ETRAX 100 LX ayon sa pagkakabanggit. Default ay v0
maliban sa cris-axis-linux-gnu, kung saan ang default ay v10.

-mtune=uri ng arkitektura
Tune to uri ng arkitektura lahat ng naaangkop tungkol sa nabuong code, maliban sa
ang ABI at ang hanay ng mga magagamit na tagubilin. Ang mga pagpipilian para sa uri ng arkitektura ay
kapareho ng para sa -martsa=uri ng arkitektura.

-mmax-stack-frame=n
Magbabala kapag lumampas ang stack frame ng isang function n byte.

-metrax4
-metrax100
Ang mga pagpipilian -metrax4 at -metrax100 ay kasingkahulugan ng -martsa=v3 at -martsa=v8
ayon sa pagkakabanggit.

-mmul-bug-workaround
-mno-mul-bug-workaround
Trabaho sa isang bug sa "muls" at "mulu" na mga tagubilin para sa mga modelo ng CPU kung saan ito
nalalapat. Ang opsyon na ito ay aktibo bilang default.

-mpdebug
I-enable ang CRIS-specific na verbose debug-related na impormasyon sa assembly code. Ito
ang opsyon ay mayroon ding epekto upang i-off ang #NO_APP formatted-code indicator sa
assembler sa simula ng assembly file.

-mcc-init
Huwag gumamit ng mga resulta ng condition-code mula sa nakaraang pagtuturo; laging naglalabas ng kumpare at
mga tagubilin sa pagsubok bago gamitin ang mga code ng kondisyon.

-mno-side-effects
Huwag maglabas ng mga tagubilin na may side-effects sa mga mode ng pagtugon maliban sa post-
pagtaas.

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
Ang mga opsyon na ito (walang mga opsyon) ay nag-aayos (nag-aalis ng mga pagsasaayos) para sa stack-frame,
indibidwal na data at mga constant na ihahanay para sa maximum na solong laki ng access ng data
para sa napiling modelo ng CPU. Ang default ay upang ayusin ang 32-bit alignment. ABI
Ang mga detalye tulad ng layout ng istraktura ay hindi apektado ng mga opsyong ito.

-m32-bit
-m16-bit
-m8-bit
Katulad ng mga opsyon sa stack- data- at const-align sa itaas, inaayos ng mga opsyong ito
stack-frame, maisusulat na data at mga constant sa lahat ay 32-bit, 16-bit o 8-bit na nakahanay.
Ang default ay 32-bit alignment.

-mno-prologue-epilogue
-mprologue-epilogue
may -mno-prologue-epilogue, ang normal na function na prologue at epilogue na nag-set up
ang stack frame ay tinanggal at walang mga tagubilin sa pagbabalik o mga pagkakasunod-sunod ng pagbalik
nabuo sa code. Gamitin lamang ang opsyong ito kasama ng visual na inspeksyon ng
compiled code: walang babala o error na nabubuo kapag ang mga call-save na rehistro ay dapat
na-save, o imbakan para sa lokal na variable ay kailangang ilaan.

-mno-gotplt
-mgotplt
may -fpic at -fPIC, huwag bumuo (gumawa) ng mga sequence ng pagtuturo na naglo-load
mga address para sa mga function mula sa bahagi ng PLT ng GOT kaysa sa (tradisyonal sa iba
architectures) ay tumatawag sa PLT. Ang default ay -mgotplt.

- melf
Ang legacy na no-op na opsyon ay kinikilala lamang sa cris-axis-elf at cris-axis-linux-gnu
Mga target.

-mlinux
Ang legacy na no-op na opsyon ay kinikilala lamang gamit ang cris-axis-linux-gnu na target.

-sim
Ang opsyong ito, na kinikilala para sa cris-axis-elf ay nagsasaayos na mag-link sa input-output
mga function mula sa isang simulator library. Code, inisyal na data at zero-initialized na data
ay inilalaan nang magkakasunod.

-sim2
katulad -sim, ngunit ipasa ang mga opsyon sa linker upang mahanap ang inisyal na data sa 0x40000000 at zero-
inisyal na data sa 0x80000000.

CR16 Options

Ang mga opsyong ito ay partikular na tinukoy para sa mga CR16 port.

-mmac
Paganahin ang paggamit ng multiply-accumulate na mga tagubilin. Hindi pinagana bilang default.

-mcr16cplus
-mcr16c
Bumuo ng code para sa CR16C o CR16C+ na arkitektura. Ang arkitektura ng CR16C+ ay default.

-msim
Iniuugnay ang library libsim.a na katugma sa simulator. Applicable sa duwende
compiler lang.

-mint32
Pumili ng uri ng integer bilang 32-bit ang lapad.

-mbit-ops
Bumubuo ng sbit/cbit na mga tagubilin para sa mga bit manipulations.

-mdata-model=modelo
Pumili ng modelo ng data. Ang mga pagpipilian para sa modelo ay malapit, malayo or medium. medium ay default.
Gayunpaman, malayo ay hindi wasto kapag ang -mcr16c na opsyon ay pinili bilang CR16C architecture ay hindi
suportahan ang modelo ng malayong data.

Darwin Options

Ang mga opsyon na ito ay tinukoy para sa lahat ng mga arkitektura na tumatakbo sa Darwin operating system.

Ang FSF GCC sa Darwin ay hindi gumagawa ng "fat" object file; lilikha ito ng object file para sa
ang nag-iisang arkitektura na itinayo upang i-target. Lumilikha ang GCC ng Apple sa Darwin
"fat" na mga file kung marami -arko ginagamit ang mga pagpipilian; ginagawa ito sa pamamagitan ng pagpapatakbo ng compiler o
linker nang maraming beses at pinagsama ang mga resulta kasama ng lipo.

Ang subtype ng file na nilikha (tulad ng ppc7400 or ppc970 or i686) ay tinutukoy ng
mga flag na tumutukoy sa ISA na tina-target ng GCC, tulad ng -mcpu or -martsa. ang
-force_cpusubtype_ALL maaaring gamitin ang opsyon para i-override ito.

Ang mga tool ng Darwin ay nag-iiba sa kanilang pag-uugali kapag ipinakita sa isang hindi pagkakatugma ng ISA. Ang
assembler, as, ay papahintulutan lamang na gamitin ang mga tagubilin na wasto para sa subtype ng
ang file na binubuo nito, kaya hindi ka maaaring maglagay ng 64-bit na mga tagubilin sa a ppc750 file ng object
Ang linker para sa mga shared library, /usr/bin/libtool, ay mabibigo at magpi-print ng error kung tatanungin
upang lumikha ng isang shared library na may hindi gaanong mahigpit na subtype kaysa sa mga input file nito (para sa
halimbawa, sinusubukang ilagay ang isang ppc970 object file sa a ppc7400 aklatan). Ang linker para sa
mga executable, ld, ay tahimik na magbibigay sa executable ng pinaka mahigpit na subtype ng alinman sa
mga input file nito.

-Fdir
Idagdag ang direktoryo ng framework dir sa ulo ng listahan ng mga direktoryo na hahanapin
para sa mga file ng header. Ang mga direktoryo na ito ay pinagsama sa mga tinukoy ni -I
mga opsyon at ini-scan sa isang kaliwa-papuntang-kanang pagkakasunud-sunod.

Ang direktoryo ng balangkas ay isang direktoryo na may mga balangkas sa loob nito. Ang isang balangkas ay a
direktoryo na may a "Mga header" at / o "Mga Pribadong Header" Direktoryo na nakapaloob dito
na nagtatapos sa ".framework". Ang pangalan ng isang balangkas ay ang pangalan ng direktoryo na ito
hindi kasama ang ".framework". Ang mga header na nauugnay sa framework ay matatagpuan sa isa sa
ang dalawang direktoryo na iyon, kasama ang "Mga header" hinahanap muna. Ang isang subframework ay a
direktoryo ng framework na nasa isang balangkas "Mga Framework" direktoryo. Kasama sa
Ang mga subframework header ay maaari lamang lumabas sa isang header ng isang framework na naglalaman ng
subframework, o sa isang kapatid na subframework header. Dalawang subframework ay magkapatid kung
nangyayari ang mga ito sa parehong balangkas. Ang isang subframework ay hindi dapat magkaroon ng parehong pangalan bilang a
balangkas, isang babala ang ibibigay kung ito ay nilabag. Kasalukuyang isang subframework
hindi maaaring magkaroon ng mga subframework, sa hinaharap, ang mekanismo ay maaaring palawigin upang suportahan
ito. Ang karaniwang mga balangkas ay matatagpuan sa "/System/Library/Frameworks" at
"/Library/Frameworks". Ang isang halimbawang kasama ay mukhang "#include ",
saan Balangkas nagsasaad ng pangalan ng balangkas at header.h ay matatagpuan sa
"Mga Pribadong Header" or "Mga header" direktoryo.

-iframeworkdir
katulad -F maliban sa direktoryo ay itinuturing bilang isang direktoryo ng system. Ang pangunahing pagkakaiba
sa pagitan nito -iframework at -F kasama ba yan -iframework hindi nagbabala ang compiler
tungkol sa mga konstruksyon na nasa loob ng mga file ng header na natagpuan sa pamamagitan ng dir. Ang pagpipiliang ito ay may bisa
para lamang sa C pamilya ng mga wika.

-gused
Maglabas ng impormasyon sa pag-debug para sa mga simbolo na ginagamit. Para sa format ng pag-debug ng STABS,
ito ay nagbibigay-daan -felimate-unused-debug-symbols. Ito ay naka-on bilang default.

-busog
Maglabas ng impormasyon sa pag-debug para sa lahat ng mga simbolo at uri.

-mmacosx-version-min=bersyon
Ang pinakaunang bersyon ng MacOS X kung saan tatakbo ang executable na ito ay bersyon. Tipikal
mga halaga ng bersyon isama ang 10.1, 10.2, at 10.3.9.

Kung ang compiler ay binuo upang gamitin ang mga header ng system bilang default, ang default ay para sa
ang opsyong ito ay ang bersyon ng system kung saan tumatakbo ang compiler, kung hindi man ay ang
Ang default ay ang gumawa ng mga pagpipilian na katugma sa kasing dami ng mga system at code base
maaari.

-mkernel
Paganahin ang kernel development mode. Ang -mkernel mga hanay ng opsyon -static, -fno-karaniwan,
-fno-cxa-atexit, -fno-exceptions, -fno-non-call-exceptions, -fapple-kext, -fno-mahina
at -fno-rtti kung saan naaangkop. Nagtatakda din ang mode na ito -mno-altivec, -msoft-float,
-fno-buitin at -mlong-sanga para sa mga target ng PowerPC.

-mone-byte-bool
I-override ang mga default para sa bool nang sa gayon ay sizeof(bool)==1. Bilang default sizeof(bool) is 4
kapag nag-compile para sa Darwin/PowerPC at 1 kapag nag-compile para sa Darwin/x86, kaya ang pagpipiliang ito
walang epekto sa x86.

Babala: Ang -mone-byte-bool Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Maaaring kailanganin ang paggamit ng switch na ito
muling pagsasama-sama ng lahat ng iba pang mga module sa isang programa, kabilang ang mga library ng system. Gamitin mo to
lumipat upang umayon sa isang hindi default na modelo ng data.

-mfix-at-magpatuloy
-ffix-at-patuloy
-findirect-data
Bumuo ng code na angkop para sa mabilis na pag-unlad. Kailangan upang paganahin ang gdb sa
dynamic na naglo-load ng ".o" na mga file sa tumatakbo nang mga program. -findirect-data at
-ffix-at-patuloy ay ibinigay para sa pabalik na pagkakatugma.

-all_load
Nilo-load ang lahat ng miyembro ng static archive library. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-arch_errors_fatal
Dahilan ang mga error na nauugnay sa mga file na may maling arkitektura ay nakamamatay.

-bind_at_load
Nagiging dahilan upang mamarkahan ang output file na ang dynamic na linker ay magbubuklod sa lahat
hindi natukoy na mga sanggunian kapag ang file ay na-load o inilunsad.

-bundle
Gumawa ng Mach-o bundle na format na file. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-bundle_loader pinatutupad
Tinutukoy ng opsyong ito ang pinatutupad na maglo-load ng build output file being
naka-link. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-dynamiclib
Kapag naipasa ang opsyong ito, gagawa ang GCC ng isang dynamic na library sa halip na isang executable
kapag nagli-link, gamit ang Darwin libtool utos.

-force_cpusubtype_ALL
Nagiging sanhi ito ng output file ng GCC na magkaroon ng LAHAT subtype, sa halip na isang kinokontrol ng
ang -mcpu or -martsa pagpipilian.

-allowable_client Pangalan ng kliyente
-Pangalan ng kliyente
-compatibility_version
-kasalukuyang_bersyon
-dead_strip
-dependency-file
-dylib_file
-dylinker_install_name
-dynamic
-exported_symbols_list
-filelist
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-sa loob
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-noseglinkedit
-pagezero_size
-prebind
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-sectobjectsymbols
-bakit nagload
-seg1addr
-sectcreate
-sectobjectsymbols
-sektor
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-iisang_module
-static
-sub_library
-sub_umbrella
-twolevel_namespace
-payong
-hindi natukoy
-unexported_symbols_list
-weak_reference_mismatches
-whatsloaded
Ang mga opsyong ito ay ipinapasa sa Darwin linker. Ang Darwin linker man page ay naglalarawan
ang mga ito nang detalyado.

Disyembre Alpha Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng DEC Alpha:

-mno-malambot-float
-msoft-float
Gamitin (huwag gamitin) ang hardware floating-point na mga tagubilin para sa floating-point
mga operasyon. Kailan -msoft-float ay tinukoy, gumagana sa libgcc.a sanay na
magsagawa ng mga floating-point na operasyon. Maliban na lang kung mapapalitan sila ng mga nakagawiang ginagaya
ang floating-point operations, o pinagsama-sama sa paraang tinatawag ang mga naturang emulasyon
routine, ang mga routine na ito ay maglalabas ng mga floating-point operation. Kung nag-compile ka
para sa isang Alpha na walang floating-point operations, dapat mong tiyakin na ang library ay
binuo para hindi sila matawagan.

Tandaan na ang mga pagpapatupad ng Alpha na walang mga floating-point na operasyon ay kinakailangang magkaroon
floating-point na mga rehistro.

-mfp-reg
-mno-fp-regs
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na set ng rehistro. -mno-fp-regs
nagpapahiwatig -msoft-float. Kung hindi ginagamit ang floating-point register set, floating-point
Ang mga operand ay ipinapasa sa mga integer register na parang mga integer at floating-point
ang mga resulta ay ipinasa sa $0 sa halip na $f0. Ito ay isang hindi karaniwang pagkakasunud-sunod ng pagtawag, kaya
anumang function na may floating-point argument o return value na tinatawag ng code na pinagsama-sama
sa -mno-fp-regs dapat ding isama sa opsyong iyon.

Ang karaniwang paggamit ng opsyong ito ay ang pagbuo ng kernel na hindi gumagamit, at samakatuwid ay kailangan
hindi i-save at i-restore, anumang floating-point registers.

-meeee
Ang Alpha architecture ay nagpapatupad ng floating-point hardware na na-optimize para sa maximum
pagganap. Ito ay halos sumusunod sa IEEE floating-point standard. gayunpaman,
para sa ganap na pagsunod, kailangan ng tulong sa software. Ang pagpipiliang ito ay bumubuo ng code
ganap na IEEE-compliant code maliban na ang inexact-bandila ay hindi pinananatili (tingnan sa ibaba).
Kung naka-on ang opsyong ito, ang preprocessor macro na "_IEEE_FP" ay tinukoy habang
compilation. Ang resultang code ay hindi gaanong mahusay ngunit nakakasuporta ng tama
mga denormalized na numero at pambihirang halaga ng IEEE tulad ng hindi-isang-numero at plus/minus
kawalang-hanggan. Ang iba pang mga Alpha compiler ay tumatawag sa opsyong ito -ieee_with_no_inexact.

-meeee-with-inexact
Ito ay tulad ng -meeee maliban sa nabuong code ay nagpapanatili din ng IEEE inexact-bandila.
Ang pag-on sa opsyong ito ay nagiging sanhi ng nabuong code upang ipatupad ang ganap na sumusunod na IEEE
matematika. Bilang karagdagan sa "_IEEE_FP", ang "_IEEE_FP_EXACT" ay tinukoy bilang isang preprocessor macro.
Sa ilang pagpapatupad ng Alpha ang resultang code ay maaaring magsagawa ng mas mabagal kaysa sa
ang code na nabuo bilang default. Dahil mayroong napakakaunting code na nakasalalay sa
inexact-bandila, karaniwang hindi mo dapat tukuyin ang opsyong ito. Ang iba pang mga Alpha compiler ay tumatawag
ang pagpipiliang ito -ieee_with_inexact.

-mfp-trap-mode=trap-mode
Kinokontrol ng opsyong ito kung anong mga floating-point related traps ang pinagana. Iba pang Alpha
tinatawag ng mga compiler ang opsyong ito -fptm trap-mode. Ang trap mode ay maaaring itakda sa isa sa apat
mga halaga:

n Ito ang default (normal) na setting. Ang tanging mga bitag na pinagana ay ang
mga hindi maaaring hindi paganahin sa software (hal., paghahati sa zero trap).

u Bilang karagdagan sa mga bitag na pinagana ng n, pinagana rin ang mga underflow traps.

su katulad u, ngunit ang mga tagubilin ay minarkahan na ligtas para sa pagkumpleto ng software (tingnan
Alpha architecture manual para sa mga detalye).

sui katulad su, ngunit ang mga hindi tumpak na bitag ay pinagana rin.

-mfp-rounding-mode=rounding-mode
Pinipili ang IEEE rounding mode. Tinatawag ng ibang mga Alpha compiler ang opsyong ito -fprm
rounding-mode. ang rounding-mode maaaring isa sa:

n Normal na IEEE rounding mode. Ang mga floating-point na numero ay bilugan patungo sa pinakamalapit
numero ng makina o patungo sa pantay na numero ng makina kung sakaling magkatali.

m Bilog patungo sa minus infinity.

c Tinadtad na rounding mode. Ang mga floating-point na numero ay bilugan patungo sa zero.

d Dynamic na rounding mode. Isang field sa floating-point control register (fpcr, Tingnan ang
Alpha architecture reference manual) kinokontrol ang rounding mode na may bisa. Ang C
Sinisimulan ng library ang rehistrong ito para sa pag-ikot patungo sa plus infinity. kaya,
maliban kung binago ng iyong programa ang fpcr, d tumutugon sa pag-ikot patungo sa plus
kawalang-hanggan.

-mtrap-precision=bitag-katumpakan
Sa arkitektura ng Alpha, ang mga floating-point traps ay hindi tumpak. Ibig sabihin wala
tulong sa software imposibleng mabawi mula sa isang lumulutang na bitag at programa
karaniwang kailangang wakasan ang pagpapatupad. Maaaring bumuo ang GCC ng code na maaaring makatulong
operating system trap handler sa pagtukoy sa eksaktong lokasyon na nagdulot ng a
floating-point bitag. Depende sa mga kinakailangan ng isang aplikasyon, iba
Ang mga antas ng katumpakan ay maaaring mapili:

p Katumpakan ng programa. Ang opsyong ito ay ang default at nangangahulugan na ang isang trap handler ay maaari lamang
tukuyin kung aling programa ang nagdulot ng floating-point exception.

f Katumpakan ng pag-andar. Maaaring matukoy ng trap handler ang function na nagdulot ng a
floating-point exception.

i Katumpakan ng pagtuturo. Maaaring matukoy ng tagahawak ng bitag ang eksaktong pagtuturo na iyon
nagdulot ng floating-point exception.

Ang iba pang mga Alpha compiler ay nagbibigay ng katumbas na mga opsyon na tinatawag -scope_safe at
-resumption_safe.

-meeee-conformant
Minamarkahan ng opsyong ito ang nabuong code bilang IEEE conformant. Hindi mo dapat gamitin ang opsyong ito
maliban kung tinukoy mo rin -mtrap-precision=i at alinman -mfp-trap-mode=su or
-mfp-trap-mode=sui. Ang tanging epekto nito ay ang pagbuga ng linya .flag 48 sa function
prologue ng nabuong assembly file. Sa ilalim ng DEC Unix, ito ay may epekto na
Ang IEEE-conformant math library routines ay mali-link in.

-mbuild-constant
Karaniwang sinusuri ng GCC ang isang 32- o 64-bit na integer na pare-pareho upang makita kung maaari itong bumuo nito
mula sa mas maliliit na constants sa dalawa o tatlong mga tagubilin. Kung hindi nito, ilalabas nito ang
pare-pareho bilang literal at bumuo ng code upang mai-load ito mula sa segment ng data sa oras ng pagtakbo.

Gamitin ang opsyong ito para hingin ang GCC na bumuo lahat integer constants gamit ang code, kahit na
ito ay nangangailangan ng higit pang mga tagubilin (ang maximum ay anim).

Karaniwan mong gagamitin ang opsyong ito upang bumuo ng isang nakabahaging library dynamic loader. Mismo
isang shared library, dapat itong ilipat ang sarili sa memorya bago nito mahanap ang mga variable
at mga constant sa sarili nitong segment ng data.

-malpha-as
-mgas
Piliin kung bubuo ng code na ibubuo ng assembler na ibinigay ng vendor
(-malpha-as) o ng GNU assembler -mgas.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-ayusin
-mmax
-mno-max
Ipahiwatig kung ang GCC ay dapat bumuo ng code upang magamit ang opsyonal na BWX, CIX, FIX at MAX
set ng pagtuturo. Ang default ay gamitin ang mga set ng pagtuturo na sinusuportahan ng CPU
uri na tinukoy sa pamamagitan ng -mcpu= opsyon o ng CPU kung saan itinayo ang GCC kung wala
tinukoy.

-mfloat-vax
-mfloat-ieee
Bumuo ng code na gumagamit ng (hindi gumagamit) ng VAX F at G floating-point arithmetic sa halip
ng IEEE single at double precision.

-meexplicit-relocs
-mno-explicit-relocs
Ang mga mas lumang Alpha assembler ay hindi nagbigay ng paraan upang makabuo ng mga relokasyon ng simbolo maliban sa pamamagitan ng
assembler macros. Hindi pinapayagan ng paggamit ng mga macro na ito ang pinakamainam na pag-iiskedyul ng pagtuturo.
Ang mga binutil ng GNU sa bersyon 2.12 ay sumusuporta sa isang bagong syntax na nagpapahintulot sa compiler na
tahasang markahan kung aling mga relokasyon ang dapat ilapat sa kung aling mga tagubilin. Ang pagpipiliang ito ay
kadalasang kapaki-pakinabang para sa pag-debug, dahil nakikita ng GCC ang mga kakayahan ng assembler kapag ito
ay binuo at itinatakda ang default nang naaayon.

-msmall-data
-mlarge-data
Kailan -meexplicit-relocs ay may bisa, ang static na data ay ina-access sa pamamagitan ng gp-kamag-anak
mga relokasyon. Kailan -msmall-data ay ginagamit, inilalagay ang mga bagay na 8 bytes ang haba o mas maliit
a maliit data lugar (ang mga seksyong ".sdata" at ".sbss") at ina-access sa pamamagitan ng 16-bit
mga relokasyon mula sa rehistro ng $gp. Nililimitahan nito ang laki ng maliit na lugar ng data sa
64KB, ngunit pinapayagan ang mga variable na direktang ma-access sa pamamagitan ng isang pagtuturo.

Ang default ay -mlarge-data. Sa opsyong ito ang lugar ng data ay limitado sa ibaba lamang
2GB. Ang mga program na nangangailangan ng higit sa 2GB ng data ay dapat gumamit ng "malloc" o "mmap" sa
ilaan ang data sa heap sa halip na sa data segment ng program.

Kapag bumubuo ng code para sa mga shared library, -fpic nagpapahiwatig -msmall-data at -fPIC
nagpapahiwatig -mlarge-data.

-msmall-text
-mlarge-text
Kailan -msmall-text ay ginagamit, ipinapalagay ng compiler na ang code ng buong programa
(o nakabahaging aklatan) ay umaangkop sa 4MB, at sa gayon ay maaabot gamit ang pagtuturo ng sangay.
Kailan -msmall-data ay ginagamit, maaaring ipagpalagay ng compiler na ang lahat ng mga lokal na simbolo ay nagbabahagi ng
parehong halaga ng $gp, at sa gayon ay bawasan ang bilang ng mga tagubiling kinakailangan para sa isang function
tawag mula 4 hanggang 1.

Ang default ay -mlarge-text.

-mcpu=cpu_type
Itakda ang set ng pagtuturo at mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina
cpu_type. Maaari mong tukuyin ang alinman sa EV pangalan ng istilo o ang kaukulang numero ng chip.
Sinusuportahan ng GCC ang mga parameter ng pag-iiskedyul para sa EV4, EV5 at EV6 na pamilya ng mga processor at
pipiliin ang mga default na halaga para sa set ng pagtuturo mula sa processor na iyong tinukoy.
Kung hindi ka tumukoy ng uri ng processor, magde-default ang GCC sa processor kung saan ang
compiler ay binuo.

Mga sinusuportahang halaga para sa cpu_type ay

ev4
ev45
21064
Nag-iskedyul bilang isang EV4 at walang mga extension ng set ng pagtuturo.

ev5
21164
Nag-iskedyul bilang isang EV5 at walang mga extension ng set ng pagtuturo.

ev56
21164a
Nag-iskedyul bilang EV5 at sinusuportahan ang extension ng BWX.

pca56
21164pc
21164PC
Nag-iskedyul bilang isang EV5 at sumusuporta sa BWX at MAX extension.

ev6
21264
Nag-iskedyul bilang EV6 at sinusuportahan ang BWX, FIX, at MAX na mga extension.

ev67
21264a
Nag-iskedyul bilang isang EV6 at sinusuportahan ang mga extension ng BWX, CIX, FIX, at MAX.

Sinusuportahan din ng mga native na toolchain ang halaga katutubo, na pumipili ng pinakamahusay na arkitektura
opsyon para sa host processor. -mcpu=katutubo walang epekto kung hindi makilala ng GCC
ang processor.

-mtune=cpu_type
Itakda lamang ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type. ang
ang set ng pagtuturo ay hindi nababago.

Sinusuportahan din ng mga native na toolchain ang halaga katutubo, na pumipili ng pinakamahusay na arkitektura
opsyon para sa host processor. -mtune=katutubo walang epekto kung hindi makilala ng GCC
ang processor.

-mmemory-latency=oras
Itinatakda ang latency na dapat ipagpalagay ng scheduler para sa mga tipikal na memory reference tulad ng nakikita ni
ang aplikasyon. Ang numerong ito ay lubos na nakadepende sa mga pattern ng pag-access ng memory na ginamit
sa pamamagitan ng application at ang laki ng panlabas na cache sa makina.

Mga wastong opsyon para sa oras ay

numero
Isang decimal na numero na kumakatawan sa mga cycle ng orasan.

L1
L2
L3
pangunahin
Naglalaman ang compiler ng mga pagtatantya ng bilang ng mga cycle ng orasan para sa "karaniwang" EV4 at
EV5 hardware para sa Level 1, 2 at 3 na mga cache (tinatawag ding Dcache, Scache, at
Bcache), pati na rin sa pangunahing memorya. Tandaan na ang L3 ay valid lamang para sa EV5.

Disyembre Alpha/VMS Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng DEC Alpha/VMS:

-mvms-return-codes
Ibalik ang mga code ng kondisyon ng VMS mula sa pangunahing. Ang default ay ibalik ang POSIX style condition
(hal. error) mga code.

-mdebug-main=unlapi
I-flag ang unang gawain na ang pangalan ay nagsisimula sa unlapi bilang pangunahing gawain para sa
i-debug.

-mmalloc64
Default sa 64-bit memory allocation routines.

FR30 Options

Ang mga opsyong ito ay partikular na tinukoy para sa FR30 port.

-msmall-modelo
Gamitin ang modelo ng maliit na address space. Maaari itong makagawa ng mas maliit na code, ngunit ipinapalagay nito
na lahat ng simbolikong halaga at address ay magkakasya sa isang 20-bit na hanay.

-mno-lsim
Ipagpalagay na ang suporta sa runtime ay ibinigay at kaya hindi na kailangang isama ang
simulator library (libsim.a) sa linker command line.

FRV Options

-mgpr-32
Gamitin lamang ang unang 32 pangkalahatang layunin na rehistro.

-mgpr-64
Gamitin ang lahat ng 64 na pangkalahatang layunin na rehistro.

-mfpr-32
Gamitin lamang ang unang 32 floating-point na rehistro.

-mfpr-64
Gamitin ang lahat ng 64 floating-point registers.

-mhard-float
Gumamit ng mga tagubilin sa hardware para sa mga pagpapatakbo ng floating-point.

-msoft-float
Gumamit ng mga gawain sa library para sa mga pagpapatakbo ng floating-point.

-malloc-cc
Dynamic na maglaan ng mga rehistro ng code ng kundisyon.

-mfixed-cc
Huwag subukang dynamic na maglaan ng mga rehistro ng code ng kondisyon, gamitin lamang ang "icc0" at
"fcc0".

-mdword
Baguhin ang ABI para gumamit ng double word insns.

-mno-dword
Huwag gumamit ng dobleng salita na mga tagubilin.

-mdoble
Gumamit ng floating-point double instructions.

-mno-doble
Huwag gumamit ng floating-point double instructions.

-mmedia
Gumamit ng mga tagubilin sa media.

-mno-media
Huwag gumamit ng mga tagubilin sa media.

-mmuladd
Gamitin ang multiply at magdagdag/magbawas ng mga tagubilin.

-mno-muladd
Huwag gumamit ng multiply at add/subtract instructions.

-mfdpic
Piliin ang FDPIC ABI, na gumagamit ng mga function descriptor upang kumatawan sa mga pointer
mga function. Nang walang anumang mga opsyon na nauugnay sa PIC/PIE, ito ay nagpapahiwatig -fPIE. May -fpic or
-fpie, ipinapalagay nito na ang mga entry ng GOT at maliit na data ay nasa loob ng 12-bit na hanay mula sa GOT
base address; kasama -fPIC or -fPIE, ang mga GOT offset ay kinukuwenta gamit ang 32 bits. Na may a
bfin-elf target, ipinahihiwatig ng pagpipiliang ito -msim.

-minline-plt
I-enable ang inlining ng mga PLT entry sa mga function call sa mga function na hindi alam
magbigkis nang lokal. Wala itong epekto kung wala -mfdpic. Ito ay pinagana bilang default kung
pag-optimize para sa bilis at pag-compile para sa mga shared library (ibig sabihin, -fPIC or -fpic), o
kapag ang isang opsyon sa pag-optimize tulad ng -O3 o sa itaas ay naroroon sa command line.

-mTLS
Ipagpalagay ang isang malaking segment ng TLS kapag bumubuo ng thread-local code.

-mtls
Huwag ipagpalagay ang isang malaking segment ng TLS kapag bumubuo ng thread-local code.

-mgprel-ro
Paganahin ang paggamit ng "GPREL" na mga relokasyon sa FDPIC ABI para sa data na alam na nasa
read-only na mga seksyon. Ito ay pinagana bilang default, maliban sa -fpic or -fpie: kahit na
maaari itong makatulong na gawing mas maliit ang global offset table, ipinagpalit nito ang 1 pagtuturo para sa 4. Sa
-fPIC or -fPIE, nakikipagkalakalan ito ng 3 tagubilin para sa 4, ang isa ay maaaring ibahagi ng maramihan
mga simbolo, at iniiwasan nito ang pangangailangan para sa isang GOT na entry para sa reference na simbolo, kaya ito ay
mas malamang na manalo. Kung hindi, -mno-gprel-ro maaaring gamitin upang hindi paganahin ito.

-multilib-library-pic
Mag-link sa (library, hindi FD) pic library. Ito ay ipinahiwatig ng -mlibrary-pic, din
tulad ng -fPIC at -fpic wala -mfdpic. Hindi mo dapat kailangang gamitin ito nang tahasan.

-mlinked-fp
Sundin ang kinakailangan ng EABI na palaging gumawa ng frame pointer sa tuwing may stack frame
ay inilalaan. Ang pagpipiliang ito ay pinagana bilang default at maaaring hindi paganahin sa
-mno-linked-fp.

-mlong-tawag
Gumamit ng indirect addressing para tawagan ang mga function sa labas ng kasalukuyang compilation unit. Ito
nagbibigay-daan sa mga function na mailagay kahit saan sa loob ng 32-bit address space.

-malign-label
Subukang ihanay ang mga label sa isang 8-byte na hangganan sa pamamagitan ng pagpasok ng mga nops sa nakaraang packet.
May epekto lang ang opsyong ito kapag naka-enable ang VLIW packing. Hindi ito lumilikha ng bago
mga pakete; ito ay nagdaragdag lamang ng mga nops sa mga umiiral na.

-mlibrary-pic
Bumuo ng code ng EABI na independyente sa posisyon.

-macc-4
Gamitin lamang ang unang apat na media accumulator register.

-macc-8
Gamitin ang lahat ng walong media accumulator register.

-pack
I-pack ang mga tagubilin sa VLIW.

-mno-pack
Huwag mag-pack ng mga tagubilin sa VLIW.

-mno-flag
Huwag markahan ang mga switch ng ABI sa mga e_flag.

-mcond-move
I-enable ang paggamit ng conditional-move instructions (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-cond-move
I-disable ang paggamit ng conditional-move instructions.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mscc
I-enable ang paggamit ng conditional set instructions (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-scc
I-disable ang paggamit ng conditional set instructions.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mcond-exec
I-enable ang paggamit ng conditional execution (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-cond-exec
I-disable ang paggamit ng conditional execution.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mvliw-branch
Magpatakbo ng pass para mag-pack ng mga branch sa mga tagubilin ng VLIW (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-vliw-branch
Huwag magpatakbo ng pass para mag-pack ng mga branch sa mga tagubilin ng VLIW.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mmulti-cond-exec
Paganahin ang pag-optimize ng "&&" at "||" sa kondisyon na pagpapatupad (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-multi-cond-exec
Huwag paganahin ang pag-optimize ng "&&" at "||" sa conditional execution.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mnested-cond-exec
I-enable ang nested conditional execution optimizations (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-nested-cond-exec
I-disable ang nested conditional execution optimizations.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-moptimize-membar
Ang switch na ito ay nag-aalis ng mga paulit-ulit na "membar" na mga tagubilin mula sa compiler na nabuong code.
Pinapagana ito sa pamamagitan ng default.

-mno-optimize-membar
Hindi pinapagana ng switch na ito ang awtomatikong pag-alis ng mga paulit-ulit na "membar" na mga tagubilin mula sa
nabuong code.

-mtomcat-stats
Maging sanhi ng pag-print ng gas ng mga istatistika ng tomcat.

-mcpu=CPU
Piliin ang uri ng processor kung saan bubuo ng code. Ang mga posibleng halaga ay frv, fr550,
pusang lalaki, fr500, fr450, fr405, fr400, fr300 at simple.

GNU / Linux Options

mga ito -m ang mga opsyon ay tinukoy para sa mga target ng GNU/Linux:

-mglibc
Gamitin ang GNU C library. Ito ang default maliban sa *-*-linux-*uclibc* at
*-*-linux-*android* Mga target.

-muclibc
Gumamit ng uClibc C library. Ito ang default na naka-on *-*-linux-*uclibc* Mga target.

-mbionic
Gumamit ng Bionic C library. Ito ang default na naka-on *-*-linux-*android* Mga target.

-android
Compile code compatible sa Android platform. Ito ang default na naka-on
*-*-linux-*android* Mga target.

Kapag nag-compile, pinapagana ang opsyong ito -mbionic, -fPIC, -fno-exceptions at -fno-rtti by
default. Kapag nagli-link, pinapasa ng opsyong ito ang driver ng GCC na pumasa sa mga opsyong partikular sa Android
sa linker. Sa wakas, ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__ANDROID__".
tinukoy.

-tno-android-cc
Huwag paganahin ang mga epekto ng compilation ng -android, ibig sabihin, huwag paganahin -mbionic, -fPIC,
-fno-exceptions at -fno-rtti bilang default.

-tno-android-ld
Huwag paganahin ang pag-link ng mga epekto ng -android, ibig sabihin, ipasa ang karaniwang mga opsyon sa pagli-link ng Linux sa
linker

H8 / 300 Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng H8/300:

-magpahinga
Paikliin ang ilang mga sanggunian sa address sa oras ng pag-link, kapag posible; gumagamit ng opsyon sa linker
-magpahinga.

-mh Bumuo ng code para sa H8/300H.

-MS Bumuo ng code para sa H8S.

-mn Bumuo ng code para sa H8S at H8/300H sa normal na mode. Dapat gamitin ang switch na ito
alinman sa -mh or -MS.

-ms2600
Bumuo ng code para sa H8S/2600. Dapat gamitin ang switch na ito kasama ng -MS.

-mint32
Gawing 32 bits ang data ng "int" bilang default.

-malign-300
Sa H8/300H at H8S, gamitin ang parehong mga panuntunan sa pag-align gaya ng para sa H8/300. Ang default
para sa H8/300H at H8S ay upang ihanay ang mga longs at floats sa 4-byte na mga hangganan.
-malign-300 nagiging sanhi ng pagkakahanay sa kanila sa 2-byte na mga hangganan. Walang epekto ang opsyong ito
sa H8/300.

HPPA Options

mga ito -m ang mga opsyon ay tinukoy para sa pamilya ng HPPA ng mga computer:

-martsa=uri ng arkitektura
Bumuo ng code para sa tinukoy na arkitektura. Ang mga pagpipilian para sa uri ng arkitektura ay
1.0 para sa PA 1.0, 1.1 para sa PA 1.1, at 2.0 para sa mga processor ng PA 2.0. Sumangguni sa
/usr/lib/sched.models sa isang HP-UX system upang matukoy ang tamang opsyon sa arkitektura
para sa iyong makina. Ang code na pinagsama-sama para sa mas mababang bilang na mga arkitektura ay tatakbo sa mas mataas
may bilang na mga arkitektura, ngunit hindi sa kabaligtaran.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Mga kasingkahulugan para sa -martsa=1.0, -martsa=1.1, at -martsa=2.0 ayon sa pagkakabanggit.

-big-switch
Bumuo ng code na angkop para sa malalaking switch table. Gamitin lamang ang opsyong ito kung ang
nagrereklamo ang assembler/linker tungkol sa mga sanga na wala sa hanay sa loob ng switch table.

-mjump-in-delay
Punan ang mga puwang ng pagkaantala ng mga function na tawag ng walang kondisyong mga tagubilin sa pagtalon sa pamamagitan ng pagbabago
ang return pointer para sa function call upang maging target ng conditional jump.

-mdisable-fpregs
Pigilan ang mga floating-point na rehistro mula sa paggamit sa anumang paraan. Ito ay kinakailangan para sa
pag-compile ng mga kernel na nagsasagawa ng tamad na paglipat ng konteksto ng mga floating-point register. Kung
gagamitin mo ang opsyong ito at subukang magsagawa ng mga floating-point operations, ang compiler
nagpapalaglag.

-i-disable-indexing
Pigilan ang compiler mula sa paggamit ng mga mode ng pag-index ng address. Ito ay umiiwas sa ilan sa halip
mga problema kapag kino-compile ang MIG na nabuong code sa ilalim ng MACH.

-mno-space-regs
Bumuo ng code na ipinapalagay na ang target ay walang mga rehistro ng espasyo. Nagbibigay-daan ito sa GCC na
makabuo ng mas mabilis na hindi direktang mga tawag at gumamit ng mga hindi naka-scale na index address mode.

Ang ganitong code ay angkop para sa antas 0 na mga sistema ng PA at mga kernel.

-mfast-indirect-calls
Bumuo ng code na ipinapalagay na ang mga tawag ay hindi tumatawid sa mga hangganan ng espasyo. Nagbibigay-daan ito sa GCC na
naglalabas ng code na gumaganap ng mas mabilis na mga hindi direktang tawag.

Hindi gagana ang opsyong ito sa pagkakaroon ng mga shared library o nested function.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mlong-load-store
Bumuo ng 3-pagtuturo na pag-load at mga pagkakasunud-sunod ng tindahan kung minsan ay kinakailangan ng HP-UX 10
linker. Ito ay katumbas ng +k opsyon sa mga HP compiler.

-mportable-runtime
Gamitin ang portable calling convention na iminungkahi ng HP para sa ELF system.

-mgas
Paganahin ang paggamit ng mga direktiba ng assembler na ang GAS lang ang nakakaintindi.

-mschedule=uri ng cpu
Iskedyul ang code ayon sa mga hadlang para sa uri ng makina uri ng cpu. Ang mga pagpipilian
para uri ng cpu ay 700 7100, 7100LC, 7200, 7300 at 8000. Sumangguni sa
/usr/lib/sched.models sa isang HP-UX system upang matukoy ang tamang opsyon sa pag-iiskedyul para sa
iyong makina. Ang default na pag-iiskedyul ay 8000.

-mlinker-opt
I-enable ang optimization pass sa HP-UX linker. Tandaan na ito ay gumagawa ng simbolikong pag-debug
imposible. Nagti-trigger din ito ng bug sa mga linker ng HP-UX 8 at HP-UX 9 kung saan sila
magbigay ng mga pekeng mensahe ng error kapag nagli-link ng ilang mga programa.

-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point. Babala: ang kailangan
Ang mga aklatan ay hindi magagamit para sa lahat ng mga target ng HPPA. Karaniwan ang mga pasilidad ng
ginagamit ang karaniwang C compiler ng machine, ngunit hindi ito maaaring gawin nang direkta sa cross-
compilation. Dapat kang gumawa ng iyong sariling mga pagsasaayos upang magbigay ng angkop na aklatan
mga function para sa cross-compilation.

-msoft-float binabago ang calling convention sa output file; samakatuwid, ito ay lamang
kapaki-pakinabang kung mag-compile ka lahat ng isang programa na may ganitong opsyon. Sa partikular, kailangan mo
sumulat ng libro libgcc.a, ang library na kasama ng GCC, na may -msoft-float para dito
upang gumana.

-msio
Bumuo ng predefine, "_SIO", para sa server IO. Ang default ay -mwsio. Ito ay bumubuo
ang mga predefine, "__hp9000s700", "__hp9000s700__" at "_WSIO", para sa workstation IO.
Available ang mga opsyong ito sa ilalim ng HP-UX at HI-UX.

-mgnu-ld
Gumamit ng mga partikular na opsyon sa GNU. Ito ay pumasa -ibinahagi sa ld kapag gumagawa ng shared
aklatan. Ito ang default kapag ang GCC ay na-configure, tahasan o hindi, kasama ang
GNU linker. Ang opsyon na ito ay walang anumang epekto kung saan ang ld ay tinatawag, ito lamang
nagbabago kung anong mga parameter ang ipinasa sa ld na iyon. Ang ld na tinatawag ay tinutukoy ng
ang --may-ld opsyon sa pag-configure, landas sa paghahanap ng programa ng GCC, at sa wakas ay sa pamamagitan ng user
PATH. Ang linker na ginamit ng GCC ay maaaring i-print gamit alin `gcc -print-prog-name=ld`.
Available lang ang opsyong ito sa 64-bit na HP-UX GCC, ibig sabihin, naka-configure sa
hppa*64*-*-hpux*.

-mhp-ld
Gumamit ng mga partikular na opsyon sa HP. Ito ay pumasa -b to ld kapag gumagawa ng shared library at
pass +Tanggapin TypeMismatch sa ld sa lahat ng mga link. Ito ang default kapag ang GCC ay
na-configure, tahasan o hindi malinaw, gamit ang HP linker. Ang pagpipiliang ito ay wala
anumang epekto kung saan tinatawag ang ld, binabago lamang nito kung anong mga parameter ang ipinasa doon
ld. Ang ld na tinatawag ay tinutukoy ng --may-ld i-configure ang opsyon, GCC's
landas sa paghahanap ng programa, at sa wakas ay sa pamamagitan ng gumagamit PATH. Ang linker na ginagamit ng GCC ay maaaring
nakalimbag gamit ang alin `gcc -print-prog-name=ld`. Ang pagpipiliang ito ay magagamit lamang sa
64-bit HP-UX GCC, ibig sabihin, naka-configure sa hppa*64*-*-hpux*.

-mlong-tawag
Bumuo ng code na gumagamit ng mahabang pagkakasunud-sunod ng tawag. Tinitiyak nito na ang isang tawag ay palaging magagawa
para maabot ang linker na nabuong stubs. Ang default ay upang bumuo ng mahahabang tawag lamang kapag ang
distansya mula sa site ng tawag hanggang sa simula ng function o unit ng pagsasalin, bilang
ang kaso ay maaaring, lumampas sa isang paunang natukoy na limitasyon na itinakda ng uri ng sangay na ginagamit. Ang
ang mga limitasyon para sa mga normal na tawag ay 7,600,000 at 240,000 bytes, ayon sa pagkakabanggit para sa PA 2.0
at mga arkitektura ng PA 1.X. Palaging limitado ang mga Sibcall sa 240,000 bytes.

Ang mga distansya ay sinusukat mula sa simula ng mga function kapag ginagamit ang
-ffunction-seksyon opsyon, o kapag ginagamit ang -mgas at -mno-portable-runtime pagpipilian
magkasama sa ilalim ng HP-UX kasama ang SOM linker.

Karaniwang hindi kanais-nais na gamitin ang opsyong ito dahil ito ay magpapababa sa pagganap.
Gayunpaman, maaari itong maging kapaki-pakinabang sa malalaking application, lalo na kapag ang bahagyang pag-link ay
ginamit sa pagbuo ng application.

Ang mga uri ng mahabang tawag na ginamit ay depende sa mga kakayahan ng assembler at linker,
at ang uri ng code na nabuo. Ang epekto sa mga system na sumusuporta sa matagal
absolute calls, at mahabang pic na simbolo-difference o pc-relative na tawag dapat
medyo maliit. Gayunpaman, ang isang hindi direktang tawag ay ginagamit sa mga 32-bit na ELF system sa pic code
at medyo mahaba.

-munix=unix-std
Bumuo ng mga predefine ng compiler at pumili ng isang startfile para sa tinukoy na pamantayan ng UNIX.
Ang mga pagpipilian para sa unix-std ay 93, 95 at 98. 93 ay suportado sa lahat ng bersyon ng HP-UX.
95 ay available sa HP-UX 10.10 at mas bago. 98 ay available sa HP-UX 11.11 at mas bago.
Ang mga default na halaga ay 93 para sa HP-UX 10.00, 95 para sa HP-UX 10.10 kahit hanggang 11.00, at 98
para sa HP-UX 11.11 at mas bago.

-munix=93 nagbibigay ng parehong predefine gaya ng GCC 3.3 at 3.4. -munix=95 nagbibigay ng
karagdagang predefine para sa "XOPEN_UNIX" at "_XOPEN_SOURCE_EXTENDED", at ang startfile
unix95.o. -munix=98 nagbibigay ng mga karagdagang predefine para sa "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" at "_INCLUDE_XOPEN_SOURCE_500",
at ang startfile unix98.o.

Ito ay mahalaga para tandaan na binabago ng opsyong ito ang mga interface para sa iba't ibang library
mga gawain. Nakakaapekto rin ito sa pag-uugali ng pagpapatakbo ng C library. kaya, sukdulan
kailangan ang pag-iingat sa paggamit ng opsyong ito.

Ang code ng library na nilalayong gumana nang may higit sa isang pamantayan ng UNIX ay dapat subukan,
itakda at ibalik ang variable __xpg4_extended_mask ayon sa nararapat. Karamihan sa software ng GNU
ay hindi nagbibigay ng kakayahang ito.

-nolibdld
Pigilan ang pagbuo ng mga opsyon sa link upang maghanap sa libdld.sl kapag ang -static Ang opsyon ay
tinukoy sa HP-UX 10 at mas bago.

-static
Ang pagpapatupad ng HP-UX ng setlocale sa libc ay may dependency sa libdld.sl. doon
ay hindi isang archive na bersyon ng libdld.sl. Kaya, kapag ang -static ang pagpipilian ay tinukoy,
kailangan ang mga espesyal na opsyon sa link upang malutas ang dependency na ito.

Sa HP-UX 10 at mas bago, idinaragdag ng GCC driver ang mga kinakailangang opsyon upang maiugnay
libdld.sl kapag ang -static ang pagpipilian ay tinukoy. Ito ay nagiging sanhi ng nagresultang binary sa
maging dynamic. Sa 64-bit port, ang mga linker ay bumubuo ng mga dynamic na binary bilang default sa
anumang kaso. Ang -nolibdld maaaring gamitin ang opsyon para pigilan ang GCC driver na magdagdag
mga opsyon sa link na ito.

- mga thread
Magdagdag ng suporta para sa multithreading gamit ang dce sinulid library sa ilalim ng HP-UX. Ang pagpipiliang ito
nagtatakda ng mga flag para sa parehong preprocessor at linker.

Intel 386 at AMD x86-64 Options

mga ito -m ang mga opsyon ay tinukoy para sa i386 at x86-64 na pamilya ng mga computer:

-mtune=uri ng cpu
Tune to uri ng cpu lahat ng naaangkop tungkol sa nabuong code, maliban sa ABI
at ang hanay ng mga magagamit na tagubilin. Ang mga pagpipilian para sa uri ng cpu ay:

panlahat
Gumawa ng code na na-optimize para sa pinakakaraniwang mga processor ng IA32/AMD64/EM64T. kung ikaw
alamin ang CPU kung saan tatakbo ang iyong code, pagkatapos ay dapat mong gamitin ang kaukulang
-mtune opsyon sa halip na -mtune=generic. Ngunit, kung hindi mo alam kung ano mismo ang CPU
ang mga gumagamit ng iyong application ay magkakaroon, pagkatapos ay dapat mong gamitin ang pagpipiliang ito.

Habang naka-deploy ang mga bagong processor sa marketplace, ang pag-uugali ng opsyong ito
magbabago. Samakatuwid, kung mag-upgrade ka sa isang mas bagong bersyon ng GCC, ang code
ang nabuong opsyon ay magbabago upang ipakita ang mga processor na pinakakaraniwan noong
ang bersyon na iyon ng GCC ay inilabas.

Walang -march=generic option kasi -martsa nagsasaad ng pagtuturo itakda ang
maaaring gamitin ng compiler, at walang generic na set ng pagtuturo na naaangkop sa lahat
mga processor. Sa kaibahan, -mtune ay nagpapahiwatig ng processor (o, sa kasong ito,
koleksyon ng mga processor) kung saan na-optimize ang code.

katutubo
Pinipili nito ang CPU na tune-tune para sa oras ng compilation sa pamamagitan ng pagtukoy sa processor
uri ng compiling machine. Gamit -mtune=katutubo gagawa ng code na na-optimize
para sa lokal na makina sa ilalim ng mga limitasyon ng napiling set ng pagtuturo.
paggamit -martsa=katutubo papaganahin ang lahat ng mga subset ng pagtuturo na sinusuportahan ng lokal
machine (samakatuwid ang resulta ay maaaring hindi tumakbo sa iba't ibang mga makina).

i386
Orihinal na i386 CPU ng Intel.

i486
Ang i486 CPU ng Intel. (Walang ipinapatupad na pag-iskedyul para sa chip na ito.)

i586 pentium
Intel Pentium CPU na walang suporta sa MMX.

pentium-mmx
Intel PentiumMMX CPU batay sa Pentium core na may suporta sa set ng pagtuturo ng MMX.

pentiumpro
Intel PentiumPro CPU.

i686
Pareho sa "generic", ngunit kapag ginamit bilang "martsa" na opsyon, PentiumPro set ng pagtuturo
gagamitin, kaya tatakbo ang code sa lahat ng i686 family chips.

Pentium 2
Intel Pentium2 CPU batay sa PentiumPro core na may suporta sa set ng pagtuturo ng MMX.

pentium3, pentium3m
Intel Pentium3 CPU batay sa PentiumPro core na may set ng pagtuturo ng MMX at SSE
support.

pentium-m
Mababang kapangyarihan na bersyon ng Intel Pentium3 CPU na may set ng pagtuturo ng MMX, SSE at SSE2
suporta. Ginamit ng mga notebook ng Centrino.

pentium4, pentium4m
Intel Pentium4 CPU na may suporta sa set ng pagtuturo ng MMX, SSE at SSE2.

Prescott
Pinahusay na bersyon ng Intel Pentium4 CPU na may pagtuturo ng MMX, SSE, SSE2 at SSE3
itakda ang suporta.

nocona
Pinahusay na bersyon ng Intel Pentium4 CPU na may 64-bit extension, MMX, SSE, SSE2 at
Suporta sa set ng pagtuturo ng SSE3.

core2
Intel Core2 CPU na may 64-bit na mga extension, MMX, SSE, SSE2, SSE3 at SSSE3 na pagtuturo
itakda ang suporta.

corei7
Intel Core i7 CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 at
Suporta sa set ng pagtuturo ng SSE4.2.

corei7-avx
Intel Core i7 CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Suporta sa set ng pagtuturo ng SSE4.2, AVX, AES at PCLMUL.

core-avx-i
Intel Core CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND at F16C na suporta sa set ng pagtuturo.

atomo
Intel Atom CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3 at SSSE3 na pagtuturo
itakda ang suporta.

k6 AMD K6 CPU na may suporta sa set ng pagtuturo ng MMX.

k6-2, k6-3
Mga pinahusay na bersyon ng AMD K6 CPU na may MMX at 3DNow! suporta sa set ng pagtuturo.

atleta, athlon-tbird
AMD Athlon CPU na may MMX, 3dNOW!, pinahusay na 3DNow! at mga tagubilin sa prefetch ng SSE
support.

athlon-4, athlon-xp, athlon-mp
Pinahusay na AMD Athlon CPU na may MMX, 3DNow!, pinahusay na 3DNow! at buong pagtuturo ng SSE
itakda ang suporta.

k8, opteron, athlon64, athlon-fx
AMD K8 core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Itong supersets MMX,
SSE, SSE2, 3DNow!, pinahusay na 3DNow! at 64-bit na mga extension ng set ng pagtuturo.)

k8-sse3, opteron-sse3, athlon64-sse3
Mga pinahusay na bersyon ng k8, opteron at athlon64 na may suporta sa set ng pagtuturo ng SSE3.

amdfam10, Barcelona
AMD Family 10h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, pinahusay na 3DNow!, ABM at 64-bit
mga extension ng set ng pagtuturo.)

bdver1
AMD Family 15h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
mga superset na FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM at 64-bit na mga extension ng set ng pagtuturo.)

bdver2
AMD Family 15h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM at 64-bit na mga extension ng set ng pagtuturo.)

btver1
AMD Family 14h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
mga superset na MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM at 64-bit na set ng pagtuturo
mga extension.)

winchip-c6
Ang IDT Winchip C6 na CPU, ay hinarap sa parehong paraan tulad ng i486 na may karagdagang set ng pagtuturo ng MMX
support.

winchip2
Ang IDT Winchip2 na CPU, hinarap sa parehong paraan tulad ng i486 na may karagdagang MMX at 3DNow!
suporta sa set ng pagtuturo.

c3 Sa pamamagitan ng C3 CPU na may MMX at 3DNow! suporta sa set ng pagtuturo. (Walang pag-iskedyul
ipinatupad para sa chip na ito.)

c3-2
Sa pamamagitan ng C3-2 CPU na may suporta sa set ng pagtuturo ng MMX at SSE. (Walang pag-iskedyul
ipinatupad para sa chip na ito.)

geode
Naka-embed na AMD CPU na may MMX at 3DNow! suporta sa set ng pagtuturo.

Habang pumipili ng isang tiyak uri ng cpu ay mag-iskedyul ng mga bagay nang naaangkop para doon
partikular na chip, ang compiler ay hindi bubuo ng anumang code na hindi tumatakbo sa
default na uri ng makina nang walang -martsa=uri ng cpu opsyon na ginagamit. Halimbawa, kung
Ang GCC ay na-configure para sa i686-pc-linux-gnu noon -mtune=pentium4 bubuo ng code na iyon
ay nakatutok para sa Pentium4 ngunit tatakbo pa rin sa mga makinang i686.

-martsa=uri ng cpu
Bumuo ng mga tagubilin para sa uri ng makina uri ng cpu. Ang mga pagpipilian para sa uri ng cpu ay ang mga
katulad ng para sa -mtune. Bukod dito, pagtukoy -martsa=uri ng cpu nagpapahiwatig -mtune=uri ng cpu.

-mcpu=uri ng cpu
Isang hindi na ginagamit na kasingkahulugan para sa -mtune.

-mfpmath=yunit
Bumuo ng floating-point arithmetic para sa napiling unit yunit. Ang mga pagpipilian para sa yunit ay:

387 Gamitin ang karaniwang 387 floating-point coprocessor na nasa karamihan ng mga chips
at tinularan kung hindi man. Ang code na pinagsama-sama sa opsyong ito ay tumatakbo halos kahit saan.
Ang mga pansamantalang resulta ay kinakalkula sa 80-bit na katumpakan sa halip na ang katumpakan
tinukoy ng uri, na nagreresulta sa bahagyang naiibang mga resulta kumpara sa karamihan ng
iba pang mga chips. Tingnan mo -float-store para sa mas detalyadong paglalarawan.

Ito ang default na pagpipilian para sa i386 compiler.

sse Gumamit ng scalar floating-point na mga tagubilin na nasa set ng pagtuturo ng SSE. Ito
Ang set ng pagtuturo ay sinusuportahan ng Pentium3 at mas bagong mga chip, sa linya ng AMD sa pamamagitan ng
Athlon-4, Athlon-xp at Athlon-mp chips. Ang naunang bersyon ng pagtuturo ng SSE
Sinusuportahan lamang ng set ang single-precision na arithmetic, kaya ang doble at pinalawig-
Ang katumpakan na arithmetic ay ginagawa pa rin gamit ang 387. Isang mas huling bersyon, naroroon lamang sa
Ang Pentium4 at ang hinaharap na AMD x86-64 chips, ay sumusuporta sa double-precision arithmetic
masyadong.

Para sa i386 compiler, kailangan mong gamitin -martsa=uri ng cpu, -msse or -msse2 switch
upang paganahin ang mga extension ng SSE at gawing epektibo ang opsyong ito. Para sa x86-64 compiler,
ang mga extension na ito ay pinagana bilang default.

Ang resultang code ay dapat na mas mabilis sa karamihan ng mga kaso at
maiwasan ang mga problema sa numerical instability ng 387 code, ngunit maaaring masira ang ilang umiiral na
code na inaasahan ang mga pansamantalang 80 bits.

Ito ang default na pagpipilian para sa x86-64 compiler.

sse,387
sse+387
kapwa
Subukang gamitin ang parehong set ng pagtuturo nang sabay-sabay. Ito ay epektibong doblehin ang
halaga ng magagamit na mga rehistro at sa mga chip na may hiwalay na mga yunit ng pagpapatupad para sa 387
at SSE din ang mga mapagkukunan ng pagpapatupad. Gamitin ang opsyong ito nang may pag-iingat, dahil ito pa rin
pang-eksperimento, dahil hindi hiwalay ang modelo ng GCC register allocator
functional unit na nagreresulta sa hindi matatag na pagganap.

-masm=dialect
I-output ang mga tagubilin sa asm gamit ang napili dialect. Ang mga sinusuportahang pagpipilian ay Intel or upang
(ang default). Hindi sinusuportahan ni Darwin Intel.

-meeee-fp
-mno-ieee-fp
Kontrolin kung ang compiler ay gumagamit ng IEEE floating-point na mga paghahambing. Ang mga ito
hawakan nang tama ang kaso kung saan ang resulta ng isang paghahambing ay hindi ayos.

-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point. Babala: ang kailangan
Ang mga aklatan ay hindi bahagi ng GCC. Karaniwan ang mga pasilidad ng karaniwang C ng makina
compiler ang ginagamit, ngunit hindi ito maaaring gawin nang direkta sa cross-compilation. Kailangan mo
gumawa ng sarili mong pagsasaayos upang magbigay ng angkop na mga function ng library para sa cross-
compilation.

Sa mga makina kung saan ang isang function ay nagbabalik ng mga resulta ng floating-point sa rehistro ng 80387
stack, ang ilang floating-point opcode ay maaaring ilabas kahit na -msoft-float Ginagamit.

-mno-fp-ret-in-387
Huwag gamitin ang mga rehistro ng FPU para sa mga return value ng mga function.

Ang karaniwang calling convention ay may mga function na nagbabalik ng mga halaga ng mga uri ng "float" at "double"
sa isang rehistro ng FPU, kahit na walang FPU. Ang ideya ay ang operating system
dapat tularan ang isang FPU.

Ang pagpipilian -mno-fp-ret-in-387 nagiging sanhi ng mga naturang halaga na maibalik sa ordinaryong CPU
nagrerehistro sa halip.

-mno-fancy-math-387
Ang ilang 387 emulator ay hindi sumusuporta sa "sin", "cos" at "sqrt" na mga tagubilin para sa
387. Tukuyin ang opsyong ito upang maiwasan ang pagbuo ng mga tagubiling iyon. Ang pagpipiliang ito ay ang
default sa FreeBSD, OpenBSD at NetBSD. Ang opsyon na ito ay na-override kapag -martsa
ay nagpapahiwatig na ang target na CPU ay palaging magkakaroon ng isang FPU at kaya ang pagtuturo ay hindi magkakaroon
kailangan ng emulation. Mula sa rebisyon 2.6.1, ang mga tagubiling ito ay hindi nabuo maliban kung ikaw
gamitin din ang -funsafe-math-optimizations Lumipat.

-malign-doble
-mno-align-double
Kontrolin kung itina-align ng GCC ang mga variable na "double", "long double", at "long long" sa a
dalawang-salitang hangganan o isang salitang hangganan. Pag-align ng mga "double" na variable sa isang dalawang salita
boundary ay gumagawa ng code na tumatakbo nang medyo mas mabilis sa a Pentium sa gastos ng higit pa
memorya.

Sa x86-64, -malign-doble ay pinagana bilang default.

Babala: kung gagamitin mo ang -malign-doble switch, mga istrukturang naglalaman ng mga uri sa itaas
iba ang pagkakahanay kaysa sa na-publish na binary interface ng application
mga detalye para sa 386 at hindi magiging binary compatible sa mga istruktura sa code
pinagsama-sama nang walang switch na iyon.

-m96bit-long-doble
-m128bit-long-doble
Kinokontrol ng mga switch na ito ang laki ng uri ng "long double". Ang i386 application binary
Tinutukoy ng interface ang laki upang maging 96 bits, kaya -m96bit-long-doble ay ang default sa
32-bit na mode.

Ang mga modernong arkitektura (Pentium at mas bago) ay mas gusto ang "mahabang doble" upang maihanay sa isang 8-
o 16-byte na hangganan. Sa mga arrays o istruktura na umaayon sa ABI, hindi ito
maaari. Kaya tinukoy -m128bit-long-doble aligns "long double" sa isang 16-byte
hangganan sa pamamagitan ng padding ng "long double" na may karagdagang 32-bit na zero.

Sa x86-64 compiler, -m128bit-long-doble ay ang default na pagpipilian bilang ABI nito
tumutukoy na ang "mahabang doble" ay dapat na ihanay sa 16-byte na hangganan.

Pansinin na wala sa mga opsyong ito ang nagbibigay-daan sa anumang karagdagang katumpakan sa pamantayan ng x87
ng 80 bits para sa isang "mahabang doble".

Babala: kung i-override mo ang default na halaga para sa iyong target na ABI, ang mga istruktura at
Ang mga array na naglalaman ng "mahabang doble" na mga variable ay magbabago sa kanilang laki pati na rin sa paggana
Ang calling convention para sa function na tumatagal ng "long double" ay mababago. Kaya sila
ay hindi magiging binary compatible sa mga arrays o structures sa code na naipon nang wala iyon
Lumipat.

-mlarge-data-threshold=numero
Kailan -mcmodel=medium ay tinukoy, ang data na mas malaki kaysa sa threshold ay inilalagay sa malaki
seksyon ng data. Ang halagang ito ay dapat na pareho sa lahat ng bagay na naka-link sa binary
at default sa 65535.

-mrtd
Gumamit ng ibang function-calling convention, kung saan ang mga function ay naayos
bilang ng mga argumento ay bumalik na may "ret" num pagtuturo, na nagpapalabas ng kanilang mga argumento
habang bumabalik. Nagse-save ito ng isang pagtuturo sa tumatawag dahil hindi na kailangan
pop ang mga argumento doon.

Maaari mong tukuyin na ang isang indibidwal na function ay tinatawag na may ganitong pagkakasunod-sunod ng pagtawag sa
ang katangian ng function stdcall. Maaari mo ring i-override ang -mrtd opsyon sa pamamagitan ng paggamit ng
katangian ng function cdecl.

Babala: ang calling convention na ito ay hindi tugma sa karaniwang ginagamit sa Unix,
kaya hindi mo ito magagamit kung kailangan mong tumawag sa mga aklatan na pinagsama-sama sa Unix compiler.

Gayundin, dapat kang magbigay ng mga prototype ng function para sa lahat ng mga function na may variable
bilang ng mga argumento (kabilang ang "printf"); kung hindi, mali ang bubuo ng code
para sa mga tawag sa mga function na iyon.

Bilang karagdagan, ang malubhang maling code ay magreresulta kung tatawag ka ng isang function na may masyadong marami
mga argumento. (Karaniwan, ang mga karagdagang argumento ay hindi nakakapinsalang binabalewala.)

-mregparm=num
Kontrolin kung gaano karaming mga rehistro ang ginagamit upang ipasa ang mga argumento ng integer. Bilang default, hindi
Ang mga rehistro ay ginagamit upang ipasa ang mga argumento, at hindi hihigit sa 3 mga rehistro ang maaaring gamitin. Kaya mo
kontrolin ang gawi na ito para sa isang partikular na function sa pamamagitan ng paggamit ng katangian ng function regparm.

Babala: kung gagamitin mo ang switch na ito, at num ay nonzero, pagkatapos ay dapat mong buuin ang lahat ng mga module
na may parehong halaga, kabilang ang anumang mga aklatan. Kabilang dito ang mga system library at
mga module ng pagsisimula.

-msseregparm
Gumamit ng SSE register passing convention para sa float at double argument at mga return value.
Makokontrol mo ang gawi na ito para sa isang partikular na function sa pamamagitan ng paggamit ng katangian ng function
sseregparm.

Babala: kung gagamitin mo ang switch na ito, dapat mong buuin ang lahat ng mga module na may parehong halaga,
kabilang ang anumang mga aklatan. Kabilang dito ang mga library ng system at mga startup module.

-mvect8-ret-in-mem
Ibalik ang 8-byte vectors sa memorya sa halip na mga MMX register. Ito ang default na naka-on
Solaris@tie{}8 at 9 at VxWorks upang tumugma sa ABI ng mga compiler ng Sun Studio hanggang
bersyon 12. Sumusunod ang mga susunod na bersyon ng compiler (nagsisimula sa Studio 12 Update@tie{}1)
ang ABI na ginagamit ng iba pang mga target na x86, na siyang default sa Solaris@tie{}10 ​​at mas bago.
Lamang gamitin ang opsyong ito kung kailangan mong manatiling tugma sa umiiral na code na ginawa ni
ang mga nakaraang bersyon ng compiler o mas lumang bersyon ng GCC.

-mpc32
-mpc64
-mpc80
Itakda ang 80387 floating-point precision sa 32, 64 o 80 bits. Kailan -mpc32 ay tinukoy,
ang mga kahalagahan ng mga resulta ng mga pagpapatakbo ng floating-point ay bilugan sa 24 bits
(iisang katumpakan); -mpc64 nililibot ang mga kahalagahan ng mga resulta ng floating-point
mga operasyon sa 53 bits (double precision) at -mpc80 binibilang ang mga kahalagahan ng mga resulta
ng floating-point operations sa 64 bits (extended double precision), which is the
default. Kapag ginamit ang opsyong ito, ang mga floating-point na operasyon sa mas mataas na katumpakan ay
hindi magagamit sa programmer nang hindi tahasan ang pagtatakda ng FPU control word.

Ang pagtatakda ng pag-ikot ng mga floating-point na operasyon sa mas mababa kaysa sa default na 80 bits
pabilisin ang ilang mga programa ng 2% o higit pa. Tandaan na ang ilang mga mathematical library ay ipinapalagay iyon
Ang pinalawak na katumpakan (80-bit) na mga pagpapatakbo ng floating-point ay pinagana bilang default; mga gawain
sa naturang mga aklatan ay maaaring magdusa ng malaking pagkawala ng katumpakan, kadalasan sa pamamagitan ng
tinatawag na "catastrophic cancellation", kapag ginamit ang opsyong ito para itakda ang katumpakan sa
mas mababa sa pinalawig na katumpakan.

-mstackrealign
I-realign ang stack sa entry. Sa Intel x86, ang -mstackrealign bubuo ng pagpipilian
isang kahaliling prologue at epilogue na nagrealign sa run-time stack kung kinakailangan.
Sinusuportahan nito ang paghahalo ng mga legacy na code na nagpapanatili ng 4-byte na nakahanay na stack sa mga modernong code
na nagpapanatili ng 16-byte na stack para sa SSE compatibility. Tingnan din ang katangian
"force_align_arg_pointer", naaangkop sa mga indibidwal na function.

-preferred-stack-boundary=num
Subukang panatilihing nakahanay ang hangganan ng stack sa isang 2 na nakataas sa num hangganan ng byte. Kung
-preferred-stack-boundary ay hindi tinukoy, ang default ay 4 (16 bytes o 128 bits).

Babala: Kapag bumubuo ng code para sa x86-64 na arkitektura na may mga extension ng SSE
may kapansanan, -preferred-stack-boundary=3 ay maaaring gamitin upang panatilihing nakahanay ang hangganan ng stack
hanggang 8 byte na hangganan. Dapat mong buuin ang lahat ng mga module na may -preferred-stack-boundary=3,
kabilang ang anumang mga aklatan. Kabilang dito ang mga library ng system at mga startup module.

-mincoming-stack-boundary=num
Ipagpalagay na ang papasok na stack ay nakahanay sa isang 2 nakataas sa num hangganan ng byte. Kung
-mincoming-stack-boundary ay hindi tinukoy, ang tinukoy ng
-preferred-stack-boundary gagamitin.

Sa Pentium at PentiumPro, ang "double" at "long double" na mga halaga ay dapat na nakahanay sa isang
8-byte na hangganan (tingnan -malign-doble) o makaranas ng makabuluhang pagganap ng oras ng pagtakbo
mga parusa. Sa Pentium III, ang uri ng data ng Streaming SIMD Extension (SSE) na "__m128" ay maaaring
hindi gumagana nang maayos kung hindi ito nakahanay sa 16-byte.

Upang matiyak ang wastong pagkakahanay ng mga halagang ito sa stack, ang hangganan ng stack ay dapat na bilang
nakahanay gaya ng kinakailangan ng anumang halagang nakaimbak sa stack. Dagdag pa, ang bawat pag-andar
ay dapat mabuo upang mapanatiling nakahanay ang stack. Kaya tumatawag ng isang function
pinagsama-sama sa isang mas mataas na ginustong hangganan ng stack mula sa isang function na pinagsama-sama sa isang mas mababa
ang ginustong hangganan ng stack ay malamang na mali ang pagkakahanay sa stack. Inirerekomenda na
Ang mga library na gumagamit ng mga callback ay palaging gumagamit ng default na setting.

Ang sobrang pagkakahanay na ito ay kumonsumo ng dagdag na espasyo ng stack, at sa pangkalahatan ay nagpapataas ng code
laki. Code na sensitibo sa paggamit ng stack space, gaya ng mga naka-embed na system at
operating system kernels, maaaring nais na bawasan ang ginustong pagkakahanay sa
-preferred-stack-boundary=2.

-mmmx
-mno-mmx
-msse
-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
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
Ang mga switch na ito ay nagbibigay-daan o hindi pinagana ang paggamit ng mga tagubilin sa MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT o 3DNow!
pinahabang set ng pagtuturo. Available din ang mga extension na ito bilang built-in
function: tingnan X86 Built-in Pag-andar, para sa mga detalye ng mga function na pinagana at
hindi pinagana ng mga switch na ito.

Upang awtomatikong mabuo ang mga tagubilin sa SSE/SSE2 mula sa floating-point code (bilang
laban sa 387 mga tagubilin), tingnan -mfpmath=sse.

Pinipigilan ng GCC ang mga tagubilin ng SSEx kapag -mavx Ginagamit. Sa halip, bumubuo ito ng bagong AVX
mga tagubilin o katumbas ng AVX para sa lahat ng tagubilin ng SSEx kapag kinakailangan.

Ang mga opsyong ito ay magbibigay-daan sa GCC na gamitin ang mga pinahabang tagubiling ito sa nabuong code,
kahit wala -mfpmath=sse. Ang mga application na nagsasagawa ng run-time na pagtukoy ng CPU ay dapat
mag-compile ng hiwalay na mga file para sa bawat suportadong arkitektura, gamit ang naaangkop na mga flag.
Sa partikular, ang file na naglalaman ng CPU detection code ay dapat na naipon nang wala
mga pagpipiliang ito.

-mcld
Ang opsyong ito ay nagtuturo sa GCC na maglabas ng "cld" na pagtuturo sa prologue ng mga function
na gumagamit ng mga tagubiling string. Ang mga tagubilin sa string ay nakadepende sa DF flag na pipiliin
sa pagitan ng autoincrement o autodecrement mode. Habang ang ABI ay tumutukoy sa DF flag sa
ma-clear sa pagpasok ng function, ang ilang mga operating system ay lumalabag sa pagtutukoy na ito sa pamamagitan ng hindi
nililinis ang watawat ng DF sa kanilang mga dispatser ng exception. Ang exception handler ay maaaring
hinihingi gamit ang DF flag set, na humahantong sa maling mode ng direksyon kapag may string
ginagamit ang mga tagubilin. Maaaring paganahin ang opsyong ito bilang default sa 32-bit x86 na mga target sa pamamagitan ng
pag-configure ng GCC gamit ang --paganahin-cld opsyon sa pag-configure. Pagbuo ng "cld"
ang mga tagubilin ay maaaring pigilan sa -mno-cld opsyon ng compiler sa kasong ito.

-mvzeroupper
Ang opsyong ito ay nagtuturo sa GCC na maglabas ng "vzeroupper" na pagtuturo bago ang paglipat ng
kontrolin ang daloy sa labas ng function upang mabawasan ang parusa sa paglipat ng AVX hanggang SSE pati na rin
alisin ang hindi kinakailangang zeroupper intrinsics.

-mprefer-avx128
Ang opsyong ito ay nagtuturo sa GCC na gumamit ng 128-bit AVX na mga tagubilin sa halip na 256-bit AVX
mga tagubilin sa auto-vectorizer.

-mcx16
Ang opsyong ito ay magbibigay-daan sa GCC na gumamit ng CMPXCHG16B na pagtuturo sa nabuong code.
Ang CMPXCHG16B ay nagbibigay-daan para sa atomic operations sa 128-bit double quadword (o oword) na data
mga uri. Ito ay kapaki-pakinabang para sa mga counter na may mataas na resolution na maaaring ma-update ng maramihan
mga processor (o mga core). Ang pagtuturo na ito ay nabuo bilang bahagi ng atomic built-in
function: tingnan __sync Mga builtin or __atomic Mga builtin para sa mga detalye.

-msahf
Ang pagpipiliang ito ay magbibigay-daan sa GCC na gumamit ng pagtuturo ng SAHF sa nabuong 64-bit na code. Maaga
Ang mga Intel CPU na may Intel 64 ay kulang sa LAHF at SAHF na mga tagubilin na sinusuportahan ng AMD64 hanggang
pagpapakilala ng Pentium 4 G1 na hakbang noong Disyembre 2005. Ang LAHF at SAHF ay load at store
mga tagubilin, ayon sa pagkakabanggit, para sa ilang mga flag ng status. Sa 64-bit mode, SAHF
Ang pagtuturo ay ginagamit upang i-optimize ang "fmod", "drem" o "remainder" na mga built-in na function: tingnan
iba Mga builtin para sa mga detalye.

-mmovbe
Ang opsyong ito ay magbibigay-daan sa GCC na gumamit ng movbe instruction para ipatupad ang "__builtin_bswap32"
at "__builtin_bswap64".

-mcrc32
Ie-enable ng opsyong ito ang mga built-in na function, "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" at "__builtin_ia32_crc32di" sa
bumuo ng crc32 machine instruction.

-mreci
Ang opsyong ito ay magbibigay-daan sa GCC na gumamit ng RCPSS at RSQRTSS na mga tagubilin (at ang kanilang
vectorized na variant na RCPPS at RSQRTPS) na may karagdagang Newton-Raphson na hakbang sa
dagdagan ang katumpakan sa halip na DIVSS at SQRTSS (at ang kanilang mga vectorized na variant) para sa
single-precision floating-point na mga argumento. Ang mga tagubiling ito ay nabuo lamang kapag
-funsafe-math-optimizations ay pinagana kasama ng -finite-math-lamang at
-fno-trap-math. Tandaan na habang ang throughput ng sequence ay mas mataas kaysa sa
throughput ng non-reciprocal na pagtuturo, ang katumpakan ng pagkakasunod-sunod ay maaaring
nabawasan ng hanggang 2 ulp (ibig sabihin ang kabaligtaran ng 1.0 ay katumbas ng 0.99999994).

Tandaan na ipinapatupad ng GCC ang "1.0f/sqrtf(x)" sa mga tuntunin ng RSQRTSS (o RSQRTPS) na mayroon na
-ffast-math (o kumbinasyon ng opsyon sa itaas), at hindi na kailangan -mreci.

Tandaan din na ang GCC ay naglalabas ng sequence sa itaas na may karagdagang Newton-Raphson na hakbang para sa
vectorized single-float division at vectorized "sqrtf(x)" kasama na -ffast-math
(o kumbinasyon ng opsyon sa itaas), at hindi na kailangan -mreci.

-mreci=opt
Binibigyang-daan ng opsyong ito na kontrolin kung aling mga reciprocal na tagubilin sa pagtatantya ang maaaring gamitin. opt
ay isang listahan ng mga opsyon na pinaghihiwalay ng kuwit, na maaaring unahan ng "!" upang baligtarin ang
opsyon: "lahat": paganahin ang lahat ng mga tagubilin sa pagtatantya, "default": paganahin ang default
mga tagubilin, katumbas ng -mreci, "wala": huwag paganahin ang lahat ng mga tagubilin sa pagtatantya,
katumbas ng -mno-recipe, "div": paganahin ang approximation para sa scalar division,
"vec-div": paganahin ang approximation para sa vectorized division, "sqrt": paganahin ang
approximation para sa scalar square root, "vec-sqrt": paganahin ang approximation para sa
vectorized square root.

Kaya halimbawa, -mrecip=lahat,!sqrt ay magbibigay-daan sa lahat ng mga katumbas na pagtatantya,
maliban sa square root.

-mveclibabi=uri
Tinutukoy ang uri ng ABI na gagamitin para sa pag-vector ng mga intrinsics gamit ang isang panlabas na library.
Ang mga sinusuportahang uri ay "svml" para sa Intel short vector math library at "acml" para sa
AMD math core library na istilo ng interfacing. Kasalukuyang maglalabas ang GCC ng mga tawag sa
"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" at "vmlsAcos4" para sa
kaukulang uri ng function kapag -mveclibabi=svml ay ginagamit at "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" at "__vrs4_powf" para sa kaukulang uri ng function kapag
-mveclibabi=acml Ginagamit. pareho -free-vectorize at -funsafe-math-optimizations mayroon
upang paganahin. Ang isang SVML o ACML ABI compatible library ay kailangang tukuyin sa link
time.

-mabi=pangalan
Bumuo ng code para sa tinukoy na convention sa pagtawag. Ang mga pinahihintulutang halaga ay: sysv para
ang ABI na ginamit sa GNU/Linux at iba pang mga sistema at ms para sa Microsoft ABI. Ang default
ay ang paggamit ng Microsoft ABI kapag nagta-target sa Windows. Sa lahat ng iba pang mga system, ang default
ay ang SYSV ABI. Makokontrol mo ang gawi na ito para sa isang partikular na function sa pamamagitan ng paggamit ng
katangian ng function ms_abi/sysv_abi.

-mtls-dialect=uri
Bumuo ng code para ma-access ang thread-local na storage gamit ang gnu or gnu2 mga kombensiyon. gnu
ay ang konserbatibong default; gnu2 ay mas mahusay, ngunit maaari itong magdagdag ng compile- at run-
mga kinakailangan sa oras na hindi masasagot sa lahat ng mga sistema.

-mpush-args
-mno-push-args
Gumamit ng mga pagpapatakbo ng PUSH upang mag-imbak ng mga papalabas na parameter. Ang pamamaraang ito ay mas maikli at karaniwan
kasing bilis ng pamamaraan gamit ang mga pagpapatakbo ng SUB/MOV at pinagana bilang default. Sa ilang
Ang mga kaso kung hindi ito pinapagana ay maaaring mapabuti ang pagganap dahil sa pinahusay na pag-iiskedyul at nabawasan
dependencies.

-maccumulate-outgoing-args
Kung pinagana, ang maximum na halaga ng espasyo na kinakailangan para sa mga papalabas na argumento ay magiging
nakalkula sa prologue ng function. Ito ay mas mabilis sa karamihan sa mga modernong CPU dahil sa
pinababang mga dependency, pinahusay na pag-iiskedyul at pinababang paggamit ng stack kapag ginustong stack
ang hangganan ay hindi katumbas ng 2. Ang disbentaha ay isang kapansin-pansing pagtaas sa laki ng code. Ito
ipinahihiwatig ng switch -mno-push-args.

-mthreads
Suportahan ang paghawak sa pagbubukod na ligtas sa thread Mingw32. Code na umaasa sa thread-safe
Ang paghawak ng exception ay dapat mag-compile at mag-link ng lahat ng code sa -mthreads opsyon. Kailan
pagsasama-sama, -mthreads tumutukoy -D_MT; kapag nagli-link, nagli-link ito sa isang espesyal na thread helper
aklatan -lmingwthrd na naglilinis ng data sa paghawak ng bawat thread exception.

-mno-align-stringops
Huwag ihanay ang patutunguhan ng mga operasyon ng inline na string. Binabawasan ng switch na ito ang laki ng code
at pinapahusay ang pagganap kung sakaling nakahanay na ang patutunguhan, ngunit ang GCC ay hindi
alam ang tungkol dito.

-minline-all-stringops
Bilang default, inline lang ng GCC ang mga string operation kapag alam na ang patutunguhan
nakahanay sa hindi bababa sa isang 4-byte na hangganan. Nagbibigay-daan ito sa higit pang inlining, pataasin ang laki ng code,
ngunit maaaring mapabuti ang pagganap ng code na nakasalalay sa mabilis na memcpy, strlen at memset para sa
maikling haba.

-minline-stringops-dynamically
Para sa mga pagpapatakbo ng string na hindi alam ang laki, gumamit ng mga run-time na pagsusuri na may inline na code para sa maliit
mga bloke at isang tawag sa aklatan para sa malalaking bloke.

-mstringop-diskarte=algae
I-overwrite ang internal decision heuristic tungkol sa partikular na algorithm sa inline na string
operasyon na may. Ang mga pinapayagang halaga ay "rep_byte", "rep_4byte", "rep_8byte" para sa
pagpapalawak gamit ang i386 "rep" prefix ng tinukoy na laki, "byte_loop", "loop",
"unrolled_loop" para sa pagpapalawak ng inline na loop, "libcall" para sa palaging pagpapalawak ng library
tawagan

-momit-leaf-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function ng dahon. Iniiwasan nito ang
mga tagubilin para i-save, i-set up at i-restore ang mga frame pointer at gumawa ng karagdagang rehistro
magagamit sa mga function ng dahon. Ang pagpipilian -fomit-frame-pointer inaalis ang frame
pointer para sa lahat ng mga function, na maaaring magpahirap sa pag-debug.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Kinokontrol kung ang mga TLS variable ay maaaring ma-access gamit ang mga offset mula sa TLS segment
magparehistro (%gs para sa 32-bit, %fs para sa 64-bit), o kung ang thread base pointer ay dapat
idinagdag. Kung ito ay ligal o hindi ay depende sa operating system, at kung ito
imapa ang segment upang masakop ang buong lugar ng TLS.

Para sa mga system na gumagamit ng GNU libc, naka-on ang default.

-msse2avx
-mno-sse2avx
Tukuyin na dapat i-encode ng assembler ang mga tagubilin ng SSE na may prefix na VEX. Ang pagpipilian
-mavx ino-on ito bilang default.

-mfentry
-mno-fentry
Kung aktibo ang pag-profile -pg ilagay ang profiling counter call bago ang prologue. Tandaan: Naka-on
x86 architecture ang attribute na "ms_hook_prologue" ay hindi posible sa ngayon
-mfentry at -pg.

-m8bit-idiv
-mno-8bit-idiv
Sa ilang mga processor, tulad ng Intel Atom, ang 8-bit na unsigned integer divide ay mas mabilis kaysa
32-bit/64-bit integer divide. Ang pagpipiliang ito ay bumubuo ng isang run-time check. Kung pareho
ang dibidendo at divisor ay nasa hanay ng 0 hanggang 255, ang 8-bit na unsigned integer divide ay
ginamit sa halip na 32-bit/64-bit integer divide.

-mavx256-split-unaaligned-load
-mavx256-split-unaaligned-store
Hatiin ang 32-byte na AVX na hindi nakahanay na pag-load at tindahan.

mga ito -m ang mga switch ay sinusuportahan bilang karagdagan sa itaas sa mga processor ng AMD x86-64 sa
64-bit na kapaligiran.

-m32
-m64
-mx32
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang -m32 ang pagpipilian ay nagtatakda ng int, mahaba at
pointer sa 32 bits at bumubuo ng code na tumatakbo sa anumang i386 system. Ang -m64 opsyon
nagtatakda ng int sa 32 bits at mahaba at pointer sa 64 bits at bumubuo ng code para sa AMD's
x86-64 na arkitektura. Ang -mx32 Ang pagpipilian ay nagtatakda ng int, mahaba at pointer sa 32 bits at
bumubuo ng code para sa x86-64 architecture ng AMD. Kay darwin lang ang -m64 lumiliko ang opsyon
off ang -fno-pic at -mdynamic-no-pic mga pagpipilian.

-mno-red-zone
Huwag gumamit ng tinatawag na red zone para sa x86-64 code. Ang red zone ay ipinag-uutos ng
x86-64 ABI, ito ay isang 128-byte na lugar na lampas sa lokasyon ng stack pointer na
hindi mababago ng signal o interrupt handler at samakatuwid ay maaaring gamitin para sa
pansamantalang data nang hindi inaayos ang stack pointer. Ang bandila -mno-red-zone hindi pinapagana
itong red zone.

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code: dapat na naka-link ang program at ang mga simbolo nito
ang mas mababang 2 GB ng address space. Ang mga pointer ay 64 bits. Ang mga programa ay maaaring
statically o dynamic na naka-link. Ito ang default na modelo ng code.

-mcmodel=kernel
Bumuo ng code para sa modelo ng kernel code. Ang kernel ay tumatakbo sa negatibong 2 GB ng
puwang ng address. Ang modelong ito ay kailangang gamitin para sa Linux kernel code.

-mcmodel=medium
Bumuo ng code para sa medium na modelo: Naka-link ang program sa mas mababang 2 GB ng
puwang ng address. Ang mga maliliit na simbolo ay nakalagay din doon. Mga simbolo na may sukat na mas malaki kaysa sa
-mlarge-data-threshold ay inilalagay sa malalaking data o bss na mga seksyon at maaaring matagpuan
higit sa 2GB. Maaaring i-static o dynamic na naka-link ang mga program.

-mcmodel=malaki
Bumuo ng code para sa malaking modelo: Ang modelong ito ay hindi gumagawa ng mga pagpapalagay tungkol sa mga address at
laki ng mga seksyon.

-maddress-mode=long
Bumuo ng code para sa long address mode. Ito ay sinusuportahan lamang para sa 64-bit at x32
kapaligiran. Ito ang default na address mode para sa 64-bit na kapaligiran.

-maddress-mode=maikli
Bumuo ng code para sa short address mode. Ito ay sinusuportahan lamang para sa 32-bit at x32
kapaligiran. Ito ang default na address mode para sa 32-bit at x32 na kapaligiran.

i386 at x86-64 Windows Options

Ang mga karagdagang opsyon na ito ay available para sa mga target ng Windows:

-mconsole
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang isang console
Ang application ay bubuuin, sa pamamagitan ng pag-uutos sa linker na itakda ang PE header
uri ng subsystem na kinakailangan para sa mga console application. Ito ang default na gawi para sa
Mga target ng Cygwin at MinGW.

-mdll
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang isang DLL - a
dynamic na link library - ay mabubuo, na magpapagana sa pagpili ng kinakailangan
runtime startup object at entry point.

-mnop-fun-dllimport
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang
dllimport attribute ay dapat na balewalain.

-mthread
Available ang opsyong ito para sa mga target ng MinGW. Tinutukoy nito ang thread na partikular sa MinGW
suporta ay dapat gamitin.

-municode
Ang opsyong ito ay magagamit para sa mingw-w64 na mga target. Tinutukoy nito na ang UNICODE macro
ay paunang natukoy at na ang unicode capable runtime startup code ay pinili.

-mwin32
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang tipikal
Ang mga paunang natukoy na macro ng Windows ay itatakda sa pre-processor, ngunit hindi nakakaimpluwensya
ang pagpili ng runtime library/startup code.

-mwindows
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang isang GUI
Ang application ay mabubuo sa pamamagitan ng pag-uutos sa linker na itakda ang PE header
uri ng subsystem nang naaangkop.

-fno-set-stack-executable
Available ang opsyong ito para sa mga target ng MinGW. Tinutukoy nito na ang executable flag para sa
hindi nakatakda ang stack na ginagamit ng mga nested function. Ito ay kinakailangan para sa mga binary na tumatakbo
kernel mode ng Windows, dahil doon ang user32 API, na ginagamit upang itakda ang executable
mga pribilehiyo, ay hindi magagamit.

-mpe-aligned-commons
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang GNU
extension sa PE file format na nagpapahintulot sa tamang pagkakahanay ng mga COMMON variable
dapat gamitin kapag bumubuo ng code. Ito ay ie-enable bilang default kung matukoy ng GCC
na ang target na assembler na natagpuan sa panahon ng pagsasaayos ay sumusuporta sa tampok.

Tingnan din sa ilalim i386 at x86-64 Options para sa karaniwang mga pagpipilian.

IA-64 Options

Ito ang mga -m mga opsyon na tinukoy para sa arkitektura ng Intel IA-64.

-big-endian
Bumuo ng code para sa isang malaking-endian na target. Ito ang default para sa HP-UX.

-mlittle-endian
Bumuo ng code para sa isang maliit na-endian na target. Ito ang default para sa AIX5 at GNU/Linux.

-mgnu-as
-mno-gnu-as
Bumuo (o huwag) code para sa GNU assembler. Ito ang default.

-mgnu-ld
-mno-gnu-ld
Bumuo (o huwag) code para sa GNU linker. Ito ang default.

-mno-pic
Bumuo ng code na hindi gumagamit ng global pointer register. Ang resulta ay hindi posisyon
independent code, at lumalabag sa IA-64 ABI.

-mvolatile-asm-stop
-mno-volatile-asm-stop
Bumuo (o huwag) huminto kaagad bago at pagkatapos ng pabagu-bagong mga pahayag ng asm.

-magrehistro-mga pangalan
-mno-register-pangalan
Bumuo (o huwag) in, loc, at Palabas magparehistro ng mga pangalan para sa mga nakasalansan na rehistro. Ito
maaaring gawing mas nababasa ang output ng assembler.

-mno-sdata
-msdata
Huwag paganahin (o paganahin) ang mga pag-optimize na gumagamit ng maliit na seksyon ng data. Ito ay maaaring maging kapaki-pakinabang
para sa pagtatrabaho sa paligid ng mga optimizer bug.

-mconstant-gp
Bumuo ng code na gumagamit ng isang pare-parehong pandaigdigang halaga ng pointer. Ito ay kapaki-pakinabang kapag
pag-compile ng kernel code.

-mauto-pic
Bumuo ng code na self-relocatable. Ito ay nagpapahiwatig -mconstant-gp. Ito ay kapaki-pakinabang
kapag nag-compile ng firmware code.

-minline-float-divide-min-latency
Bumuo ng code para sa inline na paghahati ng mga floating-point value gamit ang minimum na latency
algorithm.

-minline-float-divide-max-throughput
Bumuo ng code para sa inline na paghahati ng mga floating-point value gamit ang maximum throughput
algorithm.

-mno-inline-float-divide
Huwag bumuo ng inline na code para sa mga divide ng mga floating-point value.

-minline-int-divide-min-latency
Bumuo ng code para sa inline na paghahati ng mga halaga ng integer gamit ang pinakamababang latency
algorithm.

-minline-int-divide-max-throughput
Bumuo ng code para sa inline na paghahati ng mga halaga ng integer gamit ang maximum throughput
algorithm.

-mno-inline-int-divide
Huwag bumuo ng inline na code para sa mga paghahati ng mga halaga ng integer.

-minline-sqrt-min-latency
Bumuo ng code para sa mga inline na square root gamit ang minimum latency algorithm.

-minline-sqrt-max-throughput
Bumuo ng code para sa mga inline na square root gamit ang maximum throughput algorithm.

-mno-inline-sqrt
Huwag bumuo ng inline na code para sa sqrt.

-mfused-baliw
-mno-fused-madd
Gawin (huwag) bumuo ng code na gumagamit ng fused multiply/add o multiply/subtract
mga tagubilin. Ang default ay gamitin ang mga tagubiling ito.

-mno-dwarf2-asm
-mdwarf2-asm
Huwag (o gawin) bumuo ng assembler code para sa DWARF2 line number debugging info. Ito
maaaring maging kapaki-pakinabang kapag hindi gumagamit ng GNU assembler.

-mearly-stop-bits
-mno-early-stop-bits
Payagan ang mga stop bit na mailagay nang mas maaga kaysa kaagad bago ang pagtuturo na iyon
nag-trigger ng stop bit. Mapapabuti nito ang pag-iiskedyul ng pagtuturo, ngunit hindi palaging
gawin mo.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mtls-size=tls-size
Tukuyin ang bit size ng agarang TLS offset. Ang mga wastong halaga ay 14, 22, at 64.

-mtune=uri ng cpu
Ibagay ang pag-iskedyul ng pagtuturo para sa isang partikular na CPU, Ang mga wastong halaga ay itanium,
itanium1, merced, itanium2, at mckinley.

-milp32
-mlp64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits. Ito ang mga flag na partikular sa HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/En)able data speculative scheduling bago i-reload. Magreresulta ito sa
pagbuo ng mga tagubilin sa ld.a at ang kaukulang mga tagubilin sa pagsusuri (ld.c /
chk.a). Ang default ay 'disable'.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)able data speculative scheduling pagkatapos i-reload. Magreresulta ito sa henerasyon
ng mga tagubilin sa ld.a at ng kaukulang mga tagubilin sa pagsusuri (ld.c / chk.a). Ang
default ay 'paganahin'.

-mno-sched-control-spec
-msched-control-spec
(Dis/En)magagawang kontrolin ang speculative scheduling. Ang tampok na ito ay magagamit lamang sa panahon
pag-iiskedyul ng rehiyon (ibig sabihin, bago i-reload). Magreresulta ito sa pagbuo ng ld.s
mga tagubilin at ang kaukulang check instructions chk.s . Ang default ay
'huwag paganahin'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa data
speculative load bago i-reload. Ito ay epektibo lamang sa -msched-br-data-spec
pinagana. Ang default ay 'paganahin'.

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa data
speculative load pagkatapos i-reload. Ito ay epektibo lamang sa -msched-ar-data-spec
pinagana. Ang default ay 'paganahin'.

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa
kontrolin ang mga speculative load. Ito ay epektibo lamang sa -msched-control-spec pinagana.
Ang default ay 'paganahin'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Kung naka-enable, pipiliin lang ang mga tagubilin sa speculative ng data para sa iskedyul kung mayroon
ay walang ibang mga pagpipilian sa ngayon. Gagawin nito ang paggamit ng data speculation
mas konserbatibo. Ang default ay 'disable'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Kung naka-enable, pipiliin ang control speculative na mga tagubilin para sa iskedyul kung mayroon
ay walang ibang mga pagpipilian sa ngayon. Gagawin nito ang paggamit ng control speculation
mas konserbatibo. Ang default ay 'disable'.

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Kung pinagana, isasaalang-alang ang mga speculative dependencies sa panahon ng pag-compute ng
mga priyoridad ng mga tagubilin. Gagawin nito ang paggamit ng haka-haka nang kaunti pa
konserbatibo. Ang default ay 'disable'.

-msched-spec-ldc
Gumamit ng isang simpleng pagsusuri sa haka-haka ng data. Naka-on ang opsyong ito bilang default.

-msched-control-spec-ldc
Gumamit ng isang simpleng pagsusuri para sa kontrol ng haka-haka. Naka-on ang opsyong ito bilang default.

-msched-stop-bits-pagkatapos-bawat-ikot
Huminto nang kaunti pagkatapos ng bawat pag-ikot kapag nag-iiskedyul. Naka-on ang opsyong ito bilang default.

-msched-fp-mem-deps-zero-cost
Ipagpalagay na ang mga floating-point store at load ay hindi malamang na magdulot ng salungatan kung kailan
inilagay sa parehong pangkat ng pagtuturo. Ang pagpipiliang ito ay hindi pinagana bilang default.

-msel-sched-dont-check-control-spec
Bumuo ng mga tseke para sa kontrol na haka-haka sa piling pag-iiskedyul. Ang watawat na ito ay
hindi pinagana bilang default.

-msched-max-memory-insns=max-insns
Limitahan ang bilang ng mga memory insn sa bawat pangkat ng pagtuturo, na nagbibigay ng mas mababang priyoridad sa
kasunod na memory insns na sinusubukang mag-iskedyul sa parehong pangkat ng pagtuturo.
Madalas na kapaki-pakinabang upang maiwasan ang mga salungatan sa cache bank. Ang default na halaga ay 1.

-msched-max-memory-insns-hard-limit
Huwag payagan ang higit sa `msched-max-memory-insns' sa pangkat ng pagtuturo. Kung hindi, limitahan
ay `soft' ibig sabihin ay mas gusto namin ang mga non-memory na operasyon kapag naabot na ang limitasyon ngunit
maaari pa ring mag-iskedyul ng mga pagpapatakbo ng memorya.

IA-64/VMS Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng IA-64/VMS:

-mvms-return-codes
Ibalik ang mga code ng kondisyon ng VMS mula sa pangunahing. Ang default ay ibalik ang POSIX style condition
(hal. error) mga code.

-mdebug-main=unlapi
I-flag ang unang gawain na ang pangalan ay nagsisimula sa unlapi bilang pangunahing gawain para sa
i-debug.

-mmalloc64
Default sa 64-bit memory allocation routines.

LM32 Options

mga ito -m ang mga opsyon ay tinukoy para sa arkitektura ng Lattice Mico32:

-mbarrel-shift-enabled
Paganahin ang mga tagubilin sa paglilipat ng bariles.

-mdivide-enabled
Paganahin ang mga tagubilin sa hati at modulus.

-mmultiply-enabled
Paganahin ang mga tagubilin sa multiply.

-msign-extend-enabled
Paganahin ang mga tagubilin sa pag-sign extend.

-muser-enabled
Paganahin ang mga tagubiling tinukoy ng user.

M32C Options

-mcpu=pangalan
Piliin ang CPU kung saan nabuo ang code. pangalan maaaring isa sa r8c para sa R8C/Tiny
serye, m16c para sa serye ng M16C (hanggang /60), m32cm para sa seryeng M16C/80, o m32c
para sa serye ng M32C/80.

-msim
Tinutukoy na ang programa ay tatakbo sa simulator. Nagdudulot ito ng kahaliling
runtime library na mai-link kung saan sumusuporta, halimbawa, file I/O. Hindi mo dapat
gamitin ang opsyong ito kapag bumubuo ng mga program na tatakbo sa totoong hardware; kailangan mo
magbigay ng iyong sariling runtime library para sa anumang I/O function na kailangan.

-meregs=numero
Tinutukoy ang bilang ng mga pseudo-register na nakabatay sa memorya na gagamitin ng GCC sa panahon ng code
henerasyon. Ang mga pseudo-register na ito ay gagamitin tulad ng mga totoong register, kaya mayroong a
tradeoff sa pagitan ng kakayahan ng GCC na magkasya ang code sa mga available na rehistro, at ang
parusa sa pagganap ng paggamit ng memorya sa halip na mga rehistro. Tandaan na ang lahat ng mga module sa a
Dapat na pinagsama-sama ang program na may parehong halaga para sa opsyong ito. Dahil diyan, ikaw
hindi dapat gamitin ang opsyong ito sa mga default na runtime library na ginagawa ng gcc.

M32R/D Options

mga ito -m ang mga opsyon ay tinukoy para sa mga arkitektura ng Renesas M32R/D:

-m32r2
Bumuo ng code para sa M32R/2.

-m32rx
Bumuo ng code para sa M32R/X.

-m32r
Bumuo ng code para sa M32R. Ito ang default.

-mmodel=maliit
Ipagpalagay na ang lahat ng mga bagay ay nakatira sa mas mababang 16MB ng memorya (upang ang kanilang mga address ay maaaring maging
na-load ng "ld24" na pagtuturo), at ipagpalagay na ang lahat ng mga subroutine ay maaabot ng
"bl" na pagtuturo. Ito ang default.

Maaaring itakda ang addressability ng isang partikular na bagay gamit ang attribute na "modelo".

-mmodel=medium
Ipagpalagay na ang mga bagay ay maaaring nasaanman sa 32-bit address space (ang compiler ay bubuo
"seth/add3" na mga tagubilin upang i-load ang kanilang mga address), at ipagpalagay na ang lahat ng mga subroutine ay
maabot gamit ang "bl" na pagtuturo.

-mmodel=malaki
Ipagpalagay na ang mga bagay ay maaaring nasaanman sa 32-bit address space (ang compiler ay bubuo
"seth/add3" na mga tagubilin upang i-load ang kanilang mga address), at ipagpalagay na ang mga subroutine ay maaaring hindi
maaabot gamit ang "bl" na pagtuturo (ang compiler ay bubuo ng mas mabagal
"seth/add3/jl" sequence ng pagtuturo).

-msdata=wala
Huwag paganahin ang paggamit ng maliit na lugar ng data. Ang mga variable ay ilalagay sa isa sa .data, bss, O
.rodata (maliban kung ang katangiang "seksyon" ay tinukoy). Ito ang default.

Ang maliit na lugar ng data ay binubuo ng mga seksyon .sdata at .sbss. Ang mga bagay ay maaaring tahasang
ilagay sa maliit na lugar ng data na may katangiang "section" gamit ang isa sa mga seksyong ito.

-msdata=sdata
Maglagay ng maliit na global at static na data sa maliit na lugar ng data, ngunit huwag gumawa ng espesyal
code para sanggunian sa kanila.

-msdata=gamitin
Maglagay ng maliit na global at static na data sa maliit na lugar ng data, at bumuo ng espesyal
mga tagubilin para sanggunian ang mga ito.

-G num
Ilagay ang mga global at static na bagay na mas mababa sa o katumbas ng num bytes sa maliit na data o
mga seksyon ng bss sa halip na ang mga normal na seksyon ng data o bss. Ang default na halaga ng num is
8. Ang -msdata ang opsyon ay dapat itakda sa isa sa sdata or gamitin para magkaroon ang opsyong ito ng anuman
epekto.

Ang lahat ng mga module ay dapat na pinagsama-sama sa pareho -G num halaga. Pagsasama-sama ng iba't ibang
mga halaga ng num maaaring gumana o hindi; kung ito ay hindi ang linker ay magbibigay ng isang error
mensahe---hindi bubuo ng maling code.

-mdebug
Ginagawa ang M32R na partikular na code sa compiler na nagpapakita ng ilang istatistika na maaaring makatulong
sa mga programa sa pag-debug.

-malign-loops
Ihanay ang lahat ng mga loop sa isang 32-byte na hangganan.

-mno-align-loops
Huwag magpatupad ng 32-byte na pagkakahanay para sa mga loop. Ito ang default.

-missue-rate=numero
Problema numero mga tagubilin sa bawat cycle. numero pwede lang 1 or 2.

-mbranch-cost=numero
numero maaari lamang maging 1 o 2. Kung ito ay 1, ang mga sanga ay mas pipiliin kaysa
conditional code, kung ito ay 2, ang kabaligtaran ang ilalapat.

-mflush-trap=numero
Tinutukoy ang numero ng bitag na gagamitin para i-flush ang cache. Ang default ay 12. Wasto
ang mga numero ay nasa pagitan ng 0 at 15 kasama.

-mno-flush-trap
Tinutukoy na hindi ma-flush ang cache sa pamamagitan ng paggamit ng bitag.

-mflush-func=pangalan
Tinutukoy ang pangalan ng operating system function na tatawagan para i-flush ang cache. Ang
ang default ay _flush_cache, ngunit ang isang function na tawag ay gagamitin lamang kung ang isang bitag ay hindi
magagamit.

-mno-flush-func
Isinasaad na walang OS function para sa pag-flush ng cache.

M680x0 Options

Ito ang mga -m mga opsyon na tinukoy para sa mga processor ng M680x0 at ColdFire. Ang mga default na setting
depende sa kung aling arkitektura ang napili kapag ang compiler ay na-configure; ang mga default
para sa pinakakaraniwang mga pagpipilian ay ibinigay sa ibaba.

-martsa=arko
Bumuo ng code para sa isang partikular na M680x0 o ColdFire instruction set architecture.
Mga pinahihintulutang halaga ng arko para sa mga arkitektura ng M680x0 ay: 68000, 68010, 68020, 68030,
68040, 68060 at cpu32. Ang mga arkitektura ng ColdFire ay pinili ayon sa Freescale's
Ang pag-uuri ng ISA at ang mga pinahihintulutang halaga ay: isaah, isaaplus, isab at Isaac.

Tinutukoy ng gcc ang isang macro __mcfarko__ sa tuwing bumubuo ito ng code para sa isang target ng ColdFire.
Ang arko sa macro na ito ay isa sa -martsa mga argumentong ibinigay sa itaas.

Kapag ginamit nang magkasama, -martsa at -mtune piliin ang code na tumatakbo sa isang pamilya ng katulad
mga processor ngunit na-optimize iyon para sa isang partikular na microarchitecture.

-mcpu=CPU
Bumuo ng code para sa isang partikular na processor ng M680x0 o ColdFire. Ang M680x0 CPUs ay:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 at cpu32. Ang ColdFire CPUs
ay ibinigay ng talahanayan sa ibaba, na nag-uuri din sa mga CPU sa mga pamilya:

Pamilya: -mcpu argumento
51 : 51 51ac 51cn 51em 51qe
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
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 overrides -martsa=arko if arko ay katugma sa CPU. Iba pang mga kumbinasyon ng
-mcpu at -martsa ay tinanggihan.

Tinutukoy ng gcc ang macro __mcf_cpu_CPU kapag na-target ng ColdFire CPU ay pinili. Ito rin
tumutukoy __mcf_family_pamilya, kung saan ang halaga ng pamilya ay ibinigay ng talahanayan sa itaas.

-mtune=magtono
Ibagay ang code para sa isang partikular na microarchitecture, sa loob ng mga hadlang na itinakda ni -martsa
at -mcpu. Ang M680x0 microarchitectures ay: 68000, 68010, 68020, 68030, 68040,
68060 at cpu32. Ang ColdFire microarchitectures ay: cfv1, cfv2, cfv3, cfv4 at
cfv4e.

Vous pouvez aussi paggamit -mtune=68020-40 para sa code na kailangang tumakbo nang medyo maayos sa 68020,
68030 at 68040 na mga target. -mtune=68020-60 ay katulad ngunit may kasamang 68060 na mga target bilang
mabuti. Pinipili ng dalawang opsyong ito ang parehong mga desisyon sa pag-tune bilang -m68020-40 at -m68020-60
ayon sa pagkakabanggit.

Tinutukoy ng gcc ang mga macro __mcarko at __mcarko__ kapag tune para sa 680x0 architecture
arko. Tinutukoy din nito mcarko maliban kung alinman -ansi o isang hindi GNU -std ginagamit ang opsyon.
Kung ang gcc ay nagtu-tune para sa isang hanay ng mga arkitektura, gaya ng pinili ni -mtune=68020-40 or
-mtune=68020-60, tinutukoy nito ang mga macro para sa bawat arkitektura sa hanay.

Tinutukoy din ng gcc ang macro __mmaaga__ kapag tune para sa ColdFire microarchitecture
maaga, Kung saan maaga ay isa sa mga argumentong ibinigay sa itaas.

-m68000
-mc68000
Bumuo ng output para sa isang 68000. Ito ang default kapag ang compiler ay na-configure para sa
68000-based na mga sistema. Ito ay katumbas ng -martsa=68000.

Gamitin ang opsyong ito para sa mga microcontroller na may 68000 o EC000 core, kasama ang 68008,
68302, 68306, 68307, 68322, 68328 at 68356.

-m68010
Bumuo ng output para sa isang 68010. Ito ang default kapag ang compiler ay na-configure para sa
68010-based na mga sistema. Ito ay katumbas ng -martsa=68010.

-m68020
-mc68020
Bumuo ng output para sa isang 68020. Ito ang default kapag ang compiler ay na-configure para sa
68020-based na mga sistema. Ito ay katumbas ng -martsa=68020.

-m68030
Bumuo ng output para sa isang 68030. Ito ang default kapag ang compiler ay na-configure para sa
68030-based na mga sistema. Ito ay katumbas ng -martsa=68030.

-m68040
Bumuo ng output para sa isang 68040. Ito ang default kapag ang compiler ay na-configure para sa
68040-based na mga sistema. Ito ay katumbas ng -martsa=68040.

Pinipigilan ng opsyong ito ang paggamit ng 68881/68882 na mga tagubilin na kailangang tularan ng
software sa 68040. Gamitin ang opsyong ito kung ang iyong 68040 ay walang code na dapat tularan
ang mga tagubiling iyon.

-m68060
Bumuo ng output para sa isang 68060. Ito ang default kapag ang compiler ay na-configure para sa
68060-based na mga sistema. Ito ay katumbas ng -martsa=68060.

Pinipigilan ng opsyong ito ang paggamit ng 68020 at 68881/68882 na mga tagubilin na dapat
tinularan ng software sa 68060. Gamitin ang opsyong ito kung walang code ang iyong 68060
upang tularan ang mga tagubiling iyon.

-mcpu32
Bumuo ng output para sa isang CPU32. Ito ang default kapag ang compiler ay na-configure para sa
Mga system na nakabatay sa CPU32. Ito ay katumbas ng -march=cpu32.

Gamitin ang opsyong ito para sa mga microcontroller na may CPU32 o CPU32+ core, kasama ang 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 at 68360.

-m5200
Bumuo ng output para sa isang 520X ColdFire CPU. Ito ang default kapag ang compiler ay
na-configure para sa 520X-based na mga system. Ito ay katumbas ng -mcpu=5206, at ngayon na
hindi na ginagamit pabor sa opsyong iyon.

Gamitin ang opsyong ito para sa microcontroller na may 5200 core, kasama ang MCF5202, MCF5203,
MCF5204 at MCF5206.

-m5206e
Bumuo ng output para sa isang 5206e ColdFire CPU. Ang opsyon ay hindi na ginagamit pabor sa
ang katumbas -mcpu=5206e.

-m528x
Bumuo ng output para sa isang miyembro ng pamilya ng ColdFire 528X. Ang pagpipilian ay ngayon
hindi na ginagamit pabor sa katumbas -mcpu=528x.

-m5307
Bumuo ng output para sa isang ColdFire 5307 CPU. Ang opsyon ay hindi na ginagamit pabor sa
katumbas -mcpu=5307.

-m5407
Bumuo ng output para sa isang ColdFire 5407 CPU. Ang opsyon ay hindi na ginagamit pabor sa
katumbas -mcpu=5407.

-mcfv4e
Bumuo ng output para sa isang ColdFire V4e family CPU (hal. 547x/548x). Kabilang dito ang paggamit ng
hardware floating-point na mga tagubilin. Ang opsyon ay katumbas ng -mcpu=547x, At ito ay
ngayon ay hindi na ginagamit pabor sa opsyong iyon.

-m68020-40
Bumuo ng output para sa isang 68040, nang hindi gumagamit ng alinman sa mga bagong tagubilin. Nagreresulta ito
sa code na maaaring tumakbo nang medyo mahusay sa alinman sa isang 68020/68881 o isang 68030 o isang
68040. Ang nabuong code ay gumagamit ng 68881 na mga tagubilin na ginagaya sa
68040.

Ang opsyon ay katumbas ng -martsa=68020 -mtune=68020-40.

-m68020-60
Bumuo ng output para sa isang 68060, nang hindi gumagamit ng alinman sa mga bagong tagubilin. Nagreresulta ito
sa code na maaaring tumakbo nang medyo mahusay sa alinman sa isang 68020/68881 o isang 68030 o isang
68040. Ang nabuong code ay gumagamit ng 68881 na mga tagubilin na ginagaya sa
68060.

Ang opsyon ay katumbas ng -martsa=68020 -mtune=68020-60.

-mhard-float
-m68881
Bumuo ng floating-point na mga tagubilin. Ito ang default para sa 68020 at mas mataas, at
para sa mga ColdFire device na may FPU. Tinutukoy nito ang macro __MAY_68881__ sa M680x0
mga target at __mcffpu__ sa mga target ng ColdFire.

-msoft-float
Huwag bumuo ng floating-point na mga tagubilin; gumamit na lang ng mga tawag sa library. Ito ang
default para sa 68000, 68010, at 68832 na mga target. Ito rin ang default para sa ColdFire
mga device na walang FPU.

-mdiv
-mno-div
Bumuo (huwag bumuo) ColdFire hardware divide at natitirang mga tagubilin. Kung
-martsa ay ginagamit nang wala -mcpu, ang default ay "naka-on" para sa mga arkitektura ng ColdFire at "naka-off"
para sa mga arkitektura ng M680x0. Kung hindi, ang default ay kinuha mula sa target na CPU (alinman sa
ang default na CPU, o ang tinukoy ni -mcpu). Halimbawa, ang default ay "naka-off"
para -mcpu=5206 at "on" para sa -mcpu=5206e.

Tinutukoy ng gcc ang macro __mcfhwdiv__ kapag pinagana ang opsyong ito.

-msshort
Isaalang-alang ang uri ng "int" na 16 bits ang lapad, tulad ng "short int". Bilang karagdagan, ang mga parameter
na ipinasa sa stack ay nakahanay din sa isang 16-bit na hangganan kahit sa mga target na ang API
nag-uutos ng promosyon sa 32-bit.

-mno-maikli
Huwag isaalang-alang ang uri ng "int" na 16 bits ang lapad. Ito ang default.

-mnobitfield
-mno-bitfield
Huwag gamitin ang bit-field na mga tagubilin. Ang -m68000, -mcpu32 at -m5200 ipinahihiwatig ng mga opsyon
-mnobitfield.

-mbitfield
Gamitin ang mga tagubilin sa bit-field. Ang -m68020 ipinahihiwatig ng opsyon -mbitfield. Ito ay
ang default kung gagamit ka ng configuration na idinisenyo para sa isang 68020.

-mrtd
Gumamit ng ibang function-calling convention, kung saan ang mga function ay naayos
ang bilang ng mga argumento ay bumalik kasama ang "rtd" na pagtuturo, na nagpa-pop ng kanilang mga argumento
habang bumabalik. Nagse-save ito ng isang pagtuturo sa tumatawag dahil hindi na kailangan
pop ang mga argumento doon.

Ang convention sa pagtawag na ito ay hindi tugma sa karaniwang ginagamit sa Unix, kaya ikaw
hindi ito magagamit kung kailangan mong tumawag sa mga aklatan na pinagsama-sama sa Unix compiler.

Gayundin, dapat kang magbigay ng mga prototype ng function para sa lahat ng mga function na may variable
bilang ng mga argumento (kabilang ang "printf"); kung hindi, mali ang bubuo ng code
para sa mga tawag sa mga function na iyon.

Bilang karagdagan, ang malubhang maling code ay magreresulta kung tatawag ka ng isang function na may masyadong marami
mga argumento. (Karaniwan, ang mga karagdagang argumento ay hindi nakakapinsalang binabalewala.)

Ang pagtuturo ng "rtd" ay sinusuportahan ng 68010, 68020, 68030, 68040, 68060 at CPU32
mga processor, ngunit hindi sa pamamagitan ng 68000 o 5200.

-mno-rtd
Huwag gamitin ang mga convention sa pagtawag na pinili ni -mrtd. Ito ang default.

-malign-int
-mno-align-int
Kontrolin kung itina-align ng GCC ang "int", "long", "long long", "float", "double", at "long
double" na mga variable sa isang 32-bit na hangganan (-malign-int) o isang 16-bit na hangganan
(-mno-align-int). Ang pag-align ng mga variable sa 32-bit na mga hangganan ay gumagawa ng code na tumatakbo
medyo mas mabilis sa mga processor na may 32-bit na mga bus sa gastos ng mas maraming memorya.

Babala: kung gagamitin mo ang -malign-int switch, ihahanay ng GCC ang mga istrukturang naglalaman ng
iba ang mga uri sa itaas kaysa sa karamihan ng nai-publish na interface ng binary ng application
mga pagtutukoy para sa m68k.

-mpcrel
Gamitin ang pc-relative addressing mode ng 68000 nang direkta, sa halip na gumamit ng global
offset na talahanayan. Sa kasalukuyan, ang pagpipiliang ito ay nagpapahiwatig -fpic, na nagbibigay-daan sa pinakamaraming 16-bit na offset
para sa pc-relative addressing. -fPIC ay hindi kasalukuyang sinusuportahan ng -mpcrel, Bagaman
ito ay maaaring suportahan para sa 68020 at mas mataas na mga processor.

-mno-strict-align
-mstrict-align
Huwag (gawin) ipagpalagay na ang hindi nakahanay na memory reference ay hahawakan ng system.

-msep-data
Bumuo ng code na nagbibigay-daan sa segment ng data na matatagpuan sa ibang lugar ng memorya
mula sa segment ng teksto. Ito ay nagbibigay-daan para sa execute sa lugar sa isang kapaligiran na walang
pamamahala ng virtual memory. Ang pagpipiliang ito ay nagpapahiwatig -fPIC.

-mno-sep-data
Bumuo ng code na ipinapalagay na ang segment ng data ay sumusunod sa segment ng text. Ito ay
ang default.

-mid-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method. Ito ay nagpapahintulot
para isagawa sa lugar at nakabahaging mga aklatan sa isang kapaligiran na walang virtual memory
pamamahala. Ang pagpipiliang ito ay nagpapahiwatig -fPIC.

-mno-id-shared-library
Bumuo ng code na hindi ipinapalagay na ginagamit ang mga nakabahaging aklatan batay sa ID. Ito ay
ang default.

-mshared-library-id=n
Tinukoy ang numero ng pagkakakilanlan ng naka-compile na library na nakabatay sa ID.
Ang pagtukoy ng halaga ng 0 ay bubuo ng mas compact na code, na tumutukoy sa iba pang mga halaga
pilitin ang paglalaan ng numerong iyon sa kasalukuyang aklatan ngunit wala nang espasyo o
mas mahusay sa oras kaysa sa pagtanggal sa opsyong ito.

-mxgot
-mno-xgot
Kapag bumubuo ng position-independent code para sa ColdFire, bumuo ng code na gumagana kung
ang GOT ay may higit sa 8192 entries. Ang code na ito ay mas malaki at mas mabagal kaysa sa code
nabuo nang walang pagpipiliang ito. Sa mga processor ng M680x0, hindi kailangan ang opsyong ito; -fPIC
sapat na.

Karaniwang gumagamit ang GCC ng iisang tagubilin para mag-load ng mga value mula sa GOT. Habang ito ay
medyo mahusay, ito ay gumagana lamang kung ang GOT ay mas maliit kaysa sa tungkol sa 64k. Anumang bagay
mas malaki ang nagiging sanhi ng linker na mag-ulat ng isang error tulad ng:

naputol ang relokasyon upang magkasya: R_68K_GOT16O foobar

Kung mangyari ito, dapat mong i-compile muli ang iyong code gamit ang -mxgot. Dapat itong gumana sa
napakalaking GOT. Gayunpaman, nabuo ang code gamit ang -mxgot ay hindi gaanong mahusay, dahil ito
tumatagal ng 4 na tagubilin upang makuha ang halaga ng isang pandaigdigang simbolo.

Tandaan na ang ilang linker, kabilang ang mga mas bagong bersyon ng GNU linker, ay maaaring lumikha
maramihang GOT at pag-uri-uriin ang GOT na mga entry. Kung mayroon kang ganoong linker, kailangan mo lang
upang gamitin ang -mxgot kapag nag-compile ng isang object file na nag-a-access ng higit sa 8192 GOT
mga entry. Kakaunti lang ang gumagawa.

Walang epekto ang mga opsyong ito maliban kung ang GCC ay bumubuo ng code na independyente sa posisyon.

MCore Options

Ito ang mga -m mga opsyon na tinukoy para sa mga processor ng Motorola M*Core.

-mhardlit
-mno-hardlit
Inline constants sa stream ng code kung magagawa ito sa dalawang tagubilin o mas kaunti.

-mdiv
-mno-div
Gamitin ang divide instruction. (Pinagana bilang default).

-mrelax-agad
-mno-relax-agad
Payagan ang di-makatwirang laki ng mga kaagad sa mga pagpapatakbo ng bit.

-mwide-bitfields
-mno-wide-bitfields
Palaging ituring ang mga bit-field bilang int-sized.

-m4byte-function
-mno-4byte-functions
Pilitin ang lahat ng mga function na ihanay sa isang 4-byte na hangganan.

-mcallgraph-data
-mno-callgraph-data
Maglabas ng impormasyon ng callgraph.

-mslow-bytes
-mno-slow-bytes
Mas gusto ang pag-access ng salita kapag nagbabasa ng mga dami ng byte.

-mlittle-endian
-big-endian
Bumuo ng code para sa isang maliit na-endian na target.

-m210
-m340
Bumuo ng code para sa 210 processor.

-mno-lsim
Ipagpalagay na ang suporta sa runtime ay ibinigay at kaya alisin ang library ng simulator
(libsim.a) mula sa linker command line.

-mstack-increment=laki
Itakda ang maximum na halaga para sa isang pagpapatakbo ng pagtaas ng stack. Ang mga malalaking halaga ay maaari
pataasin ang bilis ng mga program na naglalaman ng mga function na nangangailangan ng malaking halaga ng
stack space, ngunit maaari rin silang mag-trigger ng segmentation fault kung ang stack ay pinahaba
Sobra. Ang default na halaga ay 0x1000.

MeP Options

-mabsdiff
Pinapagana ang pagtuturo ng "abs", na siyang ganap na pagkakaiba sa pagitan ng dalawang rehistro.

-mall-opts
Pinapagana ang lahat ng mga opsyonal na tagubilin - average, multiply, divide, bit operations,
nangunguna sa zero, ganap na pagkakaiba, min/max, clip, at saturation.

-maverage
Pinapagana ang "ave" na pagtuturo, na kumukwenta ng average ng dalawang rehistro.

-based=n
Mga variable ng laki n ang mga byte o mas maliit ay ilalagay sa seksyong ".based" ng
default. Ginagamit ng mga nakabatay na variable ang $tp register bilang base register, at mayroong a
128-byte na limitasyon sa seksyong ".based".

-mbitops
Pinapagana ang bit operation instructions - bit test ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm"), at test-and-set ("tas").

-mc=pangalan
Pinipili kung aling seksyon ang constant data ilalagay. pangalan maaaring "maliit", "malapit", o
"malayo".

-mclip
Pinapagana ang "clip" na pagtuturo. Tandaan na ang "-mclip" ay hindi kapaki-pakinabang maliban kung ikaw din
magbigay ng "-mminmax".

-mconfig=pangalan
Pinipili ang isa sa mga build-in na core configuration. Ang bawat MeP chip ay may isa o higit pa
mga module sa loob nito; bawat module ay may pangunahing CPU at iba't ibang coprocessors, opsyonal
mga tagubilin, at mga peripheral. Ang tool na "MeP-Integrator", hindi bahagi ng GCC, ay nagbibigay
ang mga pagsasaayos na ito sa pamamagitan ng opsyong ito; ang paggamit sa opsyong ito ay kapareho ng paggamit ng lahat
ang kaukulang mga opsyon sa command-line. Ang default na configuration ay "default".

-mcop
Pinapagana ang mga tagubilin ng coprocessor. Bilang default, ito ay isang 32-bit na coprocessor. Tandaan
na ang coprocessor ay karaniwang pinagana sa pamamagitan ng "-mconfig=" na opsyon.

-mcop32
Pinapagana ang mga tagubilin ng 32-bit na coprocessor.

-mcop64
Pinapagana ang mga tagubilin ng 64-bit na coprocessor.

-mivc2
Pinapagana ang pag-iskedyul ng IVC2. Ang IVC2 ay isang 64-bit na VLIW coprocessor.

-mdc
Nagiging sanhi ng paglalagay ng mga pare-parehong variable sa seksyong ".malapit".

-mdiv
Pinapagana ang "div" at "divu" na mga tagubilin.

-meb
Bumuo ng big-endian code.

-mel
Bumuo ng little-endian code.

-mio-volatile
Sinasabi sa compiler na ang anumang variable na minarkahan ng attribute na "io" ay dapat
itinuturing na pabagu-bago ng isip.

-ml Nagiging sanhi ng mga variable na italaga sa seksyong ".far" bilang default.

-mleadz
Pinapagana ang pagtuturo ng "leadz" (nangungunang zero).

-mm Nagiging sanhi ng mga variable na italaga sa seksyong ".near" bilang default.

-mminmax
Pinapagana ang "min" at "max" na mga tagubilin.

-mult
Pinapagana ang multiplikasyon at multiply-accumulate na mga tagubilin.

-mno-opts
Hindi pinapagana ang lahat ng mga opsyonal na tagubilin na pinagana ng "-mall-opts".

-ulitin
Ine-enable ang "repeat" at "erepeat" na mga tagubilin, na ginagamit para sa low-overhead looping.

-MS Nagiging default ang lahat ng variable sa seksyong ".tiny". Tandaan na mayroong a
65536-byte na limitasyon sa seksyong ito. Ang mga access sa mga variable na ito ay gumagamit ng %gp base
magrehistro.

-msatur
Pinapagana ang mga tagubilin sa saturation. Tandaan na ang compiler ay hindi sa kasalukuyan
bumuo ng mga ito mismo, ngunit ang pagpipiliang ito ay kasama para sa pagiging tugma sa iba pang mga tool,
parang "as".

-msdram
I-link ang SDRAM-based na runtime sa halip na ang default na ROM-based na runtime.

-msim
I-link ang mga library ng runtime ng simulator.

-msimnovec
I-link ang mga library ng runtime ng simulator, hindi kasama ang built-in na suporta para sa pag-reset at
exception vectors at mga talahanayan.

-mtf
Nagiging default ang lahat ng function sa seksyong ".far". Kung wala ang pagpipiliang ito, gumagana
default sa seksyong ".near".

-mtiny=n
Mga variable na n ang mga byte o mas maliit ay ilalaan sa seksyong ".tiny". Ang mga ito
ginagamit ng mga variable ang $gp base register. Ang default para sa opsyong ito ay 4, ngunit tandaan iyon
mayroong 65536-byte na limitasyon sa seksyong ".tiny".

MicroBlaze Options

-msoft-float
Gumamit ng software emulation para sa floating point (default).

-mhard-float
Gumamit ng mga tagubilin sa floating-point ng hardware.

-mmemcpy
Huwag i-optimize ang block moves, gumamit ng "memcpy".

-mno-clearbss
Hindi na ginagamit ang opsyong ito. Gamitin -fno-zero-initialized-sa-bss sa halip.

-mcpu=uri ng cpu
Gumamit ng mga feature ng at schedule code para sa ibinigay na CPU. Ang mga sinusuportahang halaga ay nasa format
vX.YY.Z, Kung saan X ay isang pangunahing bersyon, YY ay ang menor de edad na bersyon, at Z ay compatibility
code. Ang mga halimbawang halaga ay v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-soft-mul
Gumamit ng software multiply emulation (default).

-mxl-soft-div
Gumamit ng software emulation para sa divides (default).

-mxl-barrel-shift
Gamitin ang hardware barrel shifter.

-mxl-pattern-compare
Gumamit ng mga tagubilin sa paghahambing ng pattern.

-msmall-divides
Gumamit ng table lookup optimization para sa maliliit na signed integer divisions.

-mxl-stack-check
Hindi na ginagamit ang opsyong ito. Gamitin ang -fstack-check sa halip.

-mxl-gp-opt
Gumamit ng GP relative sdata/sbss na mga seksyon.

-mxl-multiply-high
Gamitin ang multiply high na mga tagubilin para sa mataas na bahagi ng 32x32 multiply.

-mxl-float-convert
Gumamit ng hardware floating-point na mga tagubilin sa conversion.

-mxl-float-sqrt
Gumamit ng hardware floating-point square root na pagtuturo.

-mxl-mode-modelo ng app
Pumili ng modelo ng application modelo ng app. Ang mga wastong modelo ay

pinatutupad
normal executable (default), gumagamit ng startup code crt0.o.

xmdstub
para gamitin sa Xilinx Microprocessor Debugger (XMD) based software intrusive debug
ahente na tinatawag na xmdstub. Gumagamit ito ng startup file crt1.o at itinatakda ang panimulang address ng
ang program ay 0x800.

bootstrap
para sa mga application na na-load gamit ang isang bootloader. Gumagamit ang modelong ito ng startup file
crt2.o na hindi naglalaman ng processor reset vector handler. Ito ay angkop
para sa paglilipat ng kontrol sa isang pag-reset ng processor sa bootloader kaysa sa
application.

mga novector
para sa mga application na hindi nangangailangan ng alinman sa mga MicroBlaze vectors. Ang pagpipiliang ito
maaaring maging kapaki-pakinabang para sa mga application na tumatakbo sa loob ng isang monitoring application. Ang modelong ito
Gumagamit crt3.o bilang isang startup file.

Opsyon -xl-mode-modelo ng app ay isang hindi na ginagamit na alyas para sa -mxl-mode-modelo ng app.

MIPS Options

-EB Bumuo ng big-endian code.

-ANG Bumuo ng little-endian code. Ito ang default para sa mips*el-*-* mga kumpigurasyon.

-martsa=arko
Bumuo ng code na tatakbo sa arko, na maaaring pangalan ng isang generic na MIPS ISA, o
ang pangalan ng isang partikular na processor. Ang mga pangalan ng ISA ay: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 at mips64r2. Ang mga pangalan ng processor ay: 4kc, 4km, 4kp, 4ksc,
4kec, 4kem, 4kep, 4ksd, 5kc, 5kf, 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, loongson2e, loongson2f, loongson3a, m4k, octeon, octeon+, octeon2, 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 at xlr. Ang espesyal na halaga galing-abi pinipili ang pinakakatugma
arkitektura para sa napiling ABI (iyon ay, mips1 para sa 32-bit ABI at mips3 para sa 64-bit
mga ABI).

Sinusuportahan din ng mga native na Linux/GNU at IRIX toolchain ang halaga katutubo, na pumipili ng
pinakamahusay na opsyon sa arkitektura para sa host processor. -martsa=katutubo walang epekto kung GCC
hindi nakikilala ang processor.

Sa mga pangalan ng processor, isang final 000 maaaring daglatin bilang k (Halimbawa, -martsa=r2k).
Ang mga prefix ay opsyonal, at vr maaaring isulat r.

Mga pangalan ng form nf2_1 sumangguni sa mga processor na may mga FPU na na-orasan sa kalahati ng rate ng
core, mga pangalan ng form nf1_1 sumangguni sa mga processor na may mga FPU na naka-clock sa parehong rate
bilang core, at mga pangalan ng form nf3_2 sumangguni sa mga processor na may mga FPU na nag-clocked ng ratio
ng 3:2 na may paggalang sa core. Para sa mga dahilan ng compatibility, nf ay tinatanggap bilang a
kasingkahulugan ng nf2_1 habang nx at bfx ay tinatanggap bilang kasingkahulugan ng nf1_1.

Tinutukoy ng GCC ang dalawang macro batay sa halaga ng opsyong ito. Ang una ay _MIPS_ARCH,
na nagbibigay ng pangalan ng target na arkitektura, bilang isang string. Ang pangalawa ay may anyo
_MIPS_ARCH_foo, Kung saan foo ay ang capitalized na halaga ng _MIPS_ARCH. Halimbawa,
-martsa=r2000 magtatakda _MIPS_ARCH sa "r2000" at tukuyin ang macro _MIPS_ARCH_R2000.

Tandaan na ang _MIPS_ARCH Ginagamit ng macro ang mga pangalan ng processor na ibinigay sa itaas. Sa ibang salita,
ito ay magkakaroon ng buong unlapi at hindi magpapaikli 000 as k. Sa kaso ng mula sa-
abi, pinangalanan ng macro ang nalutas na arkitektura (alinman sa "mips1" or "mips3"). Pangalan nito
ang default na arkitektura kapag hindi -martsa ang pagpipilian ay ibinigay.

-mtune=arko
Mag-optimize para sa arko. Sa iba pang mga bagay, kinokontrol ng opsyong ito ang paraan ng mga tagubilin
naka-iskedyul, at ang pinaghihinalaang halaga ng mga pagpapatakbo ng arithmetic. Ang listahan ng arko halaga
ay katulad ng para sa -martsa.

Kapag hindi ginamit ang opsyong ito, mag-o-optimize ang GCC para sa processor na tinukoy ni -martsa.
Sa pamamagitan ng paggamit -martsa at -mtune magkasama, posibleng makabuo ng code na tatakbo
isang pamilya ng mga processor, ngunit i-optimize ang code para sa isang partikular na miyembro nito
pamilya.

-mtune tumutukoy sa mga macro _MIPS_TUNE at _MIPS_TUNE_foo, na gumagana sa parehong paraan tulad ng
ang -martsa mga inilarawan sa itaas.

-mips1
Katumbas ng -martsa=mips1.

-mips2
Katumbas ng -martsa=mips2.

-mips3
Katumbas ng -martsa=mips3.

-mips4
Katumbas ng -martsa=mips4.

-mips32
Katumbas ng -martsa=mips32.

-mips32r2
Katumbas ng -martsa=mips32r2.

-mips64
Katumbas ng -martsa=mips64.

-mips64r2
Katumbas ng -martsa=mips64r2.

-mips16
-mno-mips16
Bumuo (huwag bumuo) ng MIPS16 code. Kung ang GCC ay nagta-target ng MIPS32 o MIPS64
arkitektura, gagamitin nito ang MIPS16e ASE.

MIPS16 code generation ay maaari ding kontrolin sa isang per-function na batayan sa pamamagitan ng
Mga attribute na "mips16" at "nomips16".

-mflip-mips16
Bumuo ng MIPS16 code sa mga alternating function. Ang pagpipiliang ito ay ibinigay para sa regression
pagsubok ng mixed MIPS16/non-MIPS16 code generation, at hindi inilaan para sa ordinaryo
gamitin sa pag-compile ng user code.

-minterlink-mips16
-mno-interlink-mips16
Atasan (hindi kailangan) na ang non-MIPS16 code ay link-compatible sa MIPS16 code.

Halimbawa, hindi maaaring direktang tumalon ang non-MIPS16 code sa MIPS16 code; dapat itong gumamit ng a
tawag o hindi direktang pagtalon. -minterlink-mips16 samakatuwid ay hindi pinapagana ang mga direktang pagtalon maliban kung
Alam ng GCC na ang target ng pagtalon ay hindi MIPS16.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Bumuo ng code para sa ibinigay na ABI.

Tandaan na ang EABI ay may 32-bit at 64-bit na variant. Ang GCC ay karaniwang bumubuo ng 64-bit
code kapag pumili ka ng 64-bit na arkitektura, ngunit maaari mong gamitin -mgp32 para makakuha ng 32-bit code
sa halip.

Para sa impormasyon tungkol sa O64 ABI, tingnanhttp://gcc.gnu.org/projects/mipso64-abi.html>.

Sinusuportahan ng GCC ang isang variant ng o32 ABI kung saan ang mga floating-point register ay 64
higit sa 32 bits ang lapad. Maaari mong piliin ang kumbinasyong ito sa -mabi=32 -mfp64. Itong ABI
umaasa sa mthc1 at mfhc1 mga tagubilin at samakatuwid ay sinusuportahan lamang para sa
Mga processor ng MIPS32R2.

Ang mga pagtatalaga ng rehistro para sa mga argumento at mga halaga ng pagbabalik ay nananatiling pareho, ngunit bawat isa
Ang scalar value ay ipinapasa sa isang solong 64-bit na rehistro sa halip na isang pares ng 32-bit
nagrerehistro. Halimbawa, ibinalik ang mga scalar floating-point value $f0 lamang, hindi a
$f0/$f1 pares. Ang set ng mga call-save na rehistro ay nananatiling pareho, ngunit lahat ng 64 bits
ay naligtas.

-mabicalls
-mno-abicalls
Bumuo (huwag bumuo) ng code na angkop para sa SVR4-style na mga dynamic na bagay.
-mabicalls ay ang default para sa mga sistemang nakabatay sa SVR4.

-mshared
-mno-shared
Bumuo (huwag bumuo) ng code na ganap na independiyente sa posisyon, at magagawa iyon
samakatuwid ay maiugnay sa mga nakabahaging aklatan. Ang pagpipiliang ito ay nakakaapekto lamang -mabicalls.

lahat -mabicalls ang code ay tradisyonal na naging independyente sa posisyon, anuman ang mga opsyon
gaya ng -fPIC at -fpic. Gayunpaman, bilang extension, pinapayagan ng GNU toolchain ang mga executable
upang gumamit ng ganap na mga pag-access para sa mga lokal na nagbubuklod na simbolo. Maaari rin itong gumamit ng mas maikling GP
pagsisimula ng mga sequence at bumuo ng mga direktang tawag sa mga function na tinukoy ng lokal. Ito
ang mode ay pinili ng -mno-shared.

-mno-shared depende sa binutils 2.16 o mas mataas at bumubuo ng mga bagay na maaari lamang
na-link ng GNU linker. Gayunpaman, hindi naaapektuhan ng opsyon ang ABI ng final
maipapatupad; nakakaapekto lamang ito sa ABI ng mga bagay na maaaring ilipat. Gamit -mno-shared habilin
karaniwang ginagawang mas maliit at mas mabilis ang mga executable.

-mshared ay ang default.

-mplt
-mno-plt
Ipagpalagay (huwag ipagpalagay) na sinusuportahan ng mga static at dynamic na linker ang mga PLT at kopya
mga relokasyon. Ang pagpipiliang ito ay nakakaapekto lamang -mno-shared -mabicalls. Para sa n64 ABI, ito
ang opsyon ay walang epekto kung wala -msym32.

Maaari ka Gumawa -mplt ang default sa pamamagitan ng pag-configure ng GCC sa --with-mips-plt. Ang default
is -mno-plt kung hindi man.

-mxgot
-mno-xgot
Iangat (huwag iangat) ang karaniwang mga paghihigpit sa laki ng global offset table.

Karaniwang gumagamit ang GCC ng iisang tagubilin para mag-load ng mga value mula sa GOT. Habang ito ay
medyo episyente, gagana lang kung mas maliit ang GOT sa mga 64k.
Ang anumang mas malaki ay magdudulot sa linker na mag-ulat ng error gaya ng:

naputol ang relokasyon upang magkasya: R_MIPS_GOT16 foobar

Kung mangyari ito, dapat mong i-compile muli ang iyong code gamit ang -mxgot. Dapat itong gumana sa
napakalaking GOT, bagama't magiging hindi gaanong mahusay, dahil aabot ito ng tatlo
mga tagubilin upang kunin ang halaga ng isang pandaigdigang simbolo.

Tandaan na ang ilang linker ay maaaring lumikha ng maraming GOT. Kung mayroon kang ganoong linker, ikaw
dapat lang gamitin -mxgot kapag ang isang solong object file ay nag-access ng higit sa 64k's
halaga ng GOT entries. Kakaunti lang ang gumagawa.

Walang epekto ang mga opsyong ito maliban kung ang GCC ay bumubuo ng posisyong independent code.

-mgp32
Ipagpalagay na ang pangkalahatang layunin na mga rehistro ay 32 bits ang lapad.

-mgp64
Ipagpalagay na ang pangkalahatang layunin na mga rehistro ay 64 bits ang lapad.

-mfp32
Ipagpalagay na ang mga floating-point register ay 32 bits ang lapad.

-mfp64
Ipagpalagay na ang mga floating-point register ay 64 bits ang lapad.

-mhard-float
Gumamit ng floating-point coprocessor na mga tagubilin.

-msoft-float
Huwag gumamit ng floating-point coprocessor na mga tagubilin. Ipatupad ang floating-point
mga kalkulasyon gamit ang mga tawag sa library sa halip.

-msingle-float
Ipagpalagay na ang floating-point coprocessor ay sumusuporta lamang sa mga single-precision na operasyon.

-mdouble-float
Ipagpalagay na ang floating-point coprocessor ay sumusuporta sa double-precision operations. Ito
ay ang default.

-mllsc
-mno-llsc
Gamitin (huwag gamitin) ll, sc, at i-sync mga tagubilin para ipatupad ang built-in na memorya ng atom
mga function. Kapag walang tinukoy na opsyon, gagamitin ng GCC ang mga tagubilin kung ang
sinusuportahan sila ng target na arkitektura.

-mllsc ay kapaki-pakinabang kung ang runtime na kapaligiran ay maaaring tularan ang mga tagubilin at -mno-llsc
maaaring maging kapaki-pakinabang kapag nag-compile para sa mga hindi karaniwang ISA. Maaari mong gawin ang alinmang opsyon na
default sa pamamagitan ng pag-configure ng GCC gamit ang --sa-llsc at --walang-llsc ayon sa pagkakabanggit.
--sa-llsc ay ang default para sa ilang mga pagsasaayos; tingnan ang dokumentasyon ng pag-install
para sa mga detalye.

-mdsp
-mno-dsp
Gamitin (huwag gamitin) ang rebisyon 1 ng MIPS DSP ASE.
Ang pagpipiliang ito ay tumutukoy sa preprocessor macro __mips_dsp. Tinutukoy din nito
__mips_dsp_rev sa 1.

-mdspr2
-mno-dspr2
Gamitin (huwag gamitin) ang rebisyon 2 ng MIPS DSP ASE.
Tinutukoy ng opsyong ito ang mga preprocessor macros __mips_dsp at __mips_dspr2. ito aussi
tumutukoy __mips_dsp_rev sa 2.

-msmartmips
-mno-smartmips
Gamitin (huwag gamitin) ang MIPS SmartMIPS ASE.

-may kapansanan-single
-mno-paired-single
Gumamit ng (huwag gumamit) ng paired-single floating-point na mga tagubilin.
Ang opsyon na ito ay nangangailangan ng hardware floating-point support upang paganahin.

-mdmx
-mno-mdmx
Gumamit ng (huwag gumamit) ng mga tagubilin sa MIPS Digital Media Extension. Ang pagpipiliang ito ay maaari lamang
ginagamit kapag bumubuo ng 64-bit na code at nangangailangan ng hardware na floating-point support
pinagana.

-mips3d
-mno-mips3d
Gamitin (huwag gamitin) ang MIPS-3D ASE. Ang pagpipilian -mips3d nagpapahiwatig -may kapansanan-single.

-mmt
-mno-mt
Gumamit (huwag gumamit) ng MT Multithreading na mga tagubilin.

-mlong64
Pilitin ang mga "mahabang" na uri na maging 64 bits ang lapad. Tingnan mo -mlong32 para sa paliwanag ng default
at ang paraan na tinutukoy ang laki ng pointer.

-mlong32
Pilitin ang "long", "int", at mga uri ng pointer na maging 32 bits ang lapad.

Ang default na laki ng "int", "long" at mga pointer ay nakasalalay sa ABI. Lahat ng
ang mga sinusuportahang ABI ay gumagamit ng 32-bit na "int" na mga. Ang n64 ABI ay gumagamit ng 64-bit na "mahaba", tulad ng ginagawa ng 64-bit
EABI; ang iba ay gumagamit ng 32-bit "long" s. Ang mga pointer ay kapareho ng laki ng "mahaba", o ang
parehong laki ng mga integer na nagrerehistro, alinman ang mas maliit.

-msym32
-mno-sym32
Ipagpalagay (huwag ipagpalagay) na ang lahat ng mga simbolo ay may mga 32-bit na halaga, anuman ang napili
ABI. Ang pagpipiliang ito ay kapaki-pakinabang sa kumbinasyon ng -mabi=64 at -mno-abicalls dahil ito
nagbibigay-daan sa GCC na bumuo ng mas maikli at mas mabilis na mga sanggunian sa mga simbolikong address.

-G num
Maglagay ng mga kahulugan ng external na nakikitang data sa isang maliit na seksyon ng data kung ang data na iyon ay hindi
mas malaki kaysa num byte. Maaaring ma-access ng GCC ang data nang mas mahusay; tingnan mo -mgpopt para
mga detalye.

Ang default -G ang pagpipilian ay depende sa pagsasaayos.

-mlocal-sdata
-mno-local-sdata
Pahabain (huwag pahabain) ang -G pag-uugali sa lokal na data din, tulad ng sa mga static na variable
sa C. -mlocal-sdata ay ang default para sa lahat ng mga configuration.

Kung ang linker ay nagreklamo na ang isang application ay gumagamit ng masyadong maliit na data, maaari mong
gusto mong subukang buuin muli ang mga bahaging hindi gaanong kritikal sa pagganap -mno-local-sdata. Mo
maaaring gusto ring bumuo ng malalaking aklatan gamit ang -mno-local-sdata, upang ang mga aklatan
mag-iwan ng mas maraming puwang para sa pangunahing programa.

-mextern-sdata
-mno-extern-sdata
Ipagpalagay (huwag ipagpalagay) na ang external na tinukoy na data ay nasa isang maliit na seksyon ng data kung
na ang data ay nasa loob ng -G hangganan -mextern-sdata ay ang default para sa lahat
mga kumpigurasyon.

Kung mag-compile ka ng module Mod sa -mextern-sdata -G num -mgpopt, at Mod mga sanggunian a
nagbabago ay na hindi mas malaki kaysa sa num bytes, dapat mong tiyakin na ay ay nilagay
sa isang maliit na seksyon ng data. Kung ay ay tinukoy ng isa pang module, dapat kang mag-compile
ang modyul na iyon na may sapat na mataas -G pagtatakda o pag-attach ng attribute na "section" sa ay's
kahulugan. Kung ay ay karaniwan, dapat mong i-link ang application na may sapat na mataas -G
setting na ito.

Ang pinakamadaling paraan upang matugunan ang mga paghihigpit na ito ay ang pag-compile at pag-link ng bawat module
na may parehong -G opsyon. Gayunpaman, maaaring gusto mong bumuo ng isang library na sumusuporta
ilang iba't ibang maliliit na limitasyon ng data. Magagawa mo ito sa pamamagitan ng pag-compile ng library gamit ang
ang pinakamataas na suportado -G setting at karagdagang paggamit -mno-extern-sdata upang ihinto ang
library mula sa paggawa ng mga pagpapalagay tungkol sa panlabas na tinukoy na data.

-mgpopt
-mno-gpopt
Gumamit (huwag gumamit) ng mga GP-relative na pag-access para sa mga simbolo na kilalang nasa maliit na data
seksyon; tingnan mo -G, -mlocal-sdata at -mextern-sdata. -mgpopt ay ang default para sa lahat
mga kumpigurasyon.

-mno-gpopt ay kapaki-pakinabang para sa mga kaso kung saan ang $gp register ay maaaring hindi hawak ang halaga ng
"_gp". Halimbawa, kung ang code ay bahagi ng isang library na maaaring gamitin sa isang boot
monitor, ang mga program na tumatawag sa boot monitor routines ay magpapasa ng hindi kilalang halaga sa $gp.
(Sa ganitong mga sitwasyon, ang boot monitor mismo ay karaniwang isasama sa -G0.)

-mno-gpopt nagpapahiwatig -mno-local-sdata at -mno-extern-sdata.

-naka-embed na-data
-mno-embedded-data
Ilaan muna ang mga variable sa read-only na seksyon ng data kung maaari, pagkatapos ay sa susunod sa
maliit na seksyon ng data kung maaari, kung hindi man sa data. Nagbibigay ito ng bahagyang mas mabagal na code
kaysa sa default, ngunit binabawasan ang halaga ng RAM na kinakailangan kapag nagpapatupad, at sa gayon ay maaaring
mas gusto para sa ilang naka-embed na system.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Ilagay ang mga hindi inisyal na variable na "const" sa seksyong read-only na data. Ang pagpipiliang ito ay
makabuluhan lamang kasabay ng -naka-embed na-data.

-mcode-readable=pagtatakda ng
Tukuyin kung ang GCC ay maaaring bumuo ng code na nagbabasa mula sa mga executable na seksyon. meron
tatlong posibleng setting:

-mcode-readable=oo
Maaaring malayang ma-access ng mga tagubilin ang mga executable na seksyon. Ito ang default na setting.

-mcode-readable=pcrel
Maaaring ma-access ng MIPS16 PC-relative load instructions ang mga executable na seksyon, ngunit iba pa
hindi dapat gawin ito ng mga tagubilin. Ang opsyon na ito ay kapaki-pakinabang sa 4KSc at 4KSd processor
kapag ang code na TLBs ay mayroong Read Inhibit bit set. Ito ay kapaki-pakinabang din sa mga processor
na maaaring i-configure upang magkaroon ng dual instruction/data SRAM interface at iyon,
tulad ng M4K, awtomatikong nagre-redirect ng PC-relative load sa instruction RAM.

-mcode-readable=no
Hindi dapat ma-access ng mga tagubilin ang mga executable na seksyon. Maaaring maging kapaki-pakinabang ang opsyong ito sa
mga target na naka-configure na magkaroon ng dalawahang pagtuturo/data SRAM interface ngunit
na (hindi katulad ng M4K) ay hindi awtomatikong nagre-redirect ng mga PC-relative load sa
pagtuturo RAM.

-msplit-address
-mno-split-address
I-enable (disable) ang paggamit ng "%hi()" at "%lo()" assembler relocation operator. Ito
ang opsyon ay napalitan ng -meexplicit-relocs ngunit nananatili sa likuran
compatibility.

-meexplicit-relocs
-mno-explicit-relocs
Gumamit ng (huwag gumamit) ng assembler relocation operator kapag nakikitungo sa mga simbolikong address.
Ang kahalili, pinili ni -mno-explicit-relocs, ay gumamit ng mga assembler macro sa halip.

-meexplicit-relocs ay ang default kung ang GCC ay na-configure na gumamit ng isang assembler na
sumusuporta sa mga operator ng paglilipat.

-mcheck-zero-division
-mno-check-zero-division
Trap (huwag bitag) sa integer division sa pamamagitan ng zero.

Ang default ay -mcheck-zero-division.

-mdivide-traps
-mdivide-breaks
Sinusuri ng mga MIPS system ang dibisyon sa pamamagitan ng zero sa pamamagitan ng pagbuo ng alinman sa conditional trap o a
break na pagtuturo. Ang paggamit ng mga bitag ay nagreresulta sa mas maliit na code, ngunit sinusuportahan lamang sa MIPS
II at mamaya. Gayundin, ang ilang bersyon ng Linux kernel ay may bug na pumipigil sa bitag
mula sa pagbuo ng tamang signal ("SIGFPE"). Gamitin -mdivide-traps upang payagan ang may kondisyon
mga bitag sa mga arkitektura na sumusuporta sa kanila at -mdivide-breaks upang pilitin ang paggamit ng
masira

Ang default ay kadalasan -mdivide-traps, ngunit maaari itong ma-override sa oras ng pag-configure
paggamit --with-divide=breaks. Ang divide-by-zero na mga pagsusuri ay maaaring ganap na hindi paganahin ang paggamit
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
Pilitin (huwag pilitin) ang paggamit ng "memcpy()" para sa mga di-trivial na block moves. Ang default
is -mno-memcpy, na nagbibigay-daan sa GCC na i-inline ang karamihan sa mga pare-parehong laki ng mga kopya.

-mlong-tawag
-mno-mahabang-tawag
Huwag paganahin (huwag paganahin) ang paggamit ng "jal" na pagtuturo. Pagtawag ng mga function gamit ang "jal"
ay mas mahusay ngunit nangangailangan ng tumatawag at tumatawag sa parehong 256 megabyte
segment.

Walang epekto ang opsyong ito sa abicals code. Ang default ay -mno-mahabang-tawag.

-mmad
-mno-baliw
Paganahin (i-disable) ang paggamit ng "mad", "madu" at "mul" na mga tagubilin, gaya ng ibinigay ng
R4650 ISA.

-mfused-baliw
-mno-fused-madd
I-enable (disable) ang paggamit ng floating-point multiply-accumulate na mga tagubilin, kapag sila
ay magagamit. Ang default ay -mfused-baliw.

Kapag ginamit ang multiply-accumulate na mga tagubilin, kinakalkula ang intermediate na produkto
sa walang katapusang katumpakan at hindi napapailalim sa FCSR Flush to Zero bit. Ito ay maaaring
hindi kanais-nais sa ilang mga pangyayari.

-nocpp
Sabihin sa MIPS assembler na huwag patakbuhin ang preprocessor nito sa mga file ng assembler ng user (na may a
.s suffix) kapag pinagsama-sama ang mga ito.

-mfix-24k
-mno-fix-24k
Magtrabaho sa paligid ng 24K E48 (nawalang data sa mga tindahan sa panahon ng pag-refill). Ang mga solusyon
ay ipinatupad ng assembler sa halip na ng GCC.

-mfix-r4000
-mno-fix-r4000
Gumawa sa ilang partikular na R4000 na pagkakamali ng CPU:

- Ang isang double-word o isang variable shift ay maaaring magbigay ng isang hindi tamang resulta kung naisakatuparan
kaagad pagkatapos magsimula ng integer division.

- Ang isang double-word o isang variable shift ay maaaring magbigay ng maling resulta kung ipapatupad habang
isang integer multiplication ang kasalukuyang nagaganap.

- Ang isang integer division ay maaaring magbigay ng maling resulta kung nagsimula sa isang puwang ng pagkaantala ng a
kinuha sanga o isang tumalon.

-mfix-r4400
-mno-fix-r4400
Gumawa sa ilang partikular na R4400 na pagkakamali ng CPU:

- Ang isang double-word o isang variable shift ay maaaring magbigay ng isang hindi tamang resulta kung naisakatuparan
kaagad pagkatapos magsimula ng integer division.

-mfix-r10000
-mno-fix-r10000
Gumawa ng ilang partikular na R10000 na errata:

- Ang mga "ll"/"sc" na mga sequence ay maaaring hindi kumilos nang atomically sa mga rebisyon bago ang 3.0. Maaari silang
deadlock sa mga rebisyon 2.6 at mas maaga.

Magagamit lang ang opsyong ito kung sinusuportahan ng target na arkitektura ang malamang na sangay
mga tagubilin. -mfix-r10000 ay ang default kung kailan -martsa=r10000 Ginagamit; -mno-fix-r10000
ay ang default kung hindi man.

-mfix-vr4120
-mno-fix-vr4120
Magsagawa ng ilang partikular na error sa VR4120:

- Ang "dmultu" ay hindi palaging gumagawa ng tamang resulta.

- Ang "div" at "ddiv" ay hindi palaging gumagawa ng tamang resulta kung ang isa sa mga operand
ay negatibo.

Ang mga workaround para sa division errata ay umaasa sa mga espesyal na function sa libgcc.a. Sa
sa kasalukuyan, ang mga function na ito ay ibinibigay lamang ng mga "mips64vr*-elf" na mga configuration.

Ang ibang VR4120 errata ay nangangailangan ng nop na ipasok sa pagitan ng ilang partikular na pares ng
mga tagubilin. Ang mga errata na ito ay pinangangasiwaan ng assembler, hindi ng GCC mismo.

-mfix-vr4130
Magtrabaho sa paligid ng VR4130 "mflo"/"mfhi" errata. Ang mga workaround ay ipinatupad ng
assembler sa halip na ng GCC, bagama't maiiwasan ng GCC ang paggamit ng "mflo" at "mfhi" kung ang
Ang VR4130 "macc", "macchi", "dmacc" at "dmacchi" na mga tagubilin ay available sa halip.

-mfix-sb1
-mno-fix-sb1
Magtrabaho sa ilang partikular na SB-1 CPU core errata. (Kasalukuyang gumagana ang watawat na ito sa paligid ng SB-1
rebisyon 2 "F1" at "F2" floating-point errata.)

-mr10k-cache-barrier=pagtatakda ng
Tukuyin kung ang GCC ay dapat magpasok ng mga hadlang sa cache upang maiwasan ang mga side-effects ng
haka-haka sa mga processor ng R10K.

Sa karaniwan sa maraming mga processor, sinusubukan ng R10K na hulaan ang kinalabasan ng isang kondisyon
branch at speculatively executes instructions from the "taken" branch. Mamaya na
abort ang mga tagubiling ito kung mali ang hinulaang kinalabasan. Gayunpaman, sa R10K,
kahit na ang mga aborted na tagubilin ay maaaring magkaroon ng mga side effect.

Ang problemang ito ay nakakaapekto lamang sa mga kernel store at, depende sa system, ang mga kernel load.
Bilang halimbawa, maaaring i-load ng isang speculatively-executed store ang target na memory sa cache
at markahan ang linya ng cache bilang marumi, kahit na ang tindahan mismo ay na-abort sa ibang pagkakataon. Kung isang DMA
Ang operasyon ay nagsusulat sa parehong lugar ng memorya bago ang "marumi" na linya ay mapula, ang
io-overwrite ng naka-cache na data ang DMA-ed na data. Tingnan ang manu-manong processor ng R10K para sa kabuuan
paglalarawan, kabilang ang iba pang mga potensyal na problema.

Ang isang solusyon ay ang pagpasok ng mga tagubilin sa hadlang sa cache bago ang bawat memorya na ma-access iyon
maaaring isagawa nang haka-haka at maaaring magkaroon ng mga side effect kahit na i-abort.
-mr10k-cache-barrier=pagtatakda ng kinokontrol ang pagpapatupad ng GCC sa workaround na ito. Ito
Ipinapalagay na ang mga na-abort na pag-access sa anumang byte sa mga sumusunod na rehiyon ay walang panig
epekto:

1. ang memorya na inookupahan ng stack frame ng kasalukuyang function;

2. ang memorya na inookupahan ng isang papasok na stack argument;

3. ang memorya na inookupahan ng isang bagay na may link-time-constant na address.

Responsibilidad ng kernel na tiyakin na ang speculative na pag-access sa mga rehiyong ito
ay talagang ligtas.

Kung ang input program ay naglalaman ng isang function na deklarasyon tulad ng:

void foo (walang bisa);

kung gayon ang pagpapatupad ng "foo" ay dapat pahintulutan ang "j foo" at "jal foo" na maisakatuparan
speculatively. Iginagalang ng GCC ang paghihigpit na ito para sa mga function na kino-compile nito mismo. Ito
inaasahan ang mga non-GCC function (gaya ng hand-written assembly code) na gawin din ang parehong.

Ang opsyon ay may tatlong anyo:

-mr10k-cache-barrier=load-store
Maglagay ng cache barrier bago ang isang load o store na maaaring maisip na maisakatuparan
at baka may side effect yan kahit aborted.

-mr10k-cache-barrier=store
Magpasok ng cache barrier bago ang isang tindahan na maaaring isagawa nang haka-haka at
na maaaring magkaroon ng mga side effect kahit na i-abort.

-mr10k-cache-barrier=wala
Huwag paganahin ang paglalagay ng mga hadlang sa cache. Ito ang default na setting.

-mflush-func=func
-mno-flush-func
Tinutukoy ang function na tatawagan upang i-flush ang I at D na mga cache, o upang hindi tumawag ng anuman
function. Kung tinawag, ang function ay dapat kumuha ng parehong mga argumento bilang ang karaniwan
"_flush_func()", iyon ay, ang address ng hanay ng memorya kung saan naroroon ang cache
flushed, ang laki ng memory range, at ang numero 3 (upang i-flush ang parehong cache). Ang
Ang default ay depende sa target na GCC ay na-configure, ngunit karaniwan ay alinman
_flush_func or __cpu_flush.

mbranch-cost=num
Itakda ang halaga ng mga sangay sa halos num "simpleng" mga tagubilin. Ang gastos na ito ay a
heuristic at hindi garantisadong makakapagdulot ng mga pare-parehong resulta sa mga release. Isang zero
paulit-ulit na pinipili ng gastos ang default, na batay sa -mtune setting na ito.

-malamang
-mno-branch-malamang
Paganahin o huwag paganahin ang paggamit ng mga tagubiling Malamang na Sangay, anuman ang default para sa
napiling arkitektura. Bilang default, maaaring mabuo ang mga tagubiling Malamang sa Sangay kung
sinusuportahan sila ng napiling arkitektura. Ang isang pagbubukod ay para sa MIPS32 at
Mga arkitektura at processor ng MIPS64 na nagpapatupad ng mga arkitektura na iyon; para sa mga iyon,
Ang mga tagubiling Malamang sa Sangay ay hindi bubuo bilang default dahil ang MIPS32 at
Ang mga arkitektura ng MIPS64 ay partikular na hindi ginagamit ang kanilang paggamit.

-mfp-exceptions
-mno-fp-exceptions
Tinutukoy kung pinagana ang mga FP exception. Nakakaapekto ito sa kung paano namin iniiskedyul ang FP
mga tagubilin para sa ilang mga processor. Ang default ay ang mga FP exception ay pinagana.

Halimbawa, sa SB-1, kung ang mga pagbubukod ng FP ay hindi pinagana, at naglalabas kami ng 64-bit
code, pagkatapos ay maaari naming gamitin ang parehong FP pipe. Kung hindi, maaari lang tayong gumamit ng isang FP pipe.

-mvr4130-align
-mno-vr4130-align
Ang VR4130 pipeline ay two-way superscalar, ngunit maaari lamang magbigay ng dalawang tagubilin
magkasama kung ang una ay 8-byte na nakahanay. Kapag pinagana ang opsyong ito, gagawin ng GCC
ihanay ang mga pares ng mga tagubilin na sa tingin nito ay dapat isagawa nang magkatulad.

May epekto lang ang opsyong ito kapag nag-o-optimize para sa VR4130. Karaniwan itong gumagawa ng code
mas mabilis, ngunit sa kapinsalaan ng pagpapalaki nito. Ito ay pinagana bilang default sa
antas ng pag-optimize -O3.

-msynci
-mno-synci
I-enable (disable) ang pagbuo ng mga "synci" na mga tagubilin sa mga arkitektura na sumusuporta dito.
Ang "synci" na mga tagubilin (kung pinagana) ay bubuo kapag
"__builtin___clear_cache()" ay pinagsama-sama.

Nagde-default ang opsyong ito sa "-mno-synci", ngunit maaaring ma-override ang default sa pamamagitan ng pag-configure
na may "--with-synci".

Kapag nag-compile ng code para sa mga single processor system, sa pangkalahatan ay ligtas na gamitin ang "synci".
Gayunpaman, sa maraming mga multi-core (SMP) system, hindi nito ipapawalang-bisa ang pagtuturo
cache sa lahat ng mga core at maaaring humantong sa hindi natukoy na gawi.

-mrelax-pic-calls
-mno-relax-pic-calls
Subukang gawing mga direktang tawag ang mga PIC na tawag na karaniwang ipinapadala sa pamamagitan ng rehistrong $25.
Posible lamang ito kung mareresolba ng linker ang patutunguhan sa oras ng pag-link at kung
ang destinasyon ay nasa saklaw para sa isang direktang tawag.

-mrelax-pic-calls ay ang default kung ang GCC ay na-configure na gumamit ng isang assembler at a
linker na sumusuporta sa ".reloc" assembly directive at "-mexplicit-relocs" ay nasa
epekto. Gamit ang "-mno-explicit-relocs", ang pag-optimize na ito ay maaaring gawin ng
assembler at ang linker lamang nang walang tulong mula sa compiler.

-mmcount-ra-address
-mno-mcount-ra-address
Maglabas (huwag maglabas) ng code na nagpapahintulot sa "_mcount" na baguhin ang pagbabalik ng function ng pagtawag
tirahan. Kapag pinagana, pinalawak ng opsyong ito ang karaniwang interface na "_mcount" gamit ang bago
ra-address parameter, na may uri na "intptr_t *" at ipinapasa sa rehistrong $12.
Maaaring baguhin ng "_mcount" ang return address sa pamamagitan ng paggawa ng pareho sa mga sumusunod:

· Ibinabalik ang bagong address sa rehistro $31.

· Pag-iimbak ng bagong address sa "*ra-address", Kung ra-address ay nonnull.

Ang default ay -mno-mcount-ra-address.

MMIX Options

Ang mga opsyon na ito ay tinukoy para sa MMIX:

-mlibfuncs
-mno-libfuncs
Tukuyin na ang mga intrinsic na function ng library ay pinagsama-sama, na ipinapasa ang lahat ng mga halaga
nagrerehistro, anuman ang laki.

-mepsilon
-mno-epsilon
Bumuo ng mga tagubilin sa paghahambing ng floating-point na naghahambing sa "rE"
rehistro ng epsilon.

-mabi=mmixware
-mabi=gnu
Bumuo ng code na nagpapasa ng mga parameter ng function at nagbabalik ng mga halaga na (sa tinatawag na
function) ay makikita bilang mga rehistro ng $0 at pataas, kumpara sa GNU ABI na gumagamit ng global
nagrerehistro ng $231 at pataas.

-mzero-extend
-mno-zero-extend
Kapag nagbabasa ng data mula sa memorya sa mga sukat na mas maikli sa 64 bits, gumamit ng (huwag gumamit) ng zero-
pagpapahaba ng mga tagubilin sa pag-load bilang default, sa halip na mga tagubilin sa pagpapalawak ng pag-sign.

-mknuthdiv
-mno-knuthdiv
Gawin ang resulta ng isang dibisyon na nagbubunga ng isang natitira ay may parehong tanda ng divisor.
Gamit ang default, -mno-knuthdiv, ang tanda ng natitira ay sumusunod sa tanda ng
dibidendo. Ang parehong mga pamamaraan ay may bisa sa aritmetika, ang huli ay halos eksklusibo
ginagamit.

-mtoplevel-mga simbolo
-mno-toplevel-symbols
Prepend (huwag magprepend) a : sa lahat ng pandaigdigang simbolo, para magamit ang assembly code
gamit ang "PREFIX" assembly directive.

- melf
Bumuo ng executable sa ELF format, sa halip na default mmo format na ginamit ng
ang mmix simulator.

-mbranch-hula
-mno-branch-predict
Gamitin (huwag gamitin) ang malamang na-branch na mga tagubilin, kapag static na hula ng sangay
ay nagpapahiwatig ng isang malamang na sangay.

-mbase-address
-mno-base-address
Bumuo (huwag bumuo) ng code na gumagamit base addresses. Paggamit ng base address
awtomatikong bumubuo ng isang kahilingan (hinahawakan ng assembler at ng linker) para sa a
pare-pareho na mai-set up sa isang pandaigdigang rehistro. Ang rehistro ay ginagamit para sa isa o higit pang base
tugunan ang mga kahilingan sa loob ng saklaw na 0 hanggang 255 mula sa halagang hawak sa rehistro. Ang
sa pangkalahatan ay humahantong sa maikli at mabilis na code, ngunit ang bilang ng iba't ibang mga item ng data na
maaaring matugunan ay limitado. Nangangahulugan ito na isang program na gumagamit ng maraming static na data
maaaring mangailangan -mno-base-address.

-msingle-exit
-mno-single-exit
Pilitin (huwag pilitin) ang nabuong code na magkaroon ng isang exit point sa bawat function.

MN10300 Options

mga ito -m Ang mga opsyon ay tinukoy para sa mga arkitektura ng Matsushita MN10300:

-mult-bug
Bumuo ng code upang maiwasan ang mga bug sa mga tagubilin sa multiply para sa mga processor ng MN10300.
Ito ang default.

-mno-mult-bug
Huwag bumuo ng code upang maiwasan ang mga bug sa mga tagubilin sa multiply para sa MN10300
processors.

-mam33
Bumuo ng code gamit ang mga feature na partikular sa AM33 processor.

-mno-am33
Huwag bumuo ng code gamit ang mga feature na partikular sa AM33 processor. Ito ang
default.

-mam33-2
Bumuo ng code gamit ang mga feature na partikular sa AM33/2.0 processor.

-mam34
Bumuo ng code gamit ang mga feature na partikular sa AM34 processor.

-mtune=uri ng cpu
Gamitin ang mga katangian ng timing ng ipinahiwatig na uri ng CPU kapag nag-iiskedyul ng mga tagubilin.
Hindi nito binabago ang naka-target na uri ng processor. Ang uri ng CPU ay dapat isa sa
mn10300, am33, am33-2pm or am34.

-mreturn-pointer-on-d0
Kapag bumubuo ng isang function na nagbabalik ng isang pointer, ibalik ang pointer sa parehong "a0" at
"d0". Kung hindi, ang pointer ay ibinalik lamang sa a0, at sinusubukang tawagan ito
ang mga function na walang prototype ay magreresulta sa mga error. Tandaan na ang opsyong ito ay naka-on
default; gamitin -mno-return-pointer-on-d0 upang hindi paganahin ito.

-mno-crt0
Huwag mag-link sa C run-time initialization object file.

-magpahinga
Ipahiwatig sa linker na dapat itong magsagawa ng relaxation optimization pass sa
paikliin ang mga branch, tawag at ganap na memory address. May epekto lang ang opsyong ito
kapag ginamit sa command line para sa huling hakbang ng link.

Ginagawang imposible ng opsyong ito ang simbolikong pag-debug.

-mliw
Payagan ang compiler na bumuo Mahaba Pagtuturo Salita mga tagubilin kung ang target ay ang
AM33 o mamaya. Ito ang default. Ang pagpipiliang ito ay tumutukoy sa preprocessor macro
__LIW__.

-mnoliw
Huwag payagan ang compiler na bumuo Mahaba Pagtuturo Salita mga tagubilin. Ang pagpipiliang ito
tumutukoy sa preprocessor macro __NO_LIW__.

-msetlb
Payagan ang compiler na bumuo ng SETLB at Lcc mga tagubilin kung ang target ay ang
AM33 o mamaya. Ito ang default. Ang pagpipiliang ito ay tumutukoy sa preprocessor macro
__SETLB__.

-mnosetlb
Huwag payagan ang compiler na bumuo SETLB or Lcc mga tagubilin. Tinutukoy ng pagpipiliang ito
ang preprocessor macro __NO_SETLB__.

PDP-11 Options

Ang mga opsyong ito ay tinukoy para sa PDP-11:

-mfpu
Gumamit ng hardware FPP floating point. Ito ang default. (FIS floating point sa
Ang PDP-11/40 ay hindi suportado.)

-msoft-float
Huwag gumamit ng hardware floating point.

-mac0
Ibalik ang mga resulta ng floating-point sa ac0 (fr0 sa Unix assembler syntax).

-mno-ac0
Ibalik ang mga resulta ng floating-point sa memorya. Ito ang default.

-m40
Bumuo ng code para sa isang PDP-11/40.

-m45
Bumuo ng code para sa isang PDP-11/45. Ito ang default.

-m10
Bumuo ng code para sa isang PDP-11/10.

-mbcopy-built
Gumamit ng mga inline na pattern na "movmemhi" para sa pagkopya ng memorya. Ito ang default.

-mbcopy
Huwag gumamit ng inline na "movmemhi" na mga pattern para sa pagkopya ng memorya.

-mint16
-mno-int32
Gumamit ng 16-bit na "int". Ito ang default.

-mint32
-mno-int16
Gumamit ng 32-bit na "int".

-mfloat64
-mno-float32
Gumamit ng 64-bit na "float". Ito ang default.

-mfloat32
-mno-float64
Gumamit ng 32-bit na "float".

-mabshi
Gumamit ng pattern na "abshi2". Ito ang default.

-mno-abshi
Huwag gumamit ng pattern na "abshi2".

-mbranch-mahal
Kunwari mahal ang mga sangay. Ito ay para sa pag-eksperimento sa pagbuo ng code
lamang.

-mbranch-mura
Huwag magpanggap na ang mga sanga ay mahal. Ito ang default.

-munix-asm
Gumamit ng Unix assembler syntax. Ito ang default kapag na-configure para sa pdp11-*-bsd.

-mdec-asm
Gamitin ang DEC assembler syntax. Ito ang default kapag na-configure para sa anumang target na PDP-11
bukod sa pdp11-*-bsd.

picoChip Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng picoChip:

-mae=ae_type
Itakda ang set ng pagtuturo, set ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo para sa array
uri ng elemento ae_type. Mga sinusuportahang halaga para sa ae_type ay ANUMANG, MUL, at MAC.

-mae=SINO pumipili ng ganap na generic na uri ng AE. Ang code na nabuo gamit ang opsyong ito ay
tumakbo sa alinman sa iba pang mga uri ng AE. Ang code ay hindi magiging kasing episyente ng kung
pinagsama-sama para sa isang partikular na uri ng AE, at ilang uri ng operasyon (hal., pagpaparami)
hindi gagana nang maayos sa lahat ng uri ng AE.

-mae=MUL pumipili ng uri ng MUL AE. Ito ang pinakakapaki-pakinabang na uri ng AE para sa pinagsama-samang code,
at ito ang default.

-mae=MAC pumipili ng DSP-style MAC AE. Maaaring magdusa ang code na pinagsama-sama sa opsyong ito
mahinang pagganap ng byte (char) na pagmamanipula, dahil ang DSP AE ay hindi nagbibigay
suporta sa hardware para sa byte load/store.

-msymbol-as-address
Paganahin ang compiler na direktang gumamit ng pangalan ng simbolo bilang isang address sa isang load/store
pagtuturo, nang hindi muna ito nilo-load sa isang rehistro. Karaniwan, ang paggamit nito
ang opsyon ay bubuo ng mas malalaking programa, na tumatakbo nang mas mabilis kaysa kapag ang opsyon ay hindi
ginamit. Gayunpaman, nag-iiba ang mga resulta sa bawat programa, kaya naiwan ito bilang isang user
opsyon, sa halip na permanenteng pinagana.

-mno-inefficient-babala
Hindi pinapagana ang mga babala tungkol sa pagbuo ng hindi mahusay na code. Ang mga babalang ito ay maaaring
nabuo, halimbawa, kapag nag-compile ng code na nagsasagawa ng mga operasyon sa memorya sa antas ng byte
sa uri ng MAC AE. Ang MAC AE ay walang suporta sa hardware para sa byte-level na memorya
mga operasyon, kaya lahat ng byte load/store ay dapat na synthesize mula sa word load/store
mga operasyon. Ito ay hindi mahusay at isang babala ay bubuo na nagsasaad sa
programmer na dapat nilang muling isulat ang code upang maiwasan ang mga pagpapatakbo ng byte, o upang i-target ang isang
Uri ng AE na mayroong kinakailangang suporta sa hardware. Ang pagpipiliang ito ay nagbibigay-daan sa babala sa
i-off.

PowerPC Options

Ang mga ito ay nakalista sa ilalim

RL78 Options

-msim
Mga link sa karagdagang target na library upang suportahan ang operasyon sa loob ng isang simulator.

-mmul=wala
-mmul=g13
-mmul=rl78
Tinutukoy ang uri ng suporta sa pagpaparami ng hardware na gagamitin. Ang default ay
"wala", na gumagamit ng software multiplication functions. Ang opsyong "g13" ay para sa
hardware multiply/divide peripheral lamang sa RL78/G13 target. Ang "rl78" na opsyon
ay para sa karaniwang pagpaparami ng hardware na tinukoy sa RL78 software manual.

IBM RS / 6000 at PowerPC Options

mga ito -m ang mga opsyon ay tinukoy para sa IBM RS/6000 at PowerPC:

-makapangyarihan
-mno-kapangyarihan
-kapangyarihan2
-mno-kapangyarihan2
-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
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Sinusuportahan ng GCC ang dalawang kaugnay na arkitektura ng set ng pagtuturo para sa RS/6000 at PowerPC.
Ang Kapangyarihan Ang set ng pagtuturo ay ang mga tagubiling sinusuportahan ng ilog chip set na ginamit
sa orihinal na RS/6000 system at ang PowerPC set ng pagtuturo ay ang arkitektura ng
ang Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, at ang IBM 4xx, 6xx, at
mga follow-on na microprocessor.

Ang alinman sa arkitektura ay hindi isang subset ng isa pa. Gayunpaman mayroong isang malaking karaniwang subset
ng mga tagubilin na sinusuportahan ng pareho. Ang isang rehistro ng MQ ay kasama sa mga processor
sumusuporta sa POWER architecture.

Ginagamit mo ang mga opsyong ito para tukuyin kung aling mga tagubilin ang available sa processor mo
ay gumagamit. Tinutukoy ang default na halaga ng mga opsyong ito kapag kino-configure ang GCC.
Tinutukoy ang -mcpu=cpu_type Ino-override ang detalye ng mga opsyong ito. Kami
inirerekomenda mong gamitin ang -mcpu=cpu_type opsyon kaysa sa mga opsyong nakalista sa itaas.

Ang -makapangyarihan pinapayagan ng opsyon ang GCC na bumuo ng mga tagubilin na matatagpuan lamang sa
POWER architecture at gamitin ang MQ register. Tinutukoy -kapangyarihan2 nagpapahiwatig -Kapangyarihan at
pinapayagan din ang GCC na bumuo ng mga tagubilin na naroroon sa arkitektura ng POWER2
ngunit hindi ang orihinal na arkitektura ng POWER.

Ang -mpowerpc pinapayagan ng opsyon ang GCC na bumuo ng mga tagubilin na matatagpuan lamang sa
32-bit na subset ng arkitektura ng PowerPC. Tinutukoy -mpowerpc-gpopt nagpapahiwatig
-mpowerpc at pinapayagan din ang GCC na gamitin ang opsyonal na mga tagubilin sa arkitektura ng PowerPC
ang pangkat na Pangkalahatang Layunin, kabilang ang floating-point square root. Tinutukoy
-mpowerpc-gfxopt nagpapahiwatig -mpowerpc at pinapayagan din ang GCC na gamitin ang opsyonal na PowerPC
mga tagubilin sa arkitektura sa pangkat ng Graphics, kabilang ang pagpili ng floating-point.

Ang -mmfcrf pinapayagan ng opsyon ang GCC na bumuo ng paglipat mula sa field ng rehistro ng kondisyon
pagtuturo na ipinatupad sa POWER4 processor at iba pang mga processor na sumusuporta sa
Arkitektura ng PowerPC V2.01. Ang -mpopcntb pinapayagan ng opsyon ang GCC na bumuo ng popcount
at double-precision FP reciprocal estimate instruction na ipinatupad sa POWER5
processor at iba pang mga processor na sumusuporta sa arkitektura ng PowerPC V2.02. Ang
-mpopcntd pinapayagan ng opsyon ang GCC na buuin ang pagtuturo ng popcount na ipinatupad sa
POWER7 processor at iba pang processor na sumusuporta sa PowerPC V2.06 architecture.
Ang -mfprnd Binibigyang-daan ng opsyon ang GCC na bumuo ng FP round sa integer na mga tagubilin
ipinatupad sa POWER5+ processor at iba pang processor na sumusuporta sa PowerPC
V2.03 na arkitektura. Ang -mcmpb Binibigyang-daan ng opsyon ang GCC na bumuo ng mga compare byte
pagtuturo na ipinatupad sa POWER6 processor at iba pang mga processor na sumusuporta sa
Arkitektura ng PowerPC V2.05. Ang -mmfpgpr pinapayagan ng opsyon ang GCC na bumuo ng FP move
sa/mula sa pangkalahatang layunin na mga tagubilin sa pagpaparehistro na ipinatupad sa POWER6X processor at
iba pang mga processor na sumusuporta sa pinalawig na arkitektura ng PowerPC V2.05. Ang -mhard-dfp
Binibigyang-daan ng opsyon ang GCC na buuin ang decimal floating-point na mga tagubilin na ipinatupad sa
ilang POWER processor.

Ang -mpowerpc64 pinapayagan ng opsyon ang GCC na bumuo ng karagdagang 64-bit na mga tagubilin na
ay matatagpuan sa buong arkitektura ng PowerPC64 at para ituring ang mga GPR bilang 64-bit, doubleword
dami. Nagde-default ang GCC sa -mno-powerpc64.

Kung tinukoy mo pareho -mno-kapangyarihan at -mno-powerpc, Gagamitin lang ng GCC ang mga tagubilin sa
ang karaniwang subset ng parehong arkitektura kasama ang ilang espesyal na AIX common-mode na tawag, at
hindi gagamit ng MQ register. Tinutukoy ang pareho -makapangyarihan at -mpowerpc pinahihintulutan ang GCC na
gumamit ng anumang pagtuturo mula sa alinmang arkitektura at upang payagan ang paggamit ng rehistro ng MQ;
tukuyin ito para sa Motorola MPC601.

-mnew-mnemonics
-amag-mnemonics
Piliin kung aling mnemonics ang gagamitin sa nabuong assembler code. Sa -mnew-mnemonics,
Ginagamit ng GCC ang assembler mnemonics na tinukoy para sa arkitektura ng PowerPC. Sa
-amag-mnemonics ginagamit nito ang assembler mnemonics na tinukoy para sa POWER architecture.
Ang mga tagubiling tinukoy sa isang arkitektura lamang ay may isang mnemonic lamang; Ginagamit yan ng GCC
mnemonic kahit alin sa mga opsyong ito ang tinukoy.

Nagde-default ang GCC sa mga mnemonic na angkop para sa ginagamit na arkitektura. Tinutukoy
-mcpu=cpu_type minsan ay na-override ang halaga ng mga opsyong ito. Maliban kung nagtatayo ka
isang cross-compiler, karaniwang hindi mo dapat tukuyin ang alinman -mnew-mnemonics or
-amag-mnemonics, ngunit sa halip ay dapat tanggapin ang default.

-mcpu=cpu_type
Itakda ang uri ng arkitektura, irehistro ang paggamit, pagpili ng mnemonics, at pag-iiskedyul ng pagtuturo
mga parameter para sa uri ng makina cpu_type. Mga sinusuportahang halaga para sa cpu_type ay 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, kapangyarihan, power2, power3, power4, power5,
kapangyarihan5+, power6, kapangyarihan6x, power7, pangkaraniwan, kapangyarihan pc, powerpc64, ilog, ilog1, ilog2, RSC,
at rs64.

-mcpu=karaniwan pumipili ng ganap na generic na processor. Nabuo ang code sa ilalim ng opsyong ito
tatakbo sa anumang POWER o PowerPC processor. Gagamitin lamang ng GCC ang mga tagubilin sa
karaniwang subset ng parehong arkitektura, at hindi gagamitin ang rehistro ng MQ. Ipinapalagay ng GCC a
generic na modelo ng processor para sa mga layunin ng pag-iiskedyul.

-mcpu=kapangyarihan, -mcpu=kapangyarihan2, -mcpu=powerpc, at -mcpu=powerpc64 tukuyin ang generic na KAPANGYARIHAN,
POWER2, ​​purong 32-bit na PowerPC (ibig sabihin, hindi MPC601), at 64-bit na arkitektura ng PowerPC
mga uri ng makina, na may naaangkop, generic na modelo ng processor na ipinapalagay para sa pag-iskedyul
mga layunin.

Ang iba pang mga opsyon ay tumutukoy sa isang partikular na processor. Nabuo ang code sa ilalim ng mga opsyong iyon
ay pinakamahusay na tatakbo sa processor na iyon, at maaaring hindi tumakbo sa iba.

Ang -mcpu awtomatikong paganahin o huwag paganahin ang mga sumusunod na opsyon:

-maltivec -mfprnd -mhard-float -mmfcrf -marami -mnew-mnemonics -mpopcntb
-mpopcntd -makapangyarihan -kapangyarihan2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

Ang mga partikular na opsyon na itinakda para sa anumang partikular na CPU ay mag-iiba sa pagitan ng mga bersyon ng compiler,
depende sa kung anong setting ang tila gumagawa ng pinakamainam na code para sa CPU na iyon; hindi ito
kinakailangang sumasalamin sa aktwal na mga kakayahan ng hardware. Kung nais mong magtakda ng isang
indibidwal na opsyon sa isang partikular na halaga, maaari mong tukuyin ito pagkatapos ng -mcpu pagpipilian,
gaya ng -mcpu=970 -mno-altivec.

Sa AIX, ang -maltivec at -mpowerpc64 ang mga opsyon ay hindi pinagana o hindi pinagana ng -mcpu
opsyon sa kasalukuyan dahil walang ganap na suporta ang AIX para sa mga opsyong ito. Maaari mong
paganahin pa rin o huwag paganahin ang mga ito nang paisa-isa kung sigurado kang gagana ito sa iyong
kapaligiran.

-mtune=cpu_type
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type, ngunit huwag itakda
ang uri ng arkitektura, paggamit ng rehistro, o pagpili ng mnemonics, bilang -mcpu=cpu_type
ay. Ang parehong mga halaga para sa cpu_type ay ginagamit para sa -mtune tulad ng -mcpu. Kung pareho
tinukoy, gagamitin ng nabuong code ang arkitektura, mga rehistro, at hanay ng mnemonics
by -mcpu, ngunit ang mga parameter ng pag-iiskedyul na itinakda ni -mtune.

-mcmodel=maliit
Bumuo ng PowerPC64 code para sa maliit na modelo: Ang TOC ay limitado sa 64k.

-mcmodel=medium
Bumuo ng PowerPC64 code para sa medium na modelo: Maaaring tapos na ang TOC at iba pang static na data
sa kabuuang sukat na 4G.

-mcmodel=malaki
Bumuo ng PowerPC64 code para sa malaking modelo: Maaaring hanggang 4G ang laki ng TOC. Iba pa
ang data at code ay limitado lamang ng 64-bit address space.

-maltivec
-mno-altivec
Bumuo ng code na gumagamit ng (hindi gumagamit) ng mga tagubiling AltiVec, at paganahin din ang paggamit
ng mga built-in na function na nagbibigay-daan sa mas direktang pag-access sa set ng pagtuturo ng AltiVec.
Maaaring kailanganin mo ring itakda -mabi=altivec upang ayusin ang kasalukuyang ABI sa AltiVec ABI
mga pagpapahusay.

-mvrsave
-mno-vrsave
Bumuo ng mga tagubilin sa VRSAVE kapag bumubuo ng AltiVec code.

-mgen-cell-microcode
Bumuo ng mga tagubilin sa Cell microcode

-mwarn-cell-microcode
Babala kapag may ipapalabas na pagtuturo ng Cell microcode. Isang halimbawa ng Cell
Ang pagtuturo ng microcode ay isang variable shift.

-msecure-plt
Bumuo ng code na nagbibigay-daan sa ld at ld.so na bumuo ng mga executable at shared library
non-exec .plt at .got na mga seksyon. Ito ay isang PowerPC 32-bit SYSV ABI na opsyon.

-mbss-plt
Bumuo ng code na gumagamit ng BSS .plt na seksyon na pinupunan ng ld.so, at nangangailangan ng .plt at
.nakakuha ng mga seksyon na parehong nasusulat at maipapatupad. Ito ay isang PowerPC 32-bit SYSV
Opsyon ng ABI.

-misel
-mno-isel
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga tagubilin ng ISEL.

-misel=Oo hindi
Ang switch na ito ay hindi na ginagamit. Gamitin -misel at -mno-isel sa halip.

-mspe
-mno-spe
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga tagubilin ng SPE simd.

-may kapansanan
-mno-pares
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng PAIRED simd na mga tagubilin.

-mspe=Oo hindi
Ang opsyon na ito ay hindi na ginagamit. Gamitin -mspe at -mno-spe sa halip.

-mvsx
-mno-vsx
Bumuo ng code na gumagamit ng (hindi gumagamit) ng mga tagubiling vector/scalar (VSX), at gayundin
paganahin ang paggamit ng mga built-in na function na nagbibigay-daan sa mas direktang pag-access sa VSX
Listahan ng dapat gagawin.

-mfloat-gprs=oo/single/doble/hindi
-mfloat-gprs
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga floating-point na operasyon sa
pangkalahatang layunin na mga rehistro para sa mga arkitektura na sumusuporta dito.

Ang argumento oo or solong nagbibigay-daan sa paggamit ng single-precision floating-point
operasyon.

Ang argumento double nagbibigay-daan sa paggamit ng single at double-precision floating-point
operasyon.

Ang argumento hindi hindi pinapagana ang mga pagpapatakbo ng floating-point sa mga rehistro ng pangkalahatang layunin.

Ang opsyong ito ay kasalukuyang available lamang sa MPC854x.

-m32
-m64
Bumuo ng code para sa 32-bit o 64-bit na kapaligiran ng Darwin at SVR4 na mga target (kabilang ang
GNU/Linux). Ang 32-bit na kapaligiran ay nagtatakda ng int, mahaba at pointer sa 32 bits at
bumubuo ng code na tumatakbo sa anumang variant ng PowerPC. Ang 64-bit na kapaligiran ay nagtatakda sa
32 bits at mahaba at pointer sa 64 bits, at bumubuo ng code para sa PowerPC64, tulad ng para sa
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
Baguhin ang pagbuo ng TOC (Table Of Contents), na nilikha para sa bawat
maipapatupad na file. Ang -mfull-toc ang opsyon ay pinili bilang default. Sa kasong iyon, GCC
ay maglalaan ng hindi bababa sa isang entry sa TOC para sa bawat natatanging sanggunian na hindi awtomatikong variable
sa iyong programa. Maglalagay din ang GCC ng mga floating-point constant sa TOC. gayunpaman,
16,384 entries lang ang available sa TOC.

Kung nakatanggap ka ng mensahe ng error sa linker na nagsasabing umapaw ka na sa available
TOC space, maaari mong bawasan ang dami ng TOC space na ginamit sa -mno-fp-in-toc at
-mno-sum-in-toc mga pagpipilian. -mno-fp-in-toc pinipigilan ang GCC na maglagay ng floating-point
constants sa TOC at -mno-sum-in-toc pinipilit ang GCC na bumuo ng code para kalkulahin ang
kabuuan ng isang address at isang pare-pareho sa oras ng pagtakbo sa halip na ilagay ang kabuuan na iyon sa TOC.
Maaari mong tukuyin ang isa o pareho sa mga opsyong ito. Ang bawat isa ay nagiging sanhi ng GCC upang makagawa ng napaka
bahagyang mas mabagal at mas malaking code sa gastos ng pagtitipid sa espasyo ng TOC.

Kung maubusan ka pa rin ng espasyo sa TOC kahit na tinukoy mo ang dalawang opsyong ito,
tukuyin -mminimal-toc sa halip. Ang opsyon na ito ay nagiging sanhi ng GCC na gumawa lamang ng isang TOC entry para sa
bawat file. Kapag tinukoy mo ang opsyong ito, gagawa ang GCC ng code na mas mabagal at
mas malaki ngunit gumagamit ng napakaliit na espasyo ng TOC. Maaaring naisin mong gamitin ang opsyong ito
lamang sa mga file na naglalaman ng hindi gaanong madalas na executed code.

-maix64
-maix32
I-enable ang 64-bit AIX ABI at calling convention: 64-bit pointer, 64-bit "long" type, at
ang imprastraktura na kailangan upang suportahan sila. Tinutukoy -maix64 nagpapahiwatig -mpowerpc64 at
-mpowerpc, Habang -maix32 hindi pinapagana ang 64-bit ABI at nagpapahiwatig -mno-powerpc64. GCC
default sa -maix32.

-mxl-compat
-mno-xl-compat
Gumawa ng code na mas malapit sa IBM XL compiler semantics kapag gumagamit ng AIX-
katugmang ABI. Ipasa ang mga floating-point na argumento sa mga prototype na function na lampas sa
irehistro ang save area (RSA) sa stack bilang karagdagan sa mga argumento na FPR. Wag umasa
na ang pinakamahalagang double sa 128-bit long double value ay wastong bilugan kapag
paghahambing ng mga halaga at pag-convert sa doble. Gumamit ng mga pangalan ng simbolo ng XL para sa mahabang doble
pagsuporta sa mga gawain.

Ang AIX calling convention ay pinalawig ngunit hindi paunang naidokumento upang mahawakan ang isang
nakakubli K&R C kaso ng pagtawag ng isang function na kumukuha ng address ng mga argumento nito
mas kaunting mga argumento kaysa sa ipinahayag. Ina-access ng mga compiler ng IBM XL ang mga floating-point na argumento na
hindi magkasya sa RSA mula sa stack kapag ang isang subroutine ay naipon nang wala
pag-optimize. Dahil ang palaging pag-iimbak ng mga floating-point na argumento sa stack ay
hindi mabisa at bihirang kailangan, ang opsyong ito ay hindi pinagana bilang default at ito lang
kinakailangan kapag tumatawag sa mga subroutine na pinagsama-sama ng mga compiler ng IBM XL nang walang pag-optimize.

-mpe
Suporta IBM RS / 6000 SP Pagpaparis kapaligiran (PE). Mag-link ng application na isinulat para gamitin
pagpasa ng mensahe na may espesyal na startup code upang paganahin ang application na tumakbo. Ang
ang sistema ay dapat may naka-install na PE sa karaniwang lokasyon (/usr/lpp/ppe.poe/), o ang
panoorin file ay dapat na ma-override ng -specs= opsyon upang tukuyin ang naaangkop
lokasyon ng direktoryo. Ang Parallel Environment ay hindi sumusuporta sa mga thread, kaya ang -mpe
opsyon at ang -pthread hindi tugma ang opsyon.

-malign-natural
-malign-power
Sa AIX, 32-bit Darwin, at 64-bit PowerPC GNU/Linux, ang opsyon -malign-natural
override ang ABI-defined alignment ng mas malalaking uri, gaya ng floating-point doubles,
sa kanilang natural na sukat na nakabatay sa hangganan. Ang pagpipilian -malign-power inutusan ang GCC na
sundin ang mga panuntunan sa alignment na tinukoy ng ABI. Nagde-default ang GCC sa karaniwang alignment
tinukoy sa ABI.

Sa 64-bit na Darwin, ang natural na pagkakahanay ay ang default, at -malign-power Hindi
suportado.

-msoft-float
-mhard-float
Bumuo ng code na hindi gumagamit (gumagamit) ng floating-point register set. Software
Ang floating-point emulation ay ibinibigay kung gagamitin mo ang -msoft-float opsyon, at ipasa ang
opsyon sa GCC kapag nagli-link.

-msingle-float
-mdouble-float
Bumuo ng code para sa single- o double-precision floating-point operations.
-mdouble-float nagpapahiwatig -msingle-float.

-msimple-fpu
Huwag bumuo ng sqrt at div na mga tagubilin para sa hardware floating-point unit.

-mfpu
Tukuyin ang uri ng floating-point unit. Ang mga wastong halaga ay sp_lite (katumbas ng
-msingle-float -msimple-fpu), dp_lite (katumbas ng -mdouble-float -msimple-fpu),
sp_full (katumbas ng -msingle-float), at dp_full (katumbas ng -mdouble-float).

-mxilinx-fpu
Magsagawa ng mga pag-optimize para sa floating-point unit sa Xilinx PPC 405/440.

-marami
-mno-marami
Bumuo ng code na gumagamit (hindi gumagamit) ng pag-load ng maraming mga tagubilin sa salita at ang
mag-imbak ng maraming mga tagubilin sa salita. Ang mga tagubiling ito ay nabuo bilang default sa
POWER system, at hindi nabuo sa PowerPC system. Huwag gamitin -marami sa maliit na-
endian PowerPC system, dahil hindi gumagana ang mga tagubiling iyon kapag naka-in ang processor
little-endian mode. Ang mga pagbubukod ay PPC740 at PPC750 na nagpapahintulot sa mga ito
mga tagubilin sa little-endian mode.

-mstring
-mno-kuwerdas
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin sa pag-load ng string at sa tindahan
string na mga tagubilin sa salita upang i-save ang maramihang mga rehistro at gumawa ng maliliit na block moves. Ang mga ito
Ang mga tagubilin ay nabuo bilang default sa mga POWER system, at hindi nabuo sa PowerPC
mga sistema. Huwag gamitin -mstring sa little-endian PowerPC system, dahil ang mga iyon
ang mga tagubilin ay hindi gumagana kapag ang processor ay nasa little-endian mode. Ang mga eksepsiyon
ay PPC740 at PPC750 na nagpapahintulot sa mga tagubiling ito sa little-endian mode.

-mupdate
-mno-update
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin sa pag-load o tindahan na nag-a-update sa
base register sa address ng kinakalkula na lokasyon ng memorya. Ang mga tagubiling ito
ay nabuo bilang default. Kung gagamit ka -mno-update, may maliit na bintana sa pagitan ng
oras na ang stack pointer ay na-update at ang address ng nakaraang frame ay
naka-imbak, na nangangahulugan ng code na naglalakad sa stack frame sa mga interrupt o maaaring signal
makakuha ng sirang data.

-mavoid-indexed-address
-mno-avoid-indexed-addresses
Bumuo ng code na sumusubok na maiwasan (hindi maiwasan) ang paggamit ng naka-index na load o tindahan
mga tagubilin. Ang mga tagubiling ito ay maaaring magkaroon ng parusa sa pagganap sa mga processor ng Power6
sa ilang partikular na sitwasyon, gaya ng pagtapak sa malalaking hanay na tumatawid sa 16M
hangganan. Ang opsyong ito ay pinagana bilang default kapag tina-target ang Power6 at hindi pinagana
kung hindi man.

-mfused-baliw
-mno-fused-madd
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na multiply at maipon
mga tagubilin. Ang mga tagubiling ito ay nabuo bilang default kung ang hardware na lumulutang na punto
Ginagamit. Ang nakadepende sa makina -mfused-baliw ang opsyon ay nakamapa na ngayon sa makina-
malaya -ffp-contract=mabilis pagpipilian, at -mno-fused-madd ay nakamapa sa
-ffp-contract=off.

-mmulhw
-mno-mulhw
Bumuo ng code na gumagamit (hindi gumagamit) ng kalahating salita na multiply at multiply-accumulate
mga tagubilin sa mga processor ng IBM 405, 440, 464 at 476. Ang mga tagubiling ito ay
nabuo bilang default kapag tina-target ang mga processor na iyon.

-mdlmzb
-mno-dlmzb
Bumuo ng code na gumagamit (hindi gumagamit) ng string-search dlmzb pagtuturo sa IBM
405, 440, 464 at 476 na mga processor. Ang pagtuturo na ito ay nabuo bilang default kapag
pinupuntirya ang mga processor na iyon.

-mno-bit-align
-mbit-align
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (gumagawa) ng mga istruktura at unyon
na naglalaman ng mga bit-field na ihahanay sa base na uri ng bit-field.

Halimbawa, bilang default, isang istraktura na naglalaman ng walang anuman kundi 8 "unsigned" bit-field ng
ang haba 1 ay nakahanay sa isang 4-byte na hangganan at may sukat na 4 na byte. Sa pamamagitan ng paggamit
-mno-bit-align, ang istraktura ay nakahanay sa isang 1-byte na hangganan at 1 byte ang laki.

-mno-strict-align
-mstrict-align
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (ginagawa) ipagpalagay na hindi nakahanay na memorya
ang mga sanggunian ay hahawakan ng system.

-malilipat
-mno-relocatable
Bumuo ng code na nagpapahintulot (hindi pinapayagan) ang isang static na maipapatupad na mailipat sa a
ibang address sa oras ng pagtakbo. Ang isang simpleng naka-embed na PowerPC system loader ay dapat
ilipat ang buong nilalaman ng ".got2" at 4-byte na lokasyon na nakalista sa ".fixup"
seksyon, isang talahanayan ng mga 32-bit na address na nabuo ng opsyong ito. Para gumana ito, lahat
ang mga bagay na pinagsama-sama ay dapat na pinagsama-sama -malilipat or -mrelocatable-lib.
-malilipat ini-align ng code ang stack sa isang 8-byte na hangganan.

-mrelocatable-lib
-mno-relocatable-lib
katulad -malilipat, -mrelocatable-lib bumubuo ng seksyong ".fixup" upang payagan ang static
mga executable na ililipat sa oras ng pagtakbo, ngunit -mrelocatable-lib hindi gumagamit ng
mas maliit na stack alignment ng -malilipat. Mga bagay na pinagsama-sama sa -mrelocatable-lib maaari
maiugnay sa mga bagay na pinagsama-sama sa anumang kumbinasyon ng -malilipat mga pagpipilian.

-mno-toc
-mtoc
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (ginagawa) ipagpalagay na ang register 2 ay naglalaman
isang pointer sa isang pandaigdigang lugar na tumuturo sa mga address na ginamit sa programa.

-maliit
-mlittle-endian
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa processor sa maliit na-
endian mode. Ang -mlittle-endian ang pagpipilian ay pareho sa -maliit.

-malaki
-big-endian
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa processor sa malaking-
endian mode. Ang -big-endian ang pagpipilian ay pareho sa -malaki.

-mdynamic-no-pic
Sa Darwin at Mac OS X system, i-compile ang code para hindi ito mailipat, ngunit iyon
ang mga panlabas na sanggunian nito ay maaaring ilipat. Ang resultang code ay angkop para sa
mga application, ngunit hindi nakabahaging mga aklatan.

-msingle-pic-base
Tratuhin ang rehistro na ginamit para sa PIC addressing bilang read-only, sa halip na i-load ito sa
prologue para sa bawat function. Ang runtime system ang may pananagutan sa pagsisimula nito
magparehistro na may naaangkop na halaga bago magsimula ang pagpapatupad.

-prioritize-restricted-insns=karapatang mauna
Kinokontrol ng opsyong ito ang priyoridad na itinalaga sa dispatch-slot restricted
mga tagubilin sa panahon ng ikalawang pass sa pag-iskedyul. Ang argumento karapatang mauna kumukuha ng halaga
0/1/2 upang italaga hindi/pinakamataas/pangalawa-pinakamataas priyoridad sa dispatch slot restricted
mga tagubilin.

-msched-costly-dep=dependence_type
Kinokontrol ng opsyong ito kung aling mga dependence ang itinuturing na magastos ng target habang
pag-iiskedyul ng pagtuturo. Ang argumento dependence_type kumukuha ng isa sa mga sumusunod
mga halaga: hindi: walang pagtitiwala ay magastos, lahat: lahat ng dependence ay magastos,
true_store_to_load: ang tunay na pagtitiwala mula sa tindahan hanggang sa pagkarga ay magastos, store_to_load: any
Ang pag-asa mula sa tindahan hanggang sa pagkarga ay magastos, numero: anumang pagdepende kung saang latency >=
numero ay magastos.

-minsert-sched-nops=pamamaraan
Kinokontrol ng opsyong ito kung aling nop insertion scheme ang gagamitin sa pangalawa
pagpasa sa pag-iskedyul. Ang argumento pamamaraan tumatagal ng isa sa mga sumusunod na halaga: hindi: Huwag
ipasok ang nops. pad: Pad na may nops anumang dispatch group na may mga bakanteng slot ng isyu,
ayon sa pagpapangkat ng scheduler. regroup_exact: Ipasok ang mga nops para pilitin ang magastos
dependent insns sa magkakahiwalay na grupo. Magpasok ng eksaktong bilang ng maraming nops kung kinakailangan upang pilitin
isang insn sa isang bagong grupo, ayon sa tinantyang pagpapangkat ng processor. numero: Ipasok
nops upang pilitin ang mga mahal na umaasang ins sa magkahiwalay na grupo. Ipasok numero nops to
pilitin ang isang insn sa isang bagong grupo.

-mcall-sysv
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code gamit ang mga convention sa pagtawag na
ay sumusunod sa Marso 1995 na draft ng System V Application Binary Interface, PowerPC
suplemento ng processor. Ito ang default maliban kung na-configure mo ang GCC gamit
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Tukuyin ang pareho -mcall-sysv at -meabi mga pagpipilian.

-mcall-sysv-noeabi
Tukuyin ang pareho -mcall-sysv at -mno-eabi mga pagpipilian.

-mcall-aixdesc
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa AIX operating system.

-mcall-linux
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa Linux-based na GNU
system.

-mcall-freebsd
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa pagpapatakbo ng FreeBSD
system.

-mcall-netbsd
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa pagpapatakbo ng NetBSD
system.

-mcall-openbsd
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa OpenBSD operating
system.

-maix-struct-return
Ibalik ang lahat ng istruktura sa memorya (tulad ng tinukoy ng AIX ABI).

-msvr4-struct-return
Ibalik ang mga istrukturang mas maliit sa 8 byte sa mga rehistro (tulad ng tinukoy ng SVR4 ABI).

-mabi=abi-type
Palawakin ang kasalukuyang ABI gamit ang isang partikular na extension, o alisin ang naturang extension. Wasto
ang mga halaga ay altivec, walang-altivec, spe, walang-spe, ibmlongdouble, ieeelongdouble.

-mabi=spe
Palawakin ang kasalukuyang ABI gamit ang mga extension ng SPE ABI. Hindi nito binabago ang default na ABI,
sa halip, idinaragdag nito ang mga extension ng SPE ABI sa kasalukuyang ABI.

-mabi=no-spe
Huwag paganahin ang mga extension ng Booke SPE ABI para sa kasalukuyang ABI.

-mabi=ibmlongdouble
Baguhin ang kasalukuyang ABI para gumamit ng IBM extended-precision long double. Ito ay isang PowerPC
32-bit na opsyon sa SYSV ABI.

-mabi=ieeelongdouble
Baguhin ang kasalukuyang ABI para gumamit ng IEEE extended-precision long double. Ito ay isang PowerPC
32-bit na opsyon sa Linux ABI.

-prototype
-mno-prototype
Sa System V.4 at naka-embed na PowerPC system ay ipinapalagay na ang lahat ng mga tawag sa variable na argumento
ang mga function ay maayos na na-prototype. Kung hindi, ang compiler ay dapat magpasok ng isang tagubilin
bago ang bawat hindi prototype na tawag upang itakda o i-clear ang bit 6 ng condition code register
(CR) upang isaad kung naipasa ang mga floating-point value sa floating-point
nagrerehistro kung sakaling ang function ay kumuha ng mga variable na argumento. Sa -prototype, mga tawag lang
sa prototyped variable argument function ay itatakda o i-clear ang bit.

-msim
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag sim-crt0.o at
na ang mga karaniwang C library ay libsim.a at libc.a. Ito ang default para sa
powerpc-*-eabisim mga kumpigurasyon.

-mmvme
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libmvme.a at libc.a.

-mga baliw
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libads.a at libc.a.

-myellowknife
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libyk.a at libc.a.

-mvxworks
Sa System V.4 at mga naka-embed na PowerPC system, tukuyin na nagko-compile ka para sa a
Sistema ng VxWorks.

-memb
Sa mga naka-embed na PowerPC system, itakda ang PPC_EMB bit sa ELF flags header upang ipahiwatig
na eabi ginagamit ang mga pinahabang relokasyon.

-meabi
-mno-eabi
Sa System V.4 at naka-embed na PowerPC system ay (hindi) sumusunod sa Naka-embed
Mga Application Binary Interface (eabi) na isang hanay ng mga pagbabago sa System V.4
mga pagtutukoy. Pagpili -meabi nangangahulugan na ang stack ay nakahanay sa isang 8-byte
hangganan, ang isang function na "__eabi" ay tinatawag mula sa "pangunahing" upang i-set up ang kapaligiran ng eabi,
at ang -msdata Maaaring gamitin ng opsyon ang parehong "r2" at "r13" upang tumuro sa dalawang magkahiwalay na maliit na data
mga lugar. Pagpili -mno-eabi nangangahulugan na ang stack ay nakahanay sa isang 16-byte na hangganan, gawin
hindi tumawag ng pagpapasimula ng function mula sa "pangunahing", at ang -msdata gagamitin lamang ang opsyon
"r13" upang tumuro sa isang maliit na lugar ng data. Ang -meabi naka-on ang opsyon bilang default kung ikaw
na-configure ang GCC gamit ang isa sa powerpc*-*-eabi* mga pagpipilian.

-msdata=eabi
Sa System V.4 at naka-embed na PowerPC system, maglagay ng maliit na initialized na "const" global at
static na data sa .sdata2 seksyon, na itinuturo ng rehistrong "r2". Maglagay ng maliit
inisyal na hindi "const" na global at static na data sa .sdata seksyon, na nakatutok
sa pamamagitan ng pagrehistro ng "r13". Maglagay ng maliit na hindi nasimulang global at static na data sa .sbss
seksyon, na katabi ng .sdata seksyon Ang -msdata=eabi Ang opsyon ay
hindi tugma sa -malilipat pagpipilian Ang -msdata=eabi itinatakda din ng opsyon ang
-memb pagpipilian.

-msdata=sysv
Sa System V.4 at mga naka-embed na PowerPC system, maglagay ng maliit na global at static na data sa
.sdata seksyon, na itinuturo ng rehistrong "r13". Ilagay ang maliit na uninitialized global
at static na data sa .sbss seksyon, na katabi ng .sdata seksyon Ang
-msdata=sysv ang opsyon ay hindi tugma sa -malilipat pagpipilian.

-msdata=default
-msdata
Sa System V.4 at naka-embed na PowerPC system, kung -meabi ay ginagamit, i-compile ang code na pareho
as -msdata=eabi, kung hindi man ay mag-compile ng code na kapareho ng -msdata=sysv.

-msdata=data
Sa System V.4 at mga naka-embed na PowerPC system, maglagay ng maliit na global data sa .sdata
seksyon. Maglagay ng maliit na hindi nasimulang pandaigdigang data sa .sbss seksyon. Huwag gamitin
irehistro ang "r13" upang matugunan ang maliit na data gayunpaman. Ito ang default na gawi maliban kung
iba -msdata ginagamit ang mga opsyon.

-msdata=wala
-mno-sdata
Sa mga naka-embed na PowerPC system, ilagay ang lahat ng inisyal na global at static na data sa .data
seksyon, at lahat ng hindi nasimulang data sa .bss seksyon.

-mblock-move-inline-limit=num
Inline ang lahat ng block moves (gaya ng mga tawag sa "memcpy" o structure copies) na mas mababa sa o
katumbas ng num byte. Ang pinakamababang halaga para sa num ay 32 bytes sa 32-bit na mga target at 64
bytes sa 64-bit na mga target. Ang default na halaga ay partikular sa target.

-G num
Sa mga naka-embed na PowerPC system, ilagay ang mga global at static na item na mas mababa sa o katumbas ng num
byte sa maliit na data o bss na mga seksyon sa halip na sa normal na data o bss na seksyon.
Sa pamamagitan ng default, num ay 8. Ang -G num ipinapasa din ang switch sa linker. Lahat ng modules
ay dapat na pinagsama-sama sa pareho -G num halaga.

-mga pangalan
-mno-regnames
Sa System V.4 at naka-embed na PowerPC system ay (hindi) naglalabas ng mga pangalan ng rehistro sa
output ng wikang assembly gamit ang mga simbolikong anyo.

-mlongcall
-mno-longcall
Bilang default, ipagpalagay na ang lahat ng mga tawag ay malayo upang ang isang mas mahabang mas mahal na pagtawag
sequence ang kailangan. Ito ay kinakailangan para sa mga tawag na higit sa 32 megabytes
(33,554,432 bytes) mula sa kasalukuyang lokasyon. Isang maikling tawag ang bubuo kung ang
Alam ng compiler na hindi maaaring ganoon kalayo ang tawag. Ang setting na ito ay maaaring ma-override ng
ang katangian ng function na "shortcall", o ng "#pragma longcall(0) ".

Ang ilang mga linker ay may kakayahang makakita ng mga out-of-range na tawag at makabuo ng glue code
ang langaw. Sa mga system na ito, hindi kailangan ang mahahabang tawag at bumubuo ng mas mabagal na code. Bilang
sa pagsulat na ito, magagawa ito ng AIX linker, tulad ng magagawa ng GNU linker para sa PowerPC/64. Ito
ay binalak na idagdag ang tampok na ito sa GNU linker para sa 32-bit na PowerPC system din.

Sa Darwin/PPC system, ang "#pragma longcall" ay bubuo ng "jbsr callee, L42", at isang
"branch island" (glue code). Ang dalawang target na address ay kumakatawan sa tumatawag at sa
"sanga ng isla". Mas pipiliin ng Darwin/PPC linker ang unang address at bumuo ng a
"bl callee" kung ang PPC "bl" na pagtuturo ay direktang makakarating sa callee; kung hindi, ang
Ang linker ay bubuo ng "bl L42" para tawagan ang "branch island". Ang "branch island" ay
idinagdag sa katawan ng function ng pagtawag; kinukuwenta nito ang buong 32-bit na address ng
ang tumatawag at tumalon dito.

Sa mga sistema ng Mach-O (Darwin), ang pagpipiliang ito ay nagdidirekta sa compiler na naglalabas sa pandikit para sa
bawat direktang tawag, at ang Darwin linker ang magpapasya kung ito ay gagamitin o itatapon.

Sa hinaharap, maaari naming maging dahilan upang balewalain ng GCC ang lahat ng mga detalye ng longcall kapag ang linker
ay kilala upang makabuo ng pandikit.

-mtls-marker
-mno-tls-marker
Markahan (huwag markahan) ang mga tawag sa "__tls_get_addr" na may relokasyon na tumutukoy sa function
argumento. Ang relokasyon ay nagpapahintulot sa ld na mapagkakatiwalaang iugnay ang function na tawag sa argumento
mga tagubilin sa pag-setup para sa pag-optimize ng TLS, na nagbibigay-daan naman sa gcc na maging mas mahusay na iskedyul
Ang pagkakasunod-sunod.

-pthread
Nagdaragdag ng suporta para sa multithreading gamit ang mga pthread aklatan. Ang opsyong ito ay nagtatakda ng mga flag para sa
parehong preprocessor at linker.

-mreci
-mno-recipe
Ang opsyong ito ay magbibigay-daan sa GCC na gamitin ang reciprocal na pagtatantya at reciprocal square root
tantyahin ang mga tagubilin na may karagdagang mga hakbang sa Newton-Raphson upang mapataas ang katumpakan
sa halip na gumawa ng divide o square root at divide para sa mga floating-point na argumento. Ikaw
dapat gamitin ang -ffast-math opsyon kapag ginagamit -mreci (o kahit papaano
-funsafe-math-optimizations, -finite-math-lamang, -freciprocal-math at
-fno-trap-math). Tandaan na habang ang throughput ng sequence ay sa pangkalahatan
mas mataas kaysa sa throughput ng non-reciprocal na pagtuturo, ang katumpakan ng
Ang pagkakasunod-sunod ay maaaring bawasan ng hanggang 2 ulp (ibig sabihin, ang kabaligtaran ng 1.0 ay katumbas ng 0.99999994)
para sa reciprocal square roots.

-mreci=opt
Binibigyang-daan ng opsyong ito na kontrolin kung aling mga reciprocal na tagubilin sa pagtatantya ang maaaring gamitin. opt
ay isang listahan ng mga opsyon na pinaghihiwalay ng kuwit, na maaaring unahan ng "!" upang baligtarin ang
opsyon: "lahat": paganahin ang lahat ng mga tagubilin sa pagtatantya, "default": paganahin ang default
mga tagubilin, katumbas ng -mreci, "wala": huwag paganahin ang lahat ng mga tagubilin sa pagtatantya,
katumbas ng -mno-recipe; "div": i-enable ang reciprocal approximation na mga tagubilin para sa
parehong single at double precision; "divf": paganahin ang single-precision reciprocal
mga tagubilin sa pagtatantya; "divd": paganahin ang double-precision reciprocal
mga tagubilin sa pagtatantya; "rsqrt": paganahin ang reciprocal square root approximation
mga tagubilin para sa parehong single at double precision; "rsqrtf": paganahin ang single-
precision reciprocal square root approximation mga tagubilin; "rsqrtd": paganahin ang
double-precision reciprocal square root approximation mga tagubilin;

Kaya halimbawa, -mrecip=lahat,!rsqrtd ay magbibigay-daan sa lahat ng katumbas na pagtatantya
mga tagubilin, maliban sa mga tagubiling "FRSQRTE", "XSRSQRTEDP", at "XVRSQRTEDP"
na humahawak sa double-precision reciprocal square root kalkulasyon.

-mrecip-katumpakan
-mno-recip-precision
Ipagpalagay (huwag ipagpalagay) na ang kapalit na mga tagubilin sa pagtatantya ay nagbibigay ng mas mataas na-
mga pagtatantya ng katumpakan kaysa sa ipinag-uutos ng PowerPC ABI. Pagpili -mcpu=kapangyarihan6 or
-mcpu=kapangyarihan7 awtomatikong pinipili -mrecip-katumpakan. Ang double-precision square
Ang mga tagubilin sa pagtatantya ng ugat ay hindi nabuo bilang default sa mga makinang mababa ang katumpakan,
dahil hindi sila nagbibigay ng pagtatantya na nagtatagpo pagkatapos ng tatlong hakbang.

-mveclibabi=uri
Tinutukoy ang uri ng ABI na gagamitin para sa pag-vector ng mga intrinsics gamit ang isang panlabas na library.
Ang tanging uri na sinusuportahan sa kasalukuyan ay "mass", na tumutukoy sa paggamit ng IBM's
Mga library ng Mathematical Acceleration Subsystem (MASS) para sa pag-vector ng intrinsics gamit ang
panlabas na mga aklatan. Kasalukuyang maglalabas ang GCC ng mga tawag sa "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", at "tanhf4" kapag bumubuo ng code para sa power7. pareho -free-vectorize at
-funsafe-math-optimizations kailangang paganahin. Ang mga aklatan ng MASS ay dapat na
tinukoy sa oras ng link.

-mfriz
-mno-friz
Bumuo (huwag bumuo) ng "friz" na pagtuturo kapag ang -funsafe-math-optimizations
Ang opsyon ay ginagamit upang i-optimize ang pag-ikot ng mga floating-point na halaga sa 64-bit integer at
bumalik sa floating point. Ang "friz" na pagtuturo ay hindi nagbabalik ng parehong halaga kung ang
Ang floating-point na numero ay masyadong malaki upang magkasya sa isang integer.

-pointers-to-nested-functions
-mno-pointers-to-nested-functions
Bumuo ng (huwag bumuo) ng code upang i-load ang static na chain register (r11) kailan
pagtawag sa pamamagitan ng isang pointer sa AIX at 64-bit Linux system kung saan ang isang function pointer
tumuturo sa isang 3-salitang descriptor na nagbibigay ng address ng function, halaga ng TOC na ilo-load
magparehistro r2, at static na chain value na ilo-load sa register r11. ang
-pointers-to-nested-functions ay naka-on bilang default. Hindi ka makakatawag
mga pointer sa mga nested function o pointer sa mga function na pinagsama-sama sa ibang mga wika na
gamitin ang static na chain kung gagamitin mo ang -mno-pointers-to-nested-functions.

-msave-toc-indirect
-mno-save-toc-indirect
Bumuo ng (huwag bumuo) ng code upang i-save ang halaga ng TOC sa nakareserbang lokasyon ng stack
sa prologue ng function kung ang function ay tumatawag sa pamamagitan ng isang pointer sa AIX at 64-bit
Linux system. Kung ang halaga ng TOC ay hindi nai-save sa prologue, ito ay nai-save bago lamang
ang tawag sa pamamagitan ng pointer. Ang -mno-save-toc-indirect ang pagpipilian ay ang default.

RX Options

Ang mga opsyon sa command-line na ito ay tinukoy para sa mga target ng RX:

-m64bit-doble
-m32bit-doble
Gawing 64 bits ang "double" na uri ng data (-m64bit-doble) o 32 bits (-m32bit-doble)
sa laki. Ang default ay -m32bit-doble. nota Gumagana lang ang RX floating-point hardware
sa mga 32-bit na halaga, kaya naman ang default ay -m32bit-doble.

-fpu
-nofpu
Pinapagana (-fpu) o hindi pinagana (-nofpu) ang paggamit ng RX floating-point hardware. Ang
ang default ay pinagana para sa RX600 serye at hindi pinagana para sa RX200 serye.

Ang mga tagubilin sa floating-point ay bubuo lamang para sa mga 32-bit na floating-point na halaga
gayunpaman, kaya kung ang -m64bit-doble ang opsyon ay ginagamit at ang FPU hardware ay hindi na
ginagamit para sa doble.

nota Kung ang -fpu ang opsyon ay pinagana pagkatapos -funsafe-math-optimizations ay pinagana rin
awtomatiko. Ito ay dahil ang mga tagubilin sa RX FPU ay hindi ligtas.

-mcpu=pangalan
Pinipili ang uri ng RX CPU na ita-target. Sa kasalukuyan tatlong uri ang sinusuportahan, ang
panlahat RX600 at RX200 serye ng hardware at ang tiyak RX610 CPU. Ang default ay
RX600.

Ang tanging pagkakaiba sa pagitan RX600 at RX610 Pagtantya que le RX610 hindi sumusuporta sa
"MVTIPL" na pagtuturo.

Ang RX200 ang serye ay walang hardware na floating-point unit at iba pa -nofpu ay gumagana
bilang default kapag napili ang ganitong uri.

-mbig-endian-data
-mlittle-endian-data
Mag-imbak ng data (ngunit hindi code) sa big-endian na format. Ang default ay
-mlittle-endian-data, ibig sabihin, mag-imbak ng data sa maliit na-endian na format.

-msmall-data-limit=N
Tinutukoy ang maximum na laki sa byte ng mga global at static na variable na maaaring ilagay
sa maliit na lugar ng data. Ang paggamit ng maliit na lugar ng data ay maaaring humantong sa mas maliit at mas mabilis
code, ngunit ang laki ng lugar ay limitado at nasa programmer ang pagtiyak na iyon
hindi umaapaw ang lugar. Gayundin kapag ang maliit na lugar ng data ay ginamit ang isa sa mga RX's
registers (karaniwang "r13") ay nakalaan para sa paggamit na tumuturo sa lugar na ito, kaya ito ay hindi
mas matagal na magagamit para magamit ng compiler. Ito ay maaaring magresulta sa mas mabagal at/o mas malaki
code kung ang mga variable na dati sana ay hawak sa nakareserbang rehistro ay ngayon
itinulak papunta sa stack.

Tandaan, ang mga karaniwang variable (mga variable na hindi pa nasimulan) at mga constant ay
hindi inilagay sa maliit na lugar ng data dahil itinalaga sila sa iba pang mga seksyon sa
maipapatupad ang output.

Ang default na halaga ay zero, na hindi pinapagana ang tampok na ito. Tandaan, ang tampok na ito ay hindi
pinagana bilang default na may mas mataas na antas ng pag-optimize (-O2 atbp) dahil sa
potensyal na nakapipinsalang epekto ng pagpapareserba ng isang rehistro. Bahala na ang programmer
upang mag-eksperimento at matuklasan kung ang tampok na ito ay kapaki-pakinabang sa kanilang programa. Tingnan mo
ang paglalarawan ng -mpid opsyon para sa isang paglalarawan kung paano ang aktwal na pagpaparehistro sa
hawakan ang maliit na data area pointer ay pinili.

-msim
-mno-sim
Gamitin ang runtime ng simulator. Ang default ay ang paggamit ng partikular na runtime ng libgloss board.

-mas100-syntax
-mno-as100-syntax
Kapag bumubuo ng output ng assembler, gumamit ng syntax na tugma sa AS100 ni Renesas
assembler. Ang syntax na ito ay maaari ding pangasiwaan ng GAS assembler ngunit mayroon itong ilan
mga paghihigpit kaya ang pagbuo nito ay hindi ang default na opsyon.

-mmax-constant-size=N
Tinutukoy ang maximum na laki, sa bytes, ng isang pare-pareho na maaaring magamit bilang isang operand sa
isang pagtuturo ng RX. Bagama't pinapayagan ng set ng pagtuturo ng RX ang mga constant na hanggang 4
bytes ang haba na gagamitin sa mga tagubilin, ang mas mahabang halaga ay katumbas ng mas mahaba
pagtuturo. Kaya sa ilang mga pagkakataon ay maaaring maging kapaki-pakinabang upang paghigpitan ang laki ng
mga constant na ginagamit sa mga tagubilin. Ang mga constant na masyadong malaki ay sa halip
inilagay sa isang pare-parehong pool at isinangguni sa pamamagitan ng register indidirection.

Ang halaga N maaaring nasa pagitan ng 0 at 4. Ang halaga ng 0 (ang default) o 4 ay nangangahulugan na
pinapayagan ang mga pare-pareho ng anumang laki.

-magpahinga
Paganahin ang pagpapahinga ng linker. Ang relaxation ng linker ay isang proseso kung saan gagawin ng linker
subukang bawasan ang laki ng isang programa sa pamamagitan ng paghahanap ng mas maiikling bersyon ng iba't-ibang
mga tagubilin. Hindi pinagana bilang default.

-mint-register=N
Tukuyin ang bilang ng mga rehistro na irereserba para sa mga function ng fast interrupt handler. Ang
halaga N maaaring nasa pagitan ng 0 at 4. Ang halaga ng 1 ay nangangahulugan na ang rehistrong "r13" ay magiging
nakalaan para sa eksklusibong paggamit ng mga fast interrupt handler. Isang halaga ng 2 reserba
"r13" at "r12". Isang halaga ng 3 reserbang "r13", "r12" at "r11", at isang halaga ng 4
inilalaan ang "r13" hanggang "r10". Ang isang halaga ng 0, ang default, ay hindi nagrereserba ng anuman
nagrerehistro.

-msave-acc-in-interrupts
Tinutukoy na ang mga pag-andar ng interrupt na handler ay dapat panatilihin ang rehistro ng accumulator.
Ito ay kinakailangan lamang kung ang normal na code ay maaaring gumamit ng accumulator register, halimbawa
dahil nagsasagawa ito ng 64-bit multiplications. Ang default ay huwag pansinin ang nagtitipon
dahil ginagawa nitong mas mabilis ang mga humahawak ng interrupt.

-mpid
-mno-pid
Pinapagana ang pagbuo ng data ng independiyenteng posisyon. Kapag pinagana ang anumang access sa
ang pare-parehong data ay gagawin sa pamamagitan ng isang offset mula sa isang base address na hawak sa isang rehistro. Ito
nagbibigay-daan sa lokasyon ng pare-parehong data na matukoy sa oras ng pagtakbo nang hindi nangangailangan
ang executable na ililipat, na isang benepisyo sa mga naka-embed na application na may mahigpit
mga hadlang sa memorya. Ang data na maaaring baguhin ay hindi apektado ng opsyong ito.

Tandaan, ang paggamit ng tampok na ito ay naglalaan ng isang rehistro, karaniwang "r13", para sa patuloy na data
base address. Maaari itong magresulta sa mas mabagal at/o mas malaking code, lalo na sa kumplikado
function.

Ang aktwal na rehistro na pinili upang hawakan ang pare-pareho ang data base address ay depende sa kung
ang -msmall-data-limit at / o ang -mint-register pinagana ang mga opsyon sa command-line.
Simula sa rehistro "r13" at magpatuloy pababa, ang mga rehistro ay inilalaan muna
upang matugunan ang mga kinakailangan ng -mint-register, Pagkatapos -mpid at sa wakas
-msmall-data-limit. Kaya posible para sa maliit na rehistro ng lugar ng data na maging "r8"
kung pareho -mint-register=4 at -mpid ay tinukoy sa command line.

Bilang default, hindi pinagana ang feature na ito. Maaaring maibalik ang default sa pamamagitan ng -mno-pid
opsyon sa command-line.

tandaan: Ang generic na GCC command-line na opsyon -nakadikit-reg ay may espesyal na kahalagahan sa RX
port kapag ginamit kasama ang "interrupt" na katangian ng function. Ang katangiang ito ay nagpapahiwatig ng a
function na nilayon upang iproseso ang mga mabilis na pagkagambala. Sisiguraduhin ng GCC na ginagamit lamang nito ang
nirerehistro ang "r10", "r11", "r12" at/o "r13" at ibinigay lamang na ang normal na paggamit ng
ang mga kaukulang rehistro ay pinaghigpitan sa pamamagitan ng -nakadikit-reg or -mint-register
mga pagpipilian sa command-line.

S / 390 at zSerye Options

Ito ang mga -m mga opsyon na tinukoy para sa arkitektura ng S/390 at zSeries.

-mhard-float
-msoft-float
Gamitin (huwag gamitin) ang hardware floating-point na mga tagubilin at mga rehistro para sa floating-
mga operasyon ng punto. Kailan -msoft-float ay tinukoy, gumagana sa libgcc.a gagamitin
upang magsagawa ng mga floating-point na operasyon. Kailan -mhard-float ay tinukoy, ang compiler
bumubuo ng IEEE floating-point na mga tagubilin. Ito ang default.

-mhard-dfp
-mno-hard-dfp
Gamitin (huwag gamitin) ang hardware decimal-floating-point na mga tagubilin para sa decimal-
mga pagpapatakbo ng floating-point. Kailan -mno-hard-dfp ay tinukoy, gumagana sa libgcc.a
ay gagamitin upang magsagawa ng decimal-floating-point operations. Kailan -mhard-dfp is
tinukoy, ang compiler ay bumubuo ng decimal-floating-point na mga tagubilin sa hardware. Ito
ay ang default para sa -martsa=z9-ec o mas mataas.

-mlong-double-64
-mlong-double-128
Kinokontrol ng mga switch na ito ang laki ng uri ng "long double". Ang laki ng 64 bits ay gumagawa ng
"long double" na uri na katumbas ng "double" na uri. Ito ang default.

-mbackchain
-mno-backchain
Itabi (huwag iimbak) ang address ng frame ng tumatawag bilang backchain pointer sa
stack frame ng callee. Maaaring kailanganin ang isang backchain upang payagan ang pag-debug gamit ang mga tool na iyon
hindi maintindihan ang impormasyon ng frame ng tawag sa DWARF-2. Kailan -mno-packed-stack ay nasa
epekto, ang backchain pointer ay naka-imbak sa ilalim ng stack frame; kailan
-naka-pack na-stack ay may bisa, ang backchain ay inilalagay sa pinakamataas na salita ng
96/160 byte register save area.

Sa pangkalahatan, pinagsama-sama ang code sa -mbackchain ay tumutugma sa tawag sa code na pinagsama-sama
-mmo-backchain; gayunpaman, ang paggamit ng backchain para sa mga layunin ng pag-debug ay karaniwang nangangailangan
na ang buong binary ay binuo gamit ang -mbackchain. Tandaan na ang kumbinasyon ng
-mbackchain, -naka-pack na-stack at -mhard-float ay hindi suportado. Upang makabuo ng isang
paggamit ng linux kernel -msoft-float.

Ang default ay hindi mapanatili ang backchain.

-naka-pack na-stack
-mno-packed-stack
Gamitin (huwag gamitin) ang naka-pack na layout ng stack. Kailan -mno-packed-stack ay tinukoy, ang
Ang compiler ay gumagamit ng lahat ng mga patlang ng 96/160 byte register save area para lamang sa kanilang
default na layunin; ang mga hindi nagamit na field ay tumatagal pa rin ng stack space. Kailan -naka-pack na-stack is
tinukoy, ang mga puwang ng pag-save ng rehistro ay makapal na nakaimpake sa tuktok ng pag-save ng rehistro
lugar; ang hindi nagamit na espasyo ay muling ginagamit para sa iba pang mga layunin, na nagbibigay-daan para sa mas mahusay na paggamit ng
ang magagamit na stack space. Gayunpaman, kapag -mbackchain ay din sa epekto, ang pinakamataas
Ang salita ng save area ay palaging ginagamit upang iimbak ang backchain, at ang return address
Ang rehistro ay palaging naka-save ng dalawang salita sa ibaba ng backchain.

Hangga't hindi ginagamit ang stack frame backchain, nabuo ang code gamit ang -naka-pack na-stack
ay tumutugma sa tawag sa code na nabuo gamit ang -mno-packed-stack. Tandaan na ang ilang hindi FSF
mga release ng GCC 2.95 para sa S/390 o zSeries na nabuong code na gumagamit ng stack frame
backchain sa oras ng pagtakbo, hindi lamang para sa mga layunin ng pag-debug. Ang naturang code ay hindi tawag-
katugma sa code na pinagsama-sama -naka-pack na-stack. Gayundin, tandaan na ang kumbinasyon ng
-mbackchain, -naka-pack na-stack at -mhard-float ay hindi suportado. Upang makabuo ng isang
paggamit ng linux kernel -msoft-float.

Ang default ay hindi gamitin ang naka-pack na layout ng stack.

-msmall-exec
-mno-small-exec
Bumuo (o huwag bumuo) ng code gamit ang "bras" na pagtuturo upang gawin ang subroutine
mga tawag. Gumagana lamang ito nang mapagkakatiwalaan kung ang kabuuang sukat na maipapatupad ay hindi lalampas sa 64k.
Ang default ay gamitin ang "basr" na pagtuturo sa halip, na wala nito
limitasyon

-m64
-m31
Kailan -m31 ay tinukoy, bumuo ng code na sumusunod sa GNU/Linux para sa S/390 ABI. Kailan
-m64 ay tinukoy, bumuo ng code na sumusunod sa GNU/Linux para sa zSeries ABI. Ito
nagbibigay-daan sa GCC sa partikular na bumuo ng 64-bit na mga tagubilin. Para sa s390 mga target, ang
ang default ay -m31, habang ang s390x mga target na default sa -m64.

-mzarch
-mesa
Kailan -mzarch ay tinukoy, bumuo ng code gamit ang mga tagubiling magagamit sa
z/Arkitektura. Kailan -mesa ay tinukoy, bumuo ng code gamit ang mga tagubilin
available sa ESA/390. Tandaan na -mesa ay hindi maaari sa -m64. Kapag bumubuo
sumusunod sa code sa GNU/Linux para sa S/390 ABI, ang default ay -mesa. Kapag bumubuo
sumusunod sa code sa GNU/Linux para sa zSeries ABI, ang default ay -mzarch.

-mmvcle
-mno-mvcle
Bumuo (o huwag bumuo) ng code gamit ang "mvcle" na pagtuturo upang maisagawa ang block
gumagalaw. Kailan -mno-mvcle ay tinukoy, gumamit na lang ng "mvc" na loop. Ito ang default
maliban kung nag-optimize para sa laki.

-mdebug
-mno-debug
Mag-print (o huwag mag-print) ng karagdagang impormasyon sa pag-debug kapag nagko-compile. Ang default ay
upang hindi mag-print ng impormasyon sa pag-debug.

-martsa=uri ng cpu
Bumuo ng code na tatakbo sa uri ng cpu, na siyang pangalan ng isang sistema na kumakatawan sa a
ilang uri ng processor. Mga posibleng halaga para sa uri ng cpu ay g5, g6, z900, z990, z9-109,
z9-ec at z10. Kapag bumubuo ng code gamit ang mga tagubiling magagamit sa
z/Arkitektura, ang default ay -martsa=z900. Kung hindi, ang default ay -martsa=g5.

-mtune=uri ng cpu
Tune to uri ng cpu lahat ng naaangkop tungkol sa nabuong code, maliban sa ABI
at ang hanay ng mga magagamit na tagubilin. Ang listahan ng uri ng cpu ang mga halaga ay kapareho ng para sa
-martsa. Ang default ay ang halaga na ginamit para sa -martsa.

-mtpf-trace
-mno-tpf-trace
Bumuo ng code na nagdaragdag (hindi nagdaragdag) sa mga partikular na sangay ng TPF OS upang masubaybayan ang mga gawain
sa operating system. Naka-off ang opsyong ito bilang default, kahit na nag-compile para sa
TPF OS.

-mfused-baliw
-mno-fused-madd
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na multiply at maipon
mga tagubilin. Ang mga tagubiling ito ay nabuo bilang default kung ang hardware na lumulutang na punto
Ginagamit.

-mwarn-framesize=laki ng frame
Maglabas ng babala kung ang kasalukuyang function ay lumampas sa ibinigay na laki ng frame. Dahil ito ay
isang pagsusuri sa oras ng pag-compile na hindi ito kailangang maging isang tunay na problema kapag tumatakbo ang programa. Ito
ay nilayon na tukuyin ang mga function na malamang na nagdudulot ng stack overflow. Ito ay
kapaki-pakinabang na gamitin sa isang kapaligiran na may limitadong laki ng stack eg ang linux kernel.

-mwarn-dynamicstack
Maglabas ng babala kung ang function ay tumatawag ng alloca o gumagamit ng dynamic na laki ng mga array. Ito ay
sa pangkalahatan ay isang masamang ideya na may limitadong laki ng stack.

-mstack-guard=stack-guard
-mstack-size=laki ng stack
Kung ang mga opsyong ito ay ibinigay ang s390 back end ay naglalabas ng mga karagdagang tagubilin sa
function na prologue na nagpapalitaw ng bitag kung ang laki ng stack ay stack-guard byte sa itaas
ang laki ng stack (tandaan na ang stack sa s390 ay lumalaki pababa). Kung ang stack-guard
opsyon ay tinanggal ang pinakamaliit na kapangyarihan ng 2 mas malaki kaysa sa laki ng frame ng pinagsama-sama
function ay pinili. Ang mga opsyong ito ay nilayon na magamit upang makatulong sa pag-debug ng stack
overflow na problema. Ang karagdagang inilabas na code ay nagdudulot lamang ng kaunting overhead at
samakatuwid ay maaari ding gamitin sa produksyon tulad ng mga sistema na walang higit na pagganap
marawal na kalagayan. Ang mga ibinigay na halaga ay dapat na eksaktong kapangyarihan ng 2 at laki ng stack kinakailangan
mas mataas sa stack-guard nang hindi hihigit sa 64k. Para maging efficient ang extra
ginagawa ng code ang pagpapalagay na ang stack ay nagsisimula sa isang address na nakahanay sa halaga
ibinigay ng laki ng stack. ang stack-guard ang opsyon ay magagamit lamang kasama ng
laki ng stack.

Puntos Options

Tinukoy ang mga opsyong ito para sa mga pagpapatupad ng Score:

-meb
Mag-compile ng code para sa big-endian mode. Ito ang default.

-mel
Mag-compile ng code para sa little-endian mode.

-mnhwloop
Huwag paganahin ang pagbuo ng bcnz na pagtuturo.

-muls
Paganahin ang pagbuo ng hindi nakahanay na pag-load at pagtuturo sa tindahan.

-mmac
Paganahin ang paggamit ng multiply-accumulate na mga tagubilin. Hindi pinagana bilang default.

-mscore5
Tukuyin ang SCORE5 bilang target na arkitektura.

-mscore5u
Tukuyin ang SCORE5U ng target na arkitektura.

-mscore7
Tukuyin ang SCORE7 bilang target na arkitektura. Ito ang default.

-mscore7d
Tukuyin ang SCORE7D bilang target na arkitektura.

SH Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng SH:

-m1 Bumuo ng code para sa SH1.

-m2 Bumuo ng code para sa SH2.

-m2e
Bumuo ng code para sa SH2e.

-m2a-nofpu
Bumuo ng code para sa SH2a na walang FPU, o para sa isang SH2a-FPU sa paraang ang
hindi ginagamit ang floating-point unit.

-m2a-single-lamang
Bumuo ng code para sa SH2a-FPU, sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m2a-single
Bumuo ng code para sa SH2a-FPU kung ipagpalagay na ang floating-point unit ay nasa single-precision
mode bilang default.

-m2a
Bumuo ng code para sa SH2a-FPU kung ipagpalagay na ang floating-point unit ay nasa double-precision
mode bilang default.

-m3 Bumuo ng code para sa SH3.

-m3e
Bumuo ng code para sa SH3e.

-m4-nofpu
Bumuo ng code para sa SH4 nang walang floating-point unit.

-m4-single-lamang
Bumuo ng code para sa SH4 na may floating-point unit na sumusuporta lamang sa single-
katumpakan aritmetika.

-m4-iisa
Bumuo ng code para sa SH4 kung ipagpalagay na ang floating-point unit ay nasa single-precision mode
bilang default.

-m4 Bumuo ng code para sa SH4.

-m4a-nofpu
Bumuo ng code para sa SH4al-dsp, o para sa isang SH4a sa paraang ang floating-point
hindi ginagamit ang unit.

-m4a-single-lamang
Bumuo ng code para sa SH4a, sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4a-single
Bumuo ng code para sa SH4a kung ipagpalagay na ang floating-point unit ay nasa single-precision
mode bilang default.

-m4a
Bumuo ng code para sa SH4a.

-m4al
Katulad ng -m4a-nofpu, maliban na ito ay tahasang pumasa -dsp sa nagtitipon. GCC
ay hindi bumubuo ng anumang mga tagubilin sa DSP sa ngayon.

-mb Mag-compile ng code para sa processor sa big-endian mode.

-ml I-compile ang code para sa processor sa little-endian mode.

-mdalign
I-align ang mga doble sa 64-bit na mga hangganan. Tandaan na binabago nito ang mga convention sa pagtawag,
at sa gayon ang ilang mga function mula sa karaniwang C library ay hindi gagana maliban kung ikaw ay muling mag-compile
una ito sa -mdalign.

-magpahinga
Paikliin ang ilang mga sanggunian sa address sa oras ng pag-link, kapag posible; gumagamit ng opsyon sa linker
-magpahinga.

-mbigtable
Gumamit ng 32-bit na mga offset sa "switch" na mga talahanayan. Ang default ay ang paggamit ng 16-bit na mga offset.

-mbitops
I-enable ang paggamit ng bit manipulation instructions sa SH2A.

-mfmovd
Paganahin ang paggamit ng pagtuturo na "fmovd". Suriin -mdalign para sa mga hadlang sa pagkakahanay.

-mhitachi
Sumunod sa mga calling convention na tinukoy ni Renesas.

-mrenesas
Sumunod sa mga calling convention na tinukoy ni Renesas.

-mno-renesas
Sumunod sa mga calling convention na tinukoy para sa GCC bago ang Renesas convention
ay magagamit. Ang opsyong ito ay ang default para sa lahat ng target ng SH toolchain.

-mnomacsave
Markahan ang rehistro ng "MAC" bilang call-clobbered, kahit na -mhitachi ay ibinigay.

-meeee
-mno-ieee
Kontrolin ang pagsunod sa IEEE ng mga floating-point na paghahambing, na nakakaapekto sa paghawak
ng mga kaso kung saan ang resulta ng isang paghahambing ay hindi nakaayos. Bilang default -meeee is
implicitly enabled. Kung -ffinite-math-lamang ay gumagana -mno-ieee ay tahasang itinakda,
na nagreresulta sa mas mabilis na floating-point na mas malaki-pantay at hindi gaanong pantay na mga paghahambing. Ang
Maaaring ma-override ang mga implicit na setting sa pamamagitan ng pagtukoy sa alinman -meeee or -mno-ieee.

-minline-ic_invalidate
Inline na code upang i-invalidate ang mga entry sa cache ng pagtuturo pagkatapos i-set up ang nested function
mga trampolin. Walang epekto ang opsyong ito kung ang -musermode ay may bisa at ang napili
Ang opsyon sa pagbuo ng code (hal. -m4) ay hindi pinapayagan ang paggamit ng pagtuturo ng icbi. Kung
ang napiling opsyon sa pagbuo ng code ay hindi pinapayagan ang paggamit ng pagtuturo ng icbi,
at -musermode ay wala sa bisa, ang inline na code ay manipulahin ang pagtuturo
Direktang hanay ng cache address na may kasamang pagsulat. Ito ay hindi lamang nangangailangan
privileged mode, ngunit mabibigo din ito kung ang linya ng cache ay na-map sa pamamagitan ng TLB
at naging unmap.

-misize
Itapon ang laki at lokasyon ng pagtuturo sa assembly code.

-mpadstruct
Hindi na ginagamit ang opsyong ito. Ito pad structures sa maramihang ng 4 bytes, which is
hindi tugma sa SH ABI.

-msoft-atomic
Bumuo ng GNU/Linux compatible gUSA software na mga atomic sequence para sa atomic na built-in
mga function. Ang nabuong atomic sequence ay nangangailangan ng suporta mula sa interrupt /
exception handling code ng system at angkop lamang para sa mga single-core system.
Hindi sila gagana nang tama sa mga multi-core system. Ang pagpipiliang ito ay pinagana ng
default kapag ang target ay "sh-*-linux*". Para sa mga detalye sa atomic built-in
nakikita ang mga function __atomic Mga builtin.

-mspace
Mag-optimize para sa espasyo sa halip na bilis. Ipinahiwatig ng -Os.

-prefergot
Kapag bumubuo ng position-independent na code, maglabas ng mga function na tawag gamit ang Global Offset
Table sa halip na ang Procedure Linkage Table.

-musermode
Huwag bumuo ng privileged mode na code lamang; nagpapahiwatig -mno-inline-ic_invalidate kung ang
hindi gagana ang inline na code sa user mode. Ito ang default kapag ang target ay
"sh-*-linux*".

-multcost=numero
Itakda ang gastos upang ipagpalagay para sa isang multiply insn.

-mdiv=estratehiya
Itakda ang diskarte sa paghahati na gagamitin para sa mga operasyon ng integer division. Para sa SHmedia
estratehiya maaaring isa sa:

fp Nagsasagawa ng operasyon sa floating point. Ito ay may napakataas na latency, ngunit kailangan
ilang mga tagubilin lamang, kaya maaari itong maging isang mahusay na pagpipilian kung sapat ang iyong code
madaling-exploitable na ILP upang payagan ang compiler na mag-iskedyul ng floating-point
mga tagubilin kasama ng iba pang mga tagubilin. Dibisyon sa pamamagitan ng zero sanhi a
floating-point exception.

inv Gumagamit ng integer operations para kalkulahin ang inverse ng divisor, at pagkatapos
pinarami ang dibidendo sa kabaligtaran. Ang diskarte na ito ay nagbibigay-daan sa CSE at hoisting
ng kabaligtaran na pagkalkula. Ang dibisyon sa pamamagitan ng zero ay kinakalkula ang isang hindi natukoy na resulta,
ngunit hindi nabitag.

inv:minlat
Ang isang variant ng inv kung saan, kung walang nakitang mga pagkakataon sa CSE o hoisting, o kung
ang buong operasyon ay itinaas sa parehong lugar, ang mga huling yugto ng
Ang kabaligtaran na pagkalkula ay magkakaugnay sa panghuling multiply upang mabawasan ang pangkalahatang
latency, sa gastos ng paggamit ng ilang higit pang mga tagubilin, at sa gayon ay nag-aalok ng mas kaunti
pag-iiskedyul ng mga pagkakataon sa ibang code.

tawag
Tumatawag ng function ng library na karaniwang nagpapatupad ng inv:minlat diskarte. Ito
nagbibigay ng mataas na code density para sa "m5-*media-nofpu" compilations.

call2
Gumagamit ng ibang entry point ng parehong function ng library, kung saan ipinapalagay nito na a
pointer sa isang lookup table ay nai-set up na, na naglalantad sa pointer load
sa CSE at code hoisting optimizations.

inv:tawag
inv:call2
inv:fp
Gamitin ang inv algorithm para sa paunang pagbuo ng code, ngunit kung mananatili ang code
hindi na-optimize, bumalik sa tawag, call2, O fp mga estratehiya, ayon sa pagkakabanggit. Tandaan na
ang potensyal na nakaka-trap na side effect ng paghahati sa pamamagitan ng zero ay dinadala ng isang hiwalay
pagtuturo, kaya posible na ang lahat ng integer na mga tagubilin ay itinaas,
ngunit ang marker para sa side effect ay nananatili kung nasaan ito. Isang recombination sa
Ang mga pagpapatakbo ng floating-point o isang tawag ay hindi posible sa kasong iyon.

inv20u
inv20l
Mga variant ng inv:minlat diskarte. Sa kaso na ang kabaligtaran na pagkalkula ay
hindi hiwalay sa multiply, pinapabilis nila ang division kung saan kasya ang dibidendo
sa 20 bits (plus sign kung saan naaangkop) sa pamamagitan ng pagpasok ng isang pagsubok upang laktawan ang isang bilang ng
mga operasyon sa kasong ito; ang pagsubok na ito ay nagpapabagal sa kaso ng mas malalaking dibidendo.
inv20u Ipinapalagay na ang kaso ng isang maliit na dibidendo ay hindi malamang, at inv20l
ipinapalagay na ito ay malamang.

Para sa mga target maliban sa SHmedia estratehiya maaaring isa sa:

tawag-div1
Tumatawag sa function ng library na gumagamit ng pagtuturo ng single-step division na "div1" sa
gawin ang operasyon. Ang dibisyon sa pamamagitan ng zero ay kinakalkula ang isang hindi natukoy na resulta at ginagawa
hindi bitag. Ito ang default maliban sa SH4, SH2A at SHcompact.

tawag-fp
Tumatawag ng function ng library na nagsasagawa ng operasyon sa double precision floating
punto. Ang paghahati sa zero ay nagdudulot ng floating-point exception. Ito ang default
para sa SHcompact na may FPU. Tinutukoy ito para sa mga target na walang doble
Ang precision FPU ay magiging default sa "call-div1".

call-table
Tumatawag ng function ng library na gumagamit ng lookup table para sa maliliit na divisors at ang
"div1" na pagtuturo na may pagkakaiba sa kaso para sa mas malalaking divisors. Dibisyon sa pamamagitan ng zero
kinakalkula ang isang hindi natukoy na resulta at hindi na-trap. Ito ang default para sa SH4.
Ang pagtukoy nito para sa mga target na walang mga dynamic na tagubilin sa paglilipat
default sa "call-div1".

Kapag ang isang diskarte sa paghahati ay hindi natukoy ang default na diskarte ay pipiliin
batay sa kasalukuyang target. Para sa SH2A ang default na diskarte ay ang paggamit ng "divs" at
"divu" na mga tagubilin sa halip na mga tawag sa function ng library.

-maccumulate-outgoing-args
Magreserba ng puwang nang isang beses para sa mga papalabas na argumento sa prologue ng function kaysa sa paligid
bawat tawag. Sa pangkalahatan ay kapaki-pakinabang para sa pagganap at laki. Kailangan din para sa pag-unwinding
upang maiwasan ang pagbabago ng stack frame sa paligid ng conditional code.

-mdivsi3_libfunc=pangalan
Itakda ang pangalan ng function ng library na ginamit para sa 32-bit signed division sa pangalan. ito
nakakaapekto lamang sa pangalang ginamit sa mga diskarte sa call at inv:call division, at ang
aasahan pa rin ng compiler ang parehong mga set ng input/output/clobbered registers na parang
wala ang opsyong ito.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-madjust-unroll
Pag-unrottle ng throttle para maiwasan ang pag-thrashing ng mga target register. Ang pagpipiliang ito ay mayroon lamang isang
epekto kung sinusuportahan ng gcc code base ang TARGET_ADJUST_UNROLL_MAX target hook.

-mindexed-addressing
Paganahin ang paggamit ng indexed addressing mode para sa SHmedia32/SHcompact. Ito ay lamang
ligtas kung ang hardware at/o OS ay nagpapatupad ng 32-bit na wrap-around na semantics para sa na-index
mode ng pagtugon. Pinapayagan ng arkitektura ang pagpapatupad ng mga processor na may 64-bit
MMU, na maaaring gamitin ng OS upang makakuha ng 32-bit addressing, ngunit dahil walang kasalukuyang hardware
Sinusuportahan ito ng pagpapatupad o anumang iba pang paraan upang gawing ligtas ang naka-index na addressing mode
na gamitin sa 32-bit ABI, ang default ay -mno-indexed-addressing.

-mgettrcost=numero
Itakda ang gastos na ipinapalagay para sa pagtuturo ng gettr sa numero. Ang default ay 2 kung
-mpt-naayos ay may bisa, 100 kung hindi man.

-mpt-naayos
Ipagpalagay na ang mga tagubilin sa pt* ay hindi mabibitag. Ito ay karaniwang bubuo ng mas mahusay na nakaiskedyul
code, ngunit hindi ligtas sa kasalukuyang hardware. Sinasabi ng kasalukuyang kahulugan ng arkitektura
na ptabs at ptrel bitag kapag ang target anded na may 3 ay 3. Ito ay may
hindi sinasadyang epekto ng ginagawang hindi ligtas na mag-iskedyul ng ptabs / ptrel bago ang isang sangay, o
itaas ito mula sa isang loop. Halimbawa, ang __do_global_ctors, isang bahagi ng libgcc na tumatakbo
mga konstruktor sa startup ng programa, tumatawag ng mga function sa isang listahan na nililimitahan ng -1.
Gamit ang -mpt-fixed na opsyon, ang ptabs ay gagawin bago ang pagsubok laban sa -1. yun
nangangahulugan na ang lahat ng mga konstruktor ay tatakbo nang medyo mas mabilis, ngunit pagdating sa loop
sa dulo ng listahan, nag-crash ang program dahil naglo-load ang ptabs -1 sa isang target
magparehistro. Dahil hindi ligtas ang opsyong ito para sa anumang hardware na nagpapatupad ng kasalukuyang
detalye ng arkitektura, ang default ay -mno-pt-fixed. Maliban kung tinukoy ng gumagamit ang a
tiyak na gastos na may -mgettrcost, -mno-pt-fixed ay nagpapahiwatig din -mgettrcost=100; ito
pinipigilan ang pagpaparehistro ng alokasyon gamit ang mga target na rehistro para sa pag-iimbak ng mga ordinaryong integer.

-minvalid-mga simbolo
Ipagpalagay na ang mga simbolo ay maaaring hindi wasto. Mga simbolo ng ordinaryong function na nabuo ng compiler
ay palaging magiging wasto upang mag-load gamit ang movi/shori/ptabs o movi/shori/ptrel, ngunit may
assembler at/o linker tricks posibleng makabuo ng mga simbolo na magdudulot
ptabs / ptrel sa bitag. Ang pagpipiliang ito ay makabuluhan lamang kapag -mno-pt-fixed ay nasa
epekto. Pipigilan nito pagkatapos ang cross-basic-block cse, hoisting at karamihan sa pag-iiskedyul ng
naglo-load ng simbolo. Ang default ay -mno-invalid-symbols.

-mbranch-cost=num
Ipagpalagay num upang maging gastos para sa pagtuturo ng sangay. Ang mas mataas na mga numero ay gagawa ng
subukan ng compiler na bumuo ng mas maraming branch-free code kung maaari. Kung hindi tinukoy ang
ang halaga ay pinili depende sa uri ng processor kung saan ini-compile.

-mcbranchdi
Paganahin ang pattern ng pagtuturo na "cbranchdi4".

-mcmpeqdi
Ilabas ang pattern ng pagtuturo na "cmpeqdi_t" kahit na kailan -mcbranchdi ay may bisa.

-mfused-baliw
Payagan ang paggamit ng "fmac" na pagtuturo (floating-point multiply-accumulate) kung ang
Sinusuportahan ito ng uri ng processor. Ang pagpapagana sa opsyong ito ay maaaring makabuo ng code na gumagawa
iba't ibang mga numeric na floating-point na resulta kumpara sa mahigpit na IEEE 754 arithmetic.

-pagpanggap-cmove
Mas gusto ang zero-displacement conditional branch para sa conditional move instruction
mga pattern. Maaari itong magresulta sa mas mabilis na code sa SH4 processor.

Solaris 2 Options

mga ito -m ang mga opsyon ay sinusuportahan sa Solaris 2:

-mimpure-text
-mimpure-text, ginagamit bilang karagdagan sa -ibinahagi, nagsasabi sa compiler na huwag pumasa -z teksto sa
ang linker kapag nagli-link ng isang nakabahaging bagay. Gamit ang opsyong ito, maaari mong i-link ang posisyon-
dependent code sa isang shared object.

-mimpure-text pinipigilan ang "nananatili ang mga relokasyon laban sa mailalaan ngunit hindi maisusulat
sections" na mensahe ng error sa linker. Gayunpaman, ang mga kinakailangang relokasyon ay magti-trigger ng kopya-
on-write, at ang nakabahaging bagay ay hindi aktwal na ibinabahagi sa mga proseso. sa halip na
paggamit -mimpure-text, dapat mong i-compile ang lahat ng source code gamit ang -fpic or -fPIC.

Ang mga switch na ito ay sinusuportahan bilang karagdagan sa itaas sa Solaris 2:

- mga thread
Magdagdag ng suporta para sa multithreading gamit ang POSIX threads library. Ang pagpipiliang ito ay nagtatakda
mga flag para sa parehong preprocessor at linker. Ang pagpipiliang ito ay hindi nakakaapekto sa thread
kaligtasan ng object code na ginawa ng compiler o ng mga library na ibinigay kasama nito.

-pthread
Ito ay kasingkahulugan ng - mga thread.

SPARC Options

mga ito -m ang mga opsyon ay sinusuportahan sa SPARC:

-mno-app-regs
-mapp-regs
Tukuyin -mapp-regs upang makabuo ng output gamit ang mga global na rehistro 2 hanggang 4, na
ang SPARC SVR4 ABI na inilalaan para sa mga aplikasyon. Tulad ng global register 1, bawat global
Ang rehistro 2 hanggang 4 ay ituturing na isang rehistro na inilalaan na na-clobbered ng
mga function na tawag. Ito ang default.

Upang maging ganap na sumusunod sa SVR4 ABI sa halaga ng ilang pagkawala ng pagganap, tukuyin
-mno-app-regs. Dapat kang mag-compile ng mga aklatan at software ng system gamit ang opsyong ito.

-mflat
-mno-flat
may -mflat, ang compiler ay hindi bumubuo ng save/restore na mga tagubilin at gumagamit ng a
"flat" o single register window model. Ang modelong ito ay katugma sa regular
irehistro ang modelo ng window. Ang mga lokal na rehistro at ang mga rehistro ng input (0--5) ay pa rin
ituturing bilang "call-save" na mga rehistro at ise-save sa stack kung kinakailangan.

may -mno-flat (ang default), ang compiler ay bumubuo ng mga tagubilin sa pag-save/pag-restore (maliban
para sa mga function ng dahon). Ito ang normal na operating mode.

-mfpu
-mhard-float
Bumuo ng output na naglalaman ng mga floating-point na mga tagubilin. Ito ang default.

-mno-fpu
-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point. Babala: ang kailangan
Ang mga aklatan ay hindi magagamit para sa lahat ng mga target ng SPARC. Karaniwan ang mga pasilidad ng
ginagamit ang karaniwang C compiler ng machine, ngunit hindi ito maaaring gawin nang direkta sa cross-
compilation. Dapat kang gumawa ng iyong sariling mga pagsasaayos upang magbigay ng angkop na aklatan
mga function para sa cross-compilation. Ang mga naka-embed na target sparc-*-aout at sparclite-*-*
magbigay ng software floating-point support.

-msoft-float binabago ang calling convention sa output file; samakatuwid, ito ay lamang
kapaki-pakinabang kung mag-compile ka lahat ng isang programa na may ganitong opsyon. Sa partikular, kailangan mo
sumulat ng libro libgcc.a, ang library na kasama ng GCC, na may -msoft-float para dito
upang gumana.

-mhard-quad-float
Bumuo ng output na naglalaman ng quad-word (long double) floating-point na mga tagubilin.

-msoft-quad-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa quad-word (long double) floating-point
mga tagubilin. Ang mga function na tinatawag ay ang mga tinukoy sa SPARC ABI. Ito ang
default.

Sa pagsulat na ito, walang mga pagpapatupad ng SPARC na mayroong suporta sa hardware
ang quad-word floating-point na mga tagubilin. Lahat sila ay humihingi ng trap handler para sa isa sa
ang mga tagubiling ito, at pagkatapos ay ginagaya ng tagapangasiwa ng bitag ang epekto ng pagtuturo.
Dahil sa trap handler overhead, ito ay mas mabagal kaysa sa pagtawag sa ABI library
mga gawain. Kaya, ang -msoft-quad-float ang pagpipilian ay ang default.

-mno-unaaligned-doubles
-munaligned-double
Ipagpalagay na ang mga doble ay may 8-byte na pagkakahanay. Ito ang default.

may -munaligned-double, ipinapalagay ng GCC na ang mga double ay may 8-byte na pagkakahanay lamang kung sila
ay nakapaloob sa ibang uri, o kung mayroon silang ganap na address. Kung hindi, ito
Ipinapalagay na mayroon silang 4-byte na pagkakahanay. Ang pagtukoy sa opsyong ito ay maiiwasan ang ilang bihira
mga problema sa compatibility sa code na nabuo ng iba pang compiler. Hindi ito ang default
dahil nagreresulta ito sa pagkawala ng pagganap, lalo na para sa floating-point code.

-mno-faster-structs
-mfaster-structs
may -mfaster-structs, ipinapalagay ng compiler na ang mga istruktura ay dapat may 8-byte
pagkakahanay. Ito ay nagbibigay-daan sa paggamit ng mga pares ng "ldd" at "std" na mga tagubilin para sa mga kopya
sa pagtatalaga ng istraktura, bilang kapalit ng dobleng dami ng "ld" at "st" na mga pares. Gayunpaman, ang
direktang lumalabag sa SPARC ABI ang paggamit ng binagong pagkakahanay na ito. Kaya, ito ay inilaan
para lamang sa paggamit sa mga target kung saan kinikilala ng developer na ang kanilang resultang code
ay hindi direktang alinsunod sa mga patakaran ng ABI.

-mcpu=cpu_type
Itakda ang set ng pagtuturo, set ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo
Tipo ng makina cpu_type. Mga sinusuportahang halaga para sa cpu_type ay v7, saypres, v8, supersparc,
hypersparc, Leon, sparclite, f930, f934, sparclite86x, sparklet, tsc701, v9,
ultrasparc, ultrasparc3, niagara, niagara2, niagara3, at niagara4.

Sinusuportahan din ng mga Native Solaris at GNU/Linux toolchain ang halaga katutubo, na pumipili
ang pinakamahusay na opsyon sa arkitektura para sa host processor. -mcpu=katutubo walang epekto kung
Hindi kinikilala ng GCC ang processor.

Ang mga default na parameter ng pag-iiskedyul ng pagtuturo ay ginagamit para sa mga halaga na pumipili ng isang
arkitektura at hindi isang pagpapatupad. Ang mga ito ay v7, v8, sparclite, sparklet, v9.

Narito ang isang listahan ng bawat suportadong arkitektura at ang kanilang mga sinusuportahang pagpapatupad.

v7 sipres

v8 supersparc, hypersparc, leon

sparclite
f930, f934, sparclite86x

sparklet
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Bilang default (maliban kung naka-configure kung hindi), bumubuo ang GCC ng code para sa V7 na variant ng
Arkitektura ng SPARC. Sa -mcpu=cypress, ang compiler ay nag-o-optimize din para dito
ang Cypress CY7C602 chip, gaya ng ginamit sa SPARCStation/SPARCServer 3xx series. Ito ay
angkop din para sa mas lumang SPARCStation 1, 2, IPX atbp.

may -mcpu=v8, bumubuo ang GCC ng code para sa variant ng V8 ng arkitektura ng SPARC. Ang
Ang pagkakaiba lamang sa V7 code ay ang compiler ay nagpapalabas ng integer multiply at
integer divide instructions na umiiral sa SPARC-V8 ngunit hindi sa SPARC-V7. Sa
-mcpu=supersparc, ang compiler din ay ino-optimize ito para sa SuperSPARC chip, bilang
ginamit sa SPARCStation 10, 1000 at 2000 series.

may -mcpu=sparclite, bumubuo ang GCC ng code para sa variant ng SPARClite ng SPARC
arkitektura. Ito ay nagdaragdag ng integer multiply, integer divide step at scan ("ffs")
mga tagubilin na umiiral sa SPARClite ngunit hindi sa SPARC-V7. Sa -mcpu=f930, ang
Ang compiler ay nag-o-optimize din para sa Fujitsu MB86930 chip, na siyang orihinal
SPARClite, na walang FPU. Sa -mcpu=f934, ang compiler ay nag-o-optimize din para dito
ang Fujitsu MB86934 chip, na siyang pinakahuling SPARClite na may FPU.

may -mcpu=sparclet, bumubuo ang GCC ng code para sa variant ng SPARClet ng SPARC
arkitektura. Idinaragdag nito ang integer multiply, multiply/accumulate, integer divide
hakbang at i-scan ("ffs") na mga tagubilin na umiiral sa SPARClet ngunit wala sa SPARC-V7. Sa
-mcpu=tsc701, ang compiler ay nag-o-optimize din para sa TEMIC SPARClet chip.

may -mcpu=v9, bumubuo ang GCC ng code para sa variant ng V9 ng arkitektura ng SPARC. Ito
nagdaragdag ng 64-bit integer at floating-point na mga tagubilin sa paglipat, 3 karagdagang floating-point
mga rehistro ng code ng kondisyon at mga tagubilin sa paglipat ng kondisyon. Sa -mcpu=ultraparc,
ang compiler din ay ino-optimize ito para sa Sun UltraSPARC I/II/IIi chips. Sa
-mcpu=ultraparc3, ang compiler ay nag-o-optimize din nito para sa Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+ chips. Sa -mcpu=niagara, ang compiler din
ino-optimize ito para sa Sun UltraSPARC T1 chips. Sa -mcpu=niagara2, ang compiler
Bukod pa rito, ino-optimize ito para sa Sun UltraSPARC T2 chips. Sa -mcpu=niagara3, ang
Ang compiler ay nag-o-optimize din nito para sa Sun UltraSPARC T3 chips. Sa -mcpu=niagara4,
ang compiler din ay ino-optimize ito para sa Sun UltraSPARC T4 chips.

-mtune=cpu_type
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type, ngunit huwag itakda
ang set ng pagtuturo o set ng rehistro na ang opsyon -mcpu=cpu_type ay.

Ang parehong mga halaga para sa -mcpu=cpu_type maaaring gamitin para sa -mtune=cpu_type, ngunit ang nag-iisa lamang
Ang mga kapaki-pakinabang na halaga ay ang mga pumipili ng partikular na pagpapatupad ng CPU. Ang mga iyon ay
saypres, supersparc, hypersparc, Leon, f930, f934, sparclite86x, tsc701, ultrasparc,
ultrasparc3, niagara, niagara2, niagara3 at niagara4. Kasama ang katutubong Solaris at
Mga toolchain ng GNU/Linux, katutubo maaari ring gamitin.

-mv8plus
-mno-v8plus
may -mv8plus, bumubuo ang GCC ng code para sa SPARC-V8+ ABI. Ang pagkakaiba mula sa V8
Ang ABI ay ang global at out na mga rehistro ay itinuturing na 64 bits ang lapad. Ito ay pinagana
bilang default sa Solaris sa 32-bit mode para sa lahat ng SPARC-V9 processor.

-mvis
-mno-vis
may -mvis, ang GCC ay bumubuo ng code na sinasamantala ang UltraSPARC Visual
Mga extension ng Instruction Set. Ang default ay -mno-vis.

-mvis2
-mno-vis2
may -mvis2, bumubuo ang GCC ng code na sinasamantala ang bersyon 2.0 ng UltraSPARC
Mga extension ng Visual Instruction Set. Ang default ay -mvis2 kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng UltraSPARC-III at mas bago. Setting -mvis2 Rin
set -mvis.

-mvis3
-mno-vis3
may -mvis3, bumubuo ang GCC ng code na sinasamantala ang bersyon 3.0 ng UltraSPARC
Mga extension ng Visual Instruction Set. Ang default ay -mvis3 kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng niagara-3 at mas bago. Setting -mvis3 nagtatakda din
-mvis2 at -mvis.

-mpopc
-mno-popc
may -mpopc, bumubuo ang GCC ng code na sinasamantala ang populasyon ng UltraSPARC
pagtuturo ng bilang. Ang default ay -mpopc kapag nagta-target ng cpu na sumusuporta sa ganoon
mga tagubilin, tulad ng Niagara-2 at mas bago.

-mfmaf
-mno-fmaf
may -mfmaf, bumubuo ang GCC ng code na sinasamantala ang UltraSPARC Fused Multiply-
Magdagdag ng mga extension ng Floating-point. Ang default ay -mfmaf kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng Niagara-3 at mas bago.

-mfix-at697f
I-enable ang dokumentadong workaround para sa iisang erratum ng processor ng Atmel AT697F
(na tumutugma sa erratum #13 ng processor ng AT697E).

mga ito -m sinusuportahan ang mga opsyon bilang karagdagan sa itaas sa mga processor ng SPARC-V9 sa 64-bit
mga kapaligiran:

-m32
-m64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits.

-mcmodel=alin
Itakda ang modelo ng code sa isa sa

medlow
Ang modelo ng Medium/Low code: 64-bit na mga address, dapat na naka-link ang mga program sa mababang 32
mga piraso ng memorya. Maaaring i-static o dynamic na naka-link ang mga program.

medmid
Ang modelo ng Medium/Middle code: 64-bit na mga address, dapat na naka-link ang mga program sa mababa
Ang 44 bits ng memorya, ang mga segment ng text at data ay dapat na mas mababa sa 2GB ang laki at
ang data segment ay dapat na nasa loob ng 2GB ng text segment.

Medaniya
Ang modelo ng code ng Medium/Anywhere: 64-bit na mga address, maaaring i-link ang mga program kahit saan
sa memorya, ang mga segment ng text at data ay dapat na mas mababa sa 2GB ang laki at ang data
Ang segment ay dapat na nasa loob ng 2GB ng text segment.

embmedany
Ang modelo ng code ng Medium/Anywhere para sa mga naka-embed na system: 64-bit na mga address, ang text
at ang mga segment ng data ay dapat na mas mababa sa 2GB ang laki, parehong nagsisimula saanman sa memorya
(natukoy sa oras ng pag-link). Ang global register na %g4 ay tumuturo sa base ng data
segment. Statically linked ang mga program at hindi sinusuportahan ang PIC.

-mmemory-modelo=mem-modelo
Itakda ang memory model sa puwersa sa processor sa isa sa

default
Ang default na modelo ng memorya para sa processor at operating system.

rmo Nakaka-relax na Memory Order

pso Bahagyang Order sa Tindahan

TSOs Kabuuang Order sa Tindahan

sc Sequential Consistency

Ang mga modelong ito ng memorya ay pormal na tinukoy sa Appendix D ng arkitektura ng Sparc V9
manual, gaya ng itinakda sa field na "PSTATE.MM" ng processor.

-mstack-bias
-mno-stack-bias
may -mstack-bias, ipinapalagay ng GCC na ang stack pointer, at frame pointer kung naroroon,
ay na-offset ng -2047 na dapat idagdag pabalik kapag gumagawa ng mga sanggunian ng stack frame. Ito
ay ang default sa 64-bit na mode. Kung hindi, ipagpalagay na walang ganoong offset.

SPU Options

mga ito -m ang mga opsyon ay sinusuportahan sa SPU:

-mwarn-reloc
-merror-reloc
Ang loader para sa SPU ay hindi humahawak ng mga dynamic na relokasyon. Bilang default, magbibigay ang GCC ng
error kapag bumubuo ito ng code na nangangailangan ng dynamic na relokasyon. -mno-error-reloc
hindi pinapagana ang error, -mwarn-reloc bubuo na lang ng babala.

-msafe-dma
-munsafe-dma
Ang mga tagubilin na nagpapasimula o sumusubok sa pagkumpleto ng DMA ay hindi dapat muling ayusin
paggalang sa mga naglo-load at mga tindahan ng memorya na ina-access. Karaniwang mga gumagamit
tugunan ang problemang ito gamit ang pabagu-bagong keyword, ngunit maaari itong humantong sa hindi mahusay na code
sa mga lugar kung saan ang memorya ay kilala na hindi nagbabago. Sa halip na markahan ang memorya bilang
pabagu-bago ng isip namin tinatrato ang mga tagubilin ng DMA bilang potensyal na nakakaapekto sa lahat ng memorya. Sa
-munsafe-dma dapat gamitin ng mga user ang pabagu-bagong keyword upang protektahan ang mga access sa memorya.

-mbranch-pahiwatig
Bilang default, bubuo ang GCC ng tagubilin sa pahiwatig ng sangay upang maiwasan ang mga pipeline stall
palaging kinukuha o malamang na mga sanga. Ang isang pahiwatig ay hindi bubuo ng mas malapit sa 8
mga tagubilin na malayo sa sangay nito. Mayroong maliit na dahilan upang huwag paganahin ang mga ito, maliban sa
mga layunin ng pag-debug, o upang gawing mas maliit ng kaunti ang isang bagay.

-msmall-mem
-mlarge-mem
Bilang default, ang GCC ay bumubuo ng code sa pag-aakalang ang mga address ay hindi kailanman mas malaki sa 18 bits.
may -mlarge-mem nabuo ang code na nagpapalagay ng buong 32-bit na address.

-mstdmain
Bilang default, nagli-link ang GCC laban sa startup code na ipinapalagay ang SPU-style na pangunahing function
interface (na mayroong isang hindi kinaugalian na listahan ng parameter). Sa -mstdmain, magli-link ang GCC
ang iyong programa laban sa startup code na ipinapalagay ang isang C99-style na interface sa "pangunahing",
kabilang ang isang lokal na kopya ng "argv" na mga string.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mea32
-mea64
Mag-compile ng code na ipinapalagay na ang mga pointer sa PPU address space na na-access sa pamamagitan ng "__ea"
Ang pinangalanang address space qualifier ay alinman sa 32 o 64 bits ang lapad. Ang default ay 32 bits.
Dahil isa itong opsyon sa pagpapalit ng ABI, dapat na i-compile ang lahat ng object code sa isang executable
na may parehong setting.

-maddress-space-conversion
-mno-address-space-conversion
Payagan/huwag payagan ang pagtrato sa "__ea" address space bilang superset ng generic na address
space. Nagbibigay-daan ito sa mga tahasang uri ng cast sa pagitan ng "__ea" at generic na pointer pati na rin
mga implicit na conversion ng mga generic na pointer sa "__ea" pointer. Ang default ay payagan
address space pointer conversion.

-mcache-size=laki ng cache
Kinokontrol ng opsyong ito ang bersyon ng libgcc na ini-link ng compiler sa isang executable
at pumipili ng cache na pinamamahalaan ng software para sa pag-access ng mga variable sa "__ea" na address
espasyo na may partikular na laki ng cache. Mga posibleng opsyon para sa laki ng cache ay 8, 16, 32, 64
at 128. Ang default na laki ng cache ay 64KB.

-matomic-update
-mno-atomic-update
Kinokontrol ng opsyong ito ang bersyon ng libgcc na ini-link ng compiler sa isang executable
at pinipili kung ang mga atomic na update sa software-managed cache ng PPU-side variable
ay ginamit. Kung gumagamit ka ng mga atomic update, mga pagbabago sa isang PPU variable mula sa SPU code gamit
ang "__ea" na pinangalanang address space qualifier ay hindi makakasagabal sa mga pagbabago sa ibang PPU
mga variable na naninirahan sa parehong linya ng cache mula sa PPU code. Kung hindi ka gumagamit ng atomic
mga update, maaaring mangyari ang ganitong interference; gayunpaman, ang pagsusulat pabalik ng mga linya ng cache ay magiging higit pa
mabisa. Ang default na gawi ay ang paggamit ng mga atomic update.

-mdual-nops
-mdual-nops=n
Bilang default, maglalagay ang GCC ng mga nops para pataasin ang dalawahang isyu kapag inaasahan nitong tataas ito
pagganap. n ay maaaring isang halaga mula 0 hanggang 10. Ang isang mas maliit n maglalagay ng mas kaunting nops. 10
ay ang default, ang 0 ay kapareho ng -mno-dual-nops. Naka-disable sa -Os.

-mhint-max-nops=n
Maximum na bilang ng mga nops na ilalagay para sa hint ng branch. Ang pahiwatig ng sangay ay dapat na hindi bababa sa 8
mga tagubilin na malayo sa sangay na ginagawa nito. Ang GCC ay maglalagay ng hanggang sa n nops to
ipatupad ito, kung hindi, hindi ito bubuo ng hint ng sangay.

-mhint-max-distance=n
Nililimitahan ng pag-encode ng pagtuturo ng hint ng branch ang hint na nasa loob ng 256
tagubilin ng sangay na pinapatupad nito. Bilang default, tinitiyak ng GCC na nasa loob ito
125.

-msafe-pahiwatig
Mag-ayos ng hardware bug na nagiging sanhi ng paghinto ng SPU nang walang katapusan. Bilang default, GCC
ay maglalagay ng "hbrp" na tagubilin upang matiyak na hindi mangyayari ang stall na ito.

Options para Sistema V

Ang mga karagdagang opsyon na ito ay available sa System V Release 4 para sa compatibility sa iba
compiler sa mga system na iyon:

-G Lumikha ng isang nakabahaging bagay. Inirerekomenda na -simboliko or -ibinahagi gamitin sa halip.

-Qy Tukuyin ang mga bersyon ng bawat tool na ginagamit ng compiler, sa isang ".ident" assembler
direktiba sa output.

-Qn Iwasang magdagdag ng ".ident" na mga direktiba sa output file (ito ang default).

-YP,dirs
Maghanap sa mga direktoryo dirs, at walang iba, para sa mga aklatan na tinukoy sa -l.

-Ym,dir
Tumingin sa direktoryo dir upang mahanap ang M4 preprocessor. Ginagamit ito ng assembler
pagpipilian.

TILE-Gx Options

mga ito -m ang mga opsyon ay sinusuportahan sa TILE-Gx:

-mcpu=pangalan
Pinipili ang uri ng CPU na ita-target. Sa kasalukuyan ang tanging sinusuportahang uri ay Tilegx.

-m32
-m64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba, at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits.

TILEPro Options

mga ito -m ang mga opsyon ay sinusuportahan sa TILEPro:

-mcpu=pangalan
Pinipili ang uri ng CPU na ita-target. Sa kasalukuyan ang tanging sinusuportahang uri ay tilepro.

-m32
Bumuo ng code para sa isang 32-bit na kapaligiran, na nagtatakda ng int, mahaba, at pointer sa 32 bits.
Ito ang tanging sinusuportahang pag-uugali kaya ang watawat ay mahalagang binabalewala.

V850 Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng V850:

-mlong-tawag
-mno-mahabang-tawag
Ituring ang lahat ng tawag bilang malayo (malapit). Kung ang mga tawag ay ipinapalagay na malayo, ang
Ang compiler ay palaging maglo-load ng address ng mga function sa isang rehistro, at tumawag nang hindi direkta
sa pamamagitan ng pointer.

-mno-ep
-mep
Huwag i-optimize (i-optimize) ang mga pangunahing bloke na gumagamit ng parehong index pointer 4 o higit pa
beses upang kopyahin ang pointer sa rehistro ng "ep", at gamitin ang mas maikling "sld" at "sst"
mga tagubilin. Ang -mep naka-on ang opsyon bilang default kung nag-optimize ka.

-mno-prolog-function
-mprolog-function
Huwag gumamit (gumamit) ng mga panlabas na function upang i-save at ibalik ang mga rehistro sa prologue
at epilogue ng isang function. Ang mga panlabas na function ay mas mabagal, ngunit gumagamit ng mas kaunting code
space kung higit sa isang function ang nagse-save ng parehong bilang ng mga rehistro. Ang
-mprolog-function naka-on ang opsyon bilang default kung nag-optimize ka.

-mspace
Subukang gawing maliit ang code hangga't maaari. Sa kasalukuyan, ito ay naka-on lamang sa -mep
at -mprolog-function mga pagpipilian.

-mtda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas kaunti sa maliit na lugar ng data
na itinuturo ng rehistrong "ep" ang. Ang maliit na lugar ng data ay maaaring magkaroon ng hanggang 256 byte sa kabuuan
(128 byte para sa byte reference).

-msda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas mababa sa maliit na lugar ng data
na nagrerehistro "gp" tumuturo sa. Ang maliit na lugar ng data ay maaaring magkaroon ng hanggang 64 kilobytes.

-mzda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas mababa sa unang 32
kilobytes ng memorya.

-mv850
Tukuyin na ang target na processor ay ang V850.

-big-switch
Bumuo ng code na angkop para sa malalaking switch table. Gamitin lamang ang opsyong ito kung ang
nagrereklamo ang assembler/linker tungkol sa mga sanga na wala sa hanay sa loob ng switch table.

-mapp-regs
Ang pagpipiliang ito ay magiging sanhi ng r2 at r5 na magamit sa code na nabuo ng compiler.
Ang setting na ito ay ang default.

-mno-app-regs
Ang pagpipiliang ito ay magiging sanhi ng r2 at r5 na ituring bilang mga nakapirming rehistro.

-mv850e2v3
Tukuyin na ang target na processor ay ang V850E2V3. Ang preprocessor ay patuloy
__v850e2v3__ ay tutukuyin kung gagamitin ang opsyong ito.

-mv850e2
Tukuyin na ang target na processor ay ang V850E2. Ang preprocessor ay patuloy
__v850e2__ ay tutukuyin kung gagamitin ang opsyong ito.

-mv850e1
Tukuyin na ang target na processor ay ang V850E1. Ang preprocessor ay patuloy
__v850e1__ at __v850e__ ay tutukuyin kung gagamitin ang opsyong ito.

-mv850es
Tukuyin na ang target na processor ay ang V850ES. Ito ay isang alias para sa -mv850e1
pagpipilian.

-mv850e
Tukuyin na ang target na processor ay ang V850E. Ang preprocessor pare-pareho __v850e__
ay tutukuyin kung gagamitin ang opsyong ito.

Kung wala man -mv850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 ay tinukoy
pagkatapos ay pipiliin ang isang default na target na processor at ang nauugnay __v850*__ preprocessor
tutukuyin ang pare-pareho.

Ang preprocessor ay patuloy __v850 at __v851__ ay palaging tinukoy, anuman ang alin
variant ng processor ang target.

-i-disable-callt
Pipigilan ng opsyong ito ang pagbuo ng pagtuturo ng CALLT para sa v850e, v850e1,
v850e2 at v850e2v3 na lasa ng v850 na arkitektura. Ang default ay
-mno-disable-callt na nagpapahintulot sa pagtuturo ng CALLT na gamitin.

VAX Options

mga ito -m ang mga opsyon ay tinukoy para sa VAX:

-munix
Huwag mag-output ng ilang mga tagubilin sa pagtalon ("aobleq" at iba pa) na ang Unix assembler
para sa VAX ay hindi maaaring humawak sa mahabang hanay.

-mgnu
Gawin output ang mga tagubilin sa pagtalon, sa pag-aakalang ikaw ay mag-ipon kasama ang
GNU assembler.

-mg Output code para sa G-format na mga floating-point na numero sa halip na D-format.

VxWorks Options

Ang mga opsyon sa seksyong ito ay tinukoy para sa lahat ng mga target ng VxWorks. Mga opsyon na partikular sa
nakalista ang target na hardware kasama ng iba pang mga opsyon para sa target na iyon.

-mrtp
Maaaring bumuo ang GCC ng code para sa parehong mga kernel ng VxWorks at mga real time na proseso (RTP). Ito
Ang opsyon ay lumilipat mula sa una patungo sa huli. Tinutukoy din nito ang preprocessor macro
"__RTP__".

-hindi static
I-link ang isang RTP na maipapatupad laban sa mga shared library sa halip na mga static na library. Ang
pagpipilian -static at -ibinahagi maaari ding gamitin para sa mga RTP; -static ay ang default.

-Bstatic
-Bdynamic
Ang mga opsyong ito ay ipinasa sa linker. Ang mga ito ay tinukoy para sa pagiging tugma sa
Si Diab.

-Xbind-tamad
I-enable ang lazy binding ng mga function call. Ang pagpipiliang ito ay katumbas ng -Wl,-z, ngayon at ito ay
tinukoy para sa pagiging tugma sa Diab.

-Xbind-ngayon
I-disable ang lazy binding ng mga function call. Ang pagpipiliang ito ay ang default at tinukoy para sa
pagiging tugma sa Diab.

x86-64 Options

Ang mga ito ay nakalista sa ilalim

Xstormy16 Options

Ang mga opsyong ito ay tinukoy para sa Xstormy16:

-msim
Pumili ng mga startup file at linker script na angkop para sa simulator.

Xtensa Options

Sinusuportahan ang mga opsyong ito para sa mga target ng Xtensa:

-mconst16
-mno-const16
Paganahin o huwag paganahin ang paggamit ng "CONST16" na mga tagubilin para sa pag-load ng mga constant value. Ang
Ang pagtuturo ng "CONST16" ay kasalukuyang hindi isang karaniwang opsyon mula sa Tensilica. Kailan
naka-enable, palaging ginagamit ang mga tagubiling "CONST16" kapalit ng karaniwang "L32R"
mga tagubilin. Ang paggamit ng "CONST16" ay pinagana bilang default kung ang "L32R"
hindi magagamit ang pagtuturo.

-mfused-baliw
-mno-fused-madd
Paganahin o huwag paganahin ang paggamit ng fused multiply/add at multiply/subtract na mga tagubilin sa
opsyon na floating-point. Wala itong epekto kung ang opsyon na floating-point ay hindi rin
pinagana. Ang hindi pagpapagana ng fused multiply/add at multiply/subtract na mga tagubilin ay pinipilit ang
compiler na gumamit ng hiwalay na mga tagubilin para sa pagpaparami at pagdaragdag/pagbawas.
Maaaring ito ay kanais-nais sa ilang mga kaso kung saan ang mga mahigpit na resulta ng pagsunod sa IEEE 754
kinakailangan: ang naka-fused multiply add/subtract na mga tagubilin ay hindi bibilog sa intermediate
resulta, sa gayon ay gumagawa ng mga resulta na may mas marami pang mga piraso ng katumpakan kaysa sa tinukoy ng
IEEE standard. Tinitiyak din iyon ng hindi pagpapagana ng fused multiply add/subtract na mga tagubilin
ang output ng programa ay hindi sensitibo sa kakayahan ng compiler na pagsamahin ang multiply at
magdagdag/magbawas ng mga operasyon.

-mserialize-volatile
-mno-serialize-volatile
Kapag pinagana ang opsyong ito, ipinapasok ng GCC ang mga tagubiling "MEMW" bago ang "volatile" na memorya
mga sanggunian upang matiyak ang pagkakasunod-sunod na pagkakapare-pareho. Ang default ay -mserialize-volatile.
paggamit -mno-serialize-volatile upang alisin ang mga tagubiling "MEMW".

-mforce-no-pic
Para sa mga target, tulad ng GNU/Linux, kung saan ang lahat ng user-mode na Xtensa code ay dapat na nakaposisyon-
independent code (PIC), hindi pinapagana ng opsyong ito ang PIC para sa pag-compile ng kernel code.

-mtext-section-literal
-mno-text-section-literal
Kontrolin ang paggamot ng mga literal na pool. Ang default ay -mno-text-section-literal,
na naglalagay ng mga literal sa isang hiwalay na seksyon sa output file. Ito ay nagpapahintulot sa
literal na pool na mailagay sa isang data RAM/ROM, at pinapayagan din nito ang linker na pagsamahin
literal na pool mula sa magkahiwalay na object file upang alisin ang mga redundant na literal at pagbutihin ang code
laki. Sa -mtext-section-literal, ang mga literal ay interspersed sa seksyon ng teksto
upang mapanatili silang malapit hangga't maaari sa kanilang mga sanggunian. Maaaring kailanganin ito
para sa malalaking file ng pagpupulong.

-mtarget-align
-mno-target-align
Kapag pinagana ang opsyong ito, inutusan ng GCC ang assembler na awtomatikong ihanay
mga tagubilin upang bawasan ang mga parusa ng sangay sa gastos ng ilang density ng code. Ang
Sinusubukan ng assembler na palawakin ang mga tagubilin sa density upang ihanay ang mga target ng sangay at ang
mga tagubilin na sumusunod sa mga tagubilin sa tawag. Kung walang sapat na nauunang ligtas
mga tagubilin sa density upang ihanay ang isang target, walang pagpapalawak na isasagawa. Ang default ay
-mtarget-align. Ang mga opsyong ito ay hindi makakaapekto sa paggamot ng auto-aligned
mga tagubilin tulad ng "LOOP", na palaging ihanay ng assembler, alinman sa pamamagitan ng pagpapalawak
mga tagubilin sa density o sa pamamagitan ng pagpasok ng mga tagubiling walang-op.

-mlongcalls
-mno-longcalls
Kapag pinagana ang opsyong ito, inaatasan ng GCC ang assembler na magsalin ng mga direktang tawag sa
hindi direktang mga tawag maliban kung matutukoy nito na ang target ng isang direktang tawag ay nasa
saklaw na pinapayagan ng pagtuturo ng tawag. Karaniwang nangyayari ang pagsasaling ito para sa mga tawag sa
function sa iba pang source file. Sa partikular, ang assembler ay nagsasalin ng direkta
"TUMAWAG" na pagtuturo sa isang "L32R" na sinusundan ng isang "CALLX" na pagtuturo. Ang default ay
-mno-longcalls. Dapat gamitin ang opsyong ito sa mga programa kung saan maaari ang target ng tawag
posibleng wala sa saklaw. Ang pagpipiliang ito ay ipinatupad sa assembler, hindi sa
compiler, kaya ang assembly code na nabuo ng GCC ay magpapakita pa rin ng direktang tawag
mga tagubilin --- tingnan ang disassembled object code upang makita ang aktwal na mga tagubilin.
Tandaan na ang assembler ay gagamit ng hindi direktang tawag para sa bawat cross-file na tawag, hindi lang
yung talagang mawawala sa range.

zSerye Options

Ang mga ito ay nakalista sa ilalim

Options para kodigo Henerasyon Kumbensyon
Kinokontrol ng mga opsyong independiyenteng makina na ito ang mga kumbensyon ng interface na ginagamit sa code
henerasyon.

Karamihan sa kanila ay may parehong positibo at negatibong anyo; ang negatibong anyo ng -ffoo ay magiging
-fno-foo. Sa talahanayan sa ibaba, isa lamang sa mga form ang nakalista --- ang isa na hindi ang
default. Maaari mong malaman ang iba pang anyo sa pamamagitan ng alinman sa pag-alis hindi- o pagdaragdag nito.

-fbounds-check
Para sa mga front end na sumusuporta dito, bumuo ng karagdagang code upang masuri na dati ang mga indeks
Ang mga array ng pag-access ay nasa loob ng ipinahayag na hanay. Ito ay kasalukuyang sinusuportahan lamang ng
Nagtatapos ang harapan ng Java at Fortran, kung saan ang pagpipiliang ito ay nagde-default sa true at false
ayon sa pagkakabanggit.

-ftrapv
Ang pagpipiliang ito ay bumubuo ng mga bitag para sa nilagdaang overflow sa karagdagan, pagbabawas,
pagpaparami ng pagpaparami.

-fwrapv
Ang opsyong ito ay nagtuturo sa compiler na ipalagay na ang sign na arithmetic overflow ng
karagdagan, pagbabawas at pagpaparami ay bumabalot gamit ang twos-complement
representasyon. Ang flag na ito ay nagbibigay-daan sa ilang pag-optimize at hindi pinapagana ang iba. Ito
ang opsyon ay pinagana bilang default para sa front end ng Java, ayon sa kinakailangan ng wikang Java
pagtutukoy.

-fexceptions
Paganahin ang paghawak ng exception. Bumubuo ng karagdagang code na kailangan para magpalaganap ng mga pagbubukod. Para sa
ilang mga target, ito ay nagpapahiwatig na ang GCC ay bubuo ng frame unwind information para sa lahat
function, na maaaring makagawa ng makabuluhang laki ng data sa itaas, bagama't hindi
makakaapekto sa pagpapatupad. Kung hindi mo tinukoy ang opsyong ito, paganahin ito ng GCC bilang default
para sa mga wika tulad ng C++ na karaniwang nangangailangan ng exception handling, at i-disable ito para sa
mga wika tulad ng C na hindi karaniwang nangangailangan nito. Gayunpaman, maaaring kailanganin mong paganahin
ang opsyong ito kapag kino-compile ang C code na kailangang gumana nang maayos nang may pagbubukod
mga handler na nakasulat sa C++. Maaari mo ring hilingin na huwag paganahin ang opsyong ito kung ikaw ay
pag-compile ng mga mas lumang C++ program na hindi gumagamit ng exception handling.

-fnon-call-exceptions
Bumuo ng code na nagbibigay-daan sa mga tagubilin sa pag-trap na maghagis ng mga pagbubukod. Tandaan na ito
nangangailangan ng suporta sa runtime na partikular sa platform na hindi umiiral sa lahat ng dako. Bukod dito,
pinapayagan lamang nito pag-trap mga tagubilin para maghagis ng mga eksepsiyon, ibig sabihin, memory reference o
floating-point na mga tagubilin. Hindi nito pinapayagan ang mga pagbubukod na itapon mula sa di-makatwirang
mga humahawak ng signal tulad ng "SIGALRM".

-funwind-table
Kapareho ng -fexceptions, maliban na bubuo lamang ito ng anumang kinakailangang static na data, ngunit
ay hindi makakaapekto sa nabuong code sa anumang iba pang paraan. Karaniwang hindi mo paganahin
ang pagpipiliang ito; sa halip, ang isang tagaproseso ng wika na nangangailangan ng ganitong pangangasiwa ay magpapagana nito
iyong ngalan.

-fasynchronous-unwind-tables
Bumuo ng unwind table sa dwarf2 na format, kung sinusuportahan ng target na makina. Ang mesa ay
eksakto sa bawat hangganan ng pagtuturo, kaya maaari itong magamit para sa stack unwinding mula sa
mga asynchronous na kaganapan (gaya ng debugger o basurero).

-fpcc-struct-return
Ibalik ang "maikli" "struct" at "unyon" na mga halaga sa memorya tulad ng mas mahaba, sa halip na sa
nagrerehistro. Ang convention na ito ay hindi gaanong mahusay, ngunit ito ay may kalamangan sa pagpapahintulot
intercallability sa pagitan ng GCC-compiled na mga file at mga file na pinagsama-sama sa iba pang mga compiler,
partikular ang Portable C Compiler (pcc).

Ang tumpak na kumbensyon para sa pagbabalik ng mga istruktura sa memorya ay nakasalalay sa target
mga macro ng pagsasaayos.

Ang mga maiikling istruktura at unyon ay yaong ang laki at pagkakahanay ay tumutugma sa ilan
uri ng integer.

Babala: code na pinagsama-sama sa -fpcc-struct-return switch ay hindi binary compatible
na may code na pinagsama-sama sa -freg-struct-return lumipat. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-freg-struct-return
Ibalik ang mga halaga ng "struct" at "union" sa mga rehistro kung posible. Ito ay mas mahusay
para sa maliliit na istruktura kaysa -fpcc-struct-return.

Kung hindi mo tinukoy ang alinman -fpcc-struct-return ni -freg-struct-return, nagde-default ang GCC sa
alinmang kumbensiyon ang pamantayan para sa target. Kung walang standard convention,
Nagde-default ang GCC sa -fpcc-struct-return, maliban sa mga target kung saan ang GCC ang punong-guro
compiler. Sa mga kasong iyon, maaari naming piliin ang pamantayan, at pinili namin ang mas mahusay
magrehistro ng alternatibong pagbabalik.

Babala: code na pinagsama-sama sa -freg-struct-return switch ay hindi binary compatible
na may code na pinagsama-sama sa -fpcc-struct-return lumipat. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-enums
Maglaan sa isang uri ng "enum" ng kasing dami ng mga byte na kailangan nito para sa ipinahayag na hanay ng
posibleng mga halaga. Sa partikular, ang uri ng "enum" ay magiging katumbas ng pinakamaliit
uri ng integer na may sapat na silid.

Babala: ang -fshort-enums Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-double
Gamitin ang parehong laki para sa "doble" gaya ng para sa "float".

Babala: ang -fshort-double Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-wchar
I-override ang pinagbabatayan na uri para sa wchar_t upang maging maikli hindi naka -ignign int sa halip ng
default para sa target. Ang pagpipiliang ito ay kapaki-pakinabang para sa pagbuo ng mga programa na tatakbo sa ilalim
ALAK.

Babala: ang -fshort-wchar Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fno-karaniwan
Sa C code, kinokontrol ang paglalagay ng mga hindi nasimulang global variable. Mga compiler ng Unix C
tradisyonal na pinahihintulutan ang maramihang mga kahulugan ng naturang mga variable sa iba't ibang
mga yunit ng compilation sa pamamagitan ng paglalagay ng mga variable sa isang karaniwang bloke. Ganito ang ugali
tinukoy ng -karaniwan, at ito ang default para sa GCC sa karamihan ng mga target. Sa kabilang kamay,
ang pag-uugaling ito ay hindi kinakailangan ng ISO C, at sa ilang mga target ay maaaring magdala ng bilis o code
laki ng parusa sa mga variable na sanggunian. Ang -fno-karaniwan ang opsyon ay tumutukoy na ang
Ang compiler ay dapat maglagay ng mga hindi inisyal na global variable sa seksyon ng data ng object
file, sa halip na gawin ang mga ito bilang karaniwang mga bloke. Ito ay may epekto na kung ang
idineklara ang parehong variable (nang walang "extern") sa dalawang magkaibang compilations, gagawin mo
makakuha ng multiple-definition error kapag na-link mo ang mga ito. Sa kasong ito, dapat kang mag-compile
sa -karaniwan sa halip. Pinagsasama-sama ng -fno-karaniwan ay kapaki-pakinabang sa mga target kung saan ito
nagbibigay ng mas mahusay na pagganap, o kung nais mong i-verify na gagana ang program
iba pang mga system na palaging tinatrato ang mga hindi nasimulang variable na deklarasyon sa ganitong paraan.

-fno-ident
Huwag pansinin ang #identity Directive.

-finhibit-size-directive
Huwag maglabas ng ".size" assembler directive, o anumang bagay na magdudulot ng problema
kung ang function ay nahati sa gitna, at ang dalawang halves ay inilalagay sa mga lokasyong malayo
bukod sa alaala. Ginagamit ang opsyong ito kapag nag-compile crtstuff.c; hindi mo dapat kailanganin
upang gamitin ito para sa anumang bagay.

-fverbose-asm
Maglagay ng karagdagang impormasyon sa komentaryo sa nabuong code ng pagpupulong upang gawin itong higit pa
nababasa. Ang pagpipiliang ito ay karaniwang magagamit lamang sa mga talagang kailangang basahin ang
nabuo ang code ng pagpupulong (marahil habang nagde-debug sa mismong compiler).

-fno-verbose-asm, ang default, ay nagiging sanhi ng karagdagang impormasyon na maalis at ito ay
kapaki-pakinabang kapag naghahambing ng dalawang assembler file.

-frecord-gcc-switch
Ang switch na ito ay nagiging sanhi ng command line na ginamit upang i-invoke ang compiler na maging
naitala sa object file na ginagawa. Ang switch na ito ay ipinatupad lamang
sa ilang mga target at ang eksaktong format ng recording ay target at binary file format
umaasa, ngunit karaniwan itong nasa anyo ng isang seksyon na naglalaman ng tekstong ASCII. Ito
switch ay nauugnay sa -fverbose-asm lumipat, ngunit ang switch na iyon ay mga tala lamang
impormasyon sa assembler output file bilang mga komento, kaya hindi nito maabot ang bagay
file. Tingnan din -grecord-gcc-switch para sa isa pang paraan ng pag-iimbak ng mga opsyon sa compiler sa
ang object file.

-fpic
Bumuo ng position-independent code (PIC) na angkop para sa paggamit sa isang shared library, kung
suportado para sa target na makina. Ina-access ng naturang code ang lahat ng pare-parehong address sa pamamagitan ng a
global offset table (GOT). Niresolba ng dynamic na loader ang GOT entries kapag ang
magsisimula ang programa (ang dynamic na loader ay hindi bahagi ng GCC; ito ay bahagi ng operating
sistema). Kung ang laki ng GOT para sa naka-link na executable ay lumampas sa maximum na partikular sa makina
laki, nakakakuha ka ng mensahe ng error mula sa linker na nagpapahiwatig na -fpic hindi gumagana; sa
kaso, i-recompile mo -fPIC sa halip. (Ang mga maximum na ito ay 8k sa SPARC at 32k
sa m68k at RS/6000. Ang 386 ay walang ganoong limitasyon.)

Nangangailangan ng espesyal na suporta ang code na independyente sa posisyon, at samakatuwid ay gumagana lamang sa
ilang mga makina. Para sa 386, sinusuportahan ng GCC ang PIC para sa System V ngunit hindi para sa Araw
386i. Ang code na nabuo para sa IBM RS/6000 ay palaging independyente sa posisyon.

Kapag nakatakda ang flag na ito, ang mga macro na "__pic__" at "__PIC__" ay tinukoy sa 1.

-fPIC
Kung sinusuportahan para sa target na makina, maglabas ng code na independyente sa posisyon, na angkop para sa
dynamic na pag-link at pag-iwas sa anumang limitasyon sa laki ng global offset table. Ito
ang opsyon ay gumagawa ng pagkakaiba sa m68k, PowerPC at SPARC.

Nangangailangan ng espesyal na suporta ang code na independyente sa posisyon, at samakatuwid ay gumagana lamang sa
ilang mga makina.

Kapag nakatakda ang flag na ito, ang mga macro na "__pic__" at "__PIC__" ay tinukoy sa 2.

-fpie
-fPIE
Ang mga pagpipiliang ito ay katulad ng -fpic at -fPIC, ngunit nakabuo ng independiyenteng code ng posisyon
maaari lamang i-link sa mga executable. Karaniwan ang mga opsyong ito ay ginagamit kapag -pie GCC
ang opsyon ay gagamitin habang nagli-link.

-fpie at -fPIE parehong tumutukoy sa mga macro na "__pie__" at "__PIE__". Ang mga macro ay mayroong
halaga 1 para sa -fpie at 2 para sa -fPIE.

-fno-jump-tables
Huwag gumamit ng mga jump table para sa mga switch statement kahit na kung saan ito ay magiging mas mahusay
kaysa sa iba pang mga diskarte sa pagbuo ng code. Ang pagpipiliang ito ay ginagamit kasabay ng
-fpic or -fPIC para sa code ng gusali na bahagi ng isang dynamic na linker at hindi maaaring
sumangguni sa address ng isang jump table. Sa ilang mga target, ang mga jump table ay hindi nangangailangan ng a
GOT at hindi kailangan ang opsyong ito.

-nakadikit-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang nakapirming rehistro; hindi dapat sumangguni sa nabuong code
ito (maliban marahil bilang isang stack pointer, frame pointer o sa ilang iba pang nakapirming tungkulin).

reg dapat ay pangalan ng isang rehistro. Ang mga pangalan ng rehistro na tinanggap ay partikular sa makina
at tinukoy sa macro na "REGISTER_NAMES" sa macro file ng paglalarawan ng machine.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fcall-ginamit-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang nailalaang rehistro na na-clobbered sa pamamagitan ng function
mga tawag. Maaari itong ilaan para sa mga pansamantalang o variable na hindi nakatira sa kabuuan ng a
tawag. Ang mga function na pinagsama-sama sa ganitong paraan ay hindi magse-save at magbabalik ng rehistro reg.

Isang error ang paggamit ng flag na ito gamit ang frame pointer o stack pointer. Paggamit nito
bandila para sa iba pang mga rehistro na may mga naayos na malawakang tungkulin sa pagpapatupad ng makina
modelo ay magbubunga ng mga mapaminsalang resulta.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fcall-save-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang ilalaang rehistro na na-save ng mga function. Maaaring ito ay
inilalaan kahit para sa mga pansamantala o variable na nabubuhay sa isang tawag. Mga pag-andar
pinagsama-sama sa paraang ito ay i-save at ibalik ang rehistro reg kung gagamitin nila ito.

Isang error ang paggamit ng flag na ito gamit ang frame pointer o stack pointer. Paggamit nito
bandila para sa iba pang mga rehistro na may mga naayos na malawakang tungkulin sa pagpapatupad ng makina
modelo ay magbubunga ng mga mapaminsalang resulta.

Iba't ibang uri ng sakuna ang magreresulta mula sa paggamit ng watawat na ito para sa isang rehistro sa
kung aling mga halaga ng function ang maaaring ibalik.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fpack-struct[=n]
Nang walang tinukoy na halaga, i-pack ang lahat ng miyembro ng istraktura nang magkasama nang walang mga butas. Kapag a
ang halaga ay tinukoy (na dapat ay isang maliit na kapangyarihan ng dalawa), mga miyembro ng istraktura ng pack
ayon sa halagang ito, na kumakatawan sa pinakamataas na pagkakahanay (iyon ay, mga bagay na may
Ang mga kinakailangan sa default na pag-align na mas malaki kaysa dito ay magiging potensyal na hindi pagkakahanay
sa susunod na angkop na lokasyon.

Babala: ang -fpack-struct Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Bilang karagdagan, ginagawa nito ang code
suboptimal. Gamitin ito upang umayon sa isang hindi default na interface ng binary na application.

- mga function ng instrumento
Bumuo ng mga tawag sa instrumentation para sa pagpasok at paglabas sa mga function. Kakatapos lang ng function
entry at bago lumabas ng function, tatawagin ang mga sumusunod na function ng profiling
kasama ang address ng kasalukuyang function at ang call site nito. (Sa ilang platform,
Ang "__builtin_return_address" ay hindi gumagana nang higit sa kasalukuyang function, kaya ang site ng tawag
maaaring hindi magagamit ang impormasyon sa mga function ng profiling kung hindi man.)

void __cyg_profile_func_enter (walang bisa *this_fn,
walang bisa *call_site);
walang bisa __cyg_profile_func_exit (walang bisa *this_fn,
walang bisa *call_site);

Ang unang argumento ay ang address ng pagsisimula ng kasalukuyang function, na maaaring
Eksaktong tumingin sa symbol table.

Ginagawa din ang instrumentation na ito para sa mga function na pinalawak na inline sa iba pang mga function.
Ang mga tawag sa pag-profile ay magsasaad kung saan, sa konsepto, ang inline na function ay ipinasok
at lumabas. Nangangahulugan ito na dapat na available ang mga addressable na bersyon ng naturang mga function.
Kung ang lahat ng iyong paggamit ng isang function ay pinalawak na inline, ito ay maaaring mangahulugan ng karagdagang
pagpapalawak ng laki ng code. Kung gagamit ka panlabas inline sa iyong C code, isang addressable
bersyon ng naturang mga function ay dapat na ibinigay. (Ito ay karaniwang nangyayari pa rin, ngunit
kung sinuswerte ka at palaging pinapalawak ng optimizer ang mga function inline, maaaring mayroon ka
nakaalis nang hindi nagbibigay ng mga static na kopya.)

Ang isang function ay maaaring bigyan ng attribute na "no_instrument_function", kung saan ganito
hindi gagawin ang instrumentation. Ito ay maaaring gamitin, halimbawa, para sa pag-profile
function na nakalista sa itaas, high-priority interrupt routines, at anumang function kung saan
ang mga pagpapaandar ng profiling ay hindi ligtas na matatawag (marahil ang mga humahawak ng signal, kung ang
ang mga gawain sa pag-profile ay bumubuo ng output o naglalaan ng memorya).

-finstrument-functions-exclude-file-list=file,file, ...
Itakda ang listahan ng mga function na hindi kasama sa instrumentation (tingnan ang paglalarawan
ng "-finstrument-functions"). Kung ang file na naglalaman ng kahulugan ng function ay tumutugma
kasama ang isa sa file, kung gayon ang function na iyon ay hindi ginagamitan ng instrumento. Ang laban ay tapos na sa
substrings: kung ang file Ang parameter ay isang substring ng pangalan ng file, ito ay itinuturing na
maging isang laban.

Halimbawa:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

ibubukod ang anumang inline na function na tinukoy sa mga file na ang mga pathname ay naglalaman ng "/bits/stl"
o "isama/sys".

Kung, sa ilang kadahilanan, gusto mong isama ang titik ',' sa isa sa sym, isulat ang ','. Para sa
halimbawa, "-finstrument-functions-exclude-file-list=',,tmp'" (tandaan ang nag-iisang quote
nakapalibot sa opsyon).

-finstrument-functions-exclude-function-list=sym,sym, ...
Ito ay katulad ng "-finstrument-functions-exclude-file-list", ngunit nagtatakda ang opsyong ito
ang listahan ng mga pangalan ng function na ibubukod sa instrumentation. Ang pangalan ng function sa
be matched ay ang pangalan nito na nakikita ng gumagamit, gaya ng "vector blah(const vector &)",
hindi ang panloob na sira na pangalan (hal., "_Z4blahRSt6vectorIiSaIiEE"). Tapos na ang laban
sa mga substring: kung ang sym Ang parameter ay isang substring ng pangalan ng function, ito ay
itinuturing na isang tugma. Para sa C99 at C++ extended identifier, ang pangalan ng function
dapat ibigay sa UTF-8, hindi gumagamit ng mga pangalan ng unibersal na character.

-fstack-check
Bumuo ng code upang i-verify na hindi ka lalampas sa hangganan ng stack. Ikaw
dapat tukuyin ang flag na ito kung tumatakbo ka sa isang kapaligiran na may maraming mga thread,
ngunit bihira lamang na kailangan itong tukuyin sa isang single-threaded na kapaligiran mula noong stack
Awtomatikong nade-detect ang overflow sa halos lahat ng system kung iisa lang ang stack.

Tandaan na ang switch na ito ay hindi aktwal na nagiging sanhi ng pagsusuri upang magawa; ang pagpapatakbo
system o ang runtime ng wika ay dapat gawin iyon. Ang switch ay nagiging sanhi ng pagbuo ng code sa
siguraduhin na nakikita nila ang stack na pinahaba.

Maaari ka ring tumukoy ng string parameter: "hindi" ay nangangahulugang walang pagsuri, "generic"
ibig sabihin ay pilitin ang paggamit ng lumang-style checking, "specific" ay nangangahulugang gamitin ang pinakamahusay na checking
paraan at katumbas ng hubad -fstack-check.

Ang old-style checking ay isang generic na mekanismo na hindi nangangailangan ng partikular na target na suporta
ang compiler ngunit may mga sumusunod na disbentaha:

1. Binagong diskarte sa paglalaan para sa malalaking bagay: sila ay palaging ilalaan
dynamic kung lumampas ang kanilang laki sa isang nakapirming threshold.

2. Nakapirming limitasyon sa laki ng static na frame ng mga function: kapag ito ay nilagyan ng a
partikular na function, ang stack checking ay hindi maaasahan at isang babala ang ibinibigay ng
tagatala

3. Inefficiency: dahil sa parehong binagong diskarte sa alokasyon at sa generic
pagpapatupad, ang mga pagganap ng code ay nahahadlangan.

Tandaan na ang old-style stack checking ay ang fallback method din para sa "specific" kung hindi
ang target na suporta ay naidagdag sa compiler.

-fstack-limit-register=reg
-fstack-limit-symbol=sym
-fno-stack-limit
Bumuo ng code upang matiyak na ang stack ay hindi lalago nang higit sa isang tiyak na halaga, alinman
ang halaga ng isang rehistro o ang address ng isang simbolo. Kung lalago ang stack
ang halaga, ang isang signal ay itinaas. Para sa karamihan ng mga target, ang signal ay nakataas bago ang
lumampas ang stack sa hangganan, kaya posibleng mahuli ang signal nang hindi kumukuha
mga espesyal na pag-iingat.

Halimbawa, kung ang stack ay magsisimula sa ganap na address 0x80000000 at lumalaki pababa,
maaari mong gamitin ang mga flag -fstack-limit-symbol=__stack_limit at
-Wl,--defsym,__stack_limit=0x7ffe0000 upang ipatupad ang limitasyon ng stack na 128KB. Tandaan na
ito ay maaaring gumana lamang sa GNU linker.

-fsplit-stack
Bumuo ng code upang awtomatikong hatiin ang stack bago ito umapaw. Ang resulta
Ang programa ay may magkahiwalay na stack na maaari lamang umapaw kung hindi magawa ng program
maglaan ng higit pang memorya. Ito ay pinakakapaki-pakinabang kapag nagpapatakbo ng mga sinulid na programa, dahil ito
ay hindi na kinakailangan upang kalkulahin ang isang mahusay na laki ng stack na gagamitin para sa bawat thread. Ito ay
kasalukuyang ipinapatupad lamang para sa i386 at x86_64 back end na tumatakbo sa GNU/Linux.

Kapag pinagsama-sama ang code sa -fsplit-stack code ng mga tawag na naipon nang wala -fsplit-stack, doon
maaaring hindi gaanong magagamit ang stack space para tumakbo ang huling code. Kung pinagsama-sama ang lahat
code, kasama ang library code, na may -fsplit-stack ay hindi isang opsyon, kung gayon ang linker ay maaari
ayusin ang mga tawag na ito upang ang code ay naipon nang wala -fsplit-stack laging may malaki
salansan. Ang suporta para dito ay ipinapatupad sa gold linker sa paglabas ng GNU binutils
2.21 at sa paglaon.

-fleading-underscore
Ang pagpipiliang ito at ang katapat nito, -fno-leading-underscore, sapilitang baguhin ang paraan C
ang mga simbolo ay kinakatawan sa object file. Ang isang gamit ay ang tumulong sa pag-link sa legacy
code ng pagpupulong.

Babala: ang -fleading-underscore switch ay nagiging sanhi ng GCC upang bumuo ng code na hindi
binary compatible sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa a
hindi default na interface ng binary na application. Hindi lahat ng target ay nagbibigay ng kumpletong suporta
para sa switch na ito.

-ftls-model=modelo
Baguhin ang thread-local na modelo ng storage na gagamitin. Ang modelo argument ay dapat isa sa
"global-dynamic", "local-dynamic", "initial-exec" o "local-exec".

Ang default na wala -fpic ay "initial-exec"; kasama -fpic ang default ay
"global-dynamic".

-fvisibility=default|panloob|nakatago|protektado
Itakda ang default na ELF image symbol visibility sa tinukoy na opsyon --- gagawin ng lahat ng simbolo
mamarkahan ito maliban kung na-override sa loob ng code. Ang paggamit ng tampok na ito ay maaaring napaka
makabuluhang mapabuti ang pag-link at mga oras ng pag-load ng mga shared library ng object, gumawa ng higit pa
na-optimize na code, magbigay ng halos perpektong pag-export ng API at maiwasan ang mga pag-aaway ng simbolo. Ito ay
malakas Inirerekomenda na gamitin mo ito sa anumang ibinahaging bagay na iyong ibinabahagi.

Sa kabila ng nomenclature, ang "default" ay palaging nangangahulugang pampubliko; ibig sabihin, magagamit na ma-link
laban sa labas ng nakabahaging bagay. Ang "protektado" at "panloob" ay medyo walang silbi
sa real-world na paggamit kaya ang tanging iba pang karaniwang ginagamit na opsyon ay "nakatago". Ang
default kung - kakayahang makita ay hindi tinukoy ay "default", ibig sabihin, gawin ang bawat simbolo
pampubliko---nagdudulot ito ng parehong pag-uugali tulad ng mga nakaraang bersyon ng GCC.

Isang magandang paliwanag sa mga benepisyong inaalok sa pamamagitan ng pagtiyak na tama ang mga simbolo ng ELF
Ang visibility ay ibinibigay ng "How To Write Shared Libraries" ni Ulrich Drepper (na maaaring
matatagpuan sahttp://people.redhat.com/~drepper/>)---gayunpaman isang nakahihigit na solusyon ang ginawa
posible sa pamamagitan ng opsyong ito sa pagmamarka ng mga bagay na nakatago kapag ang default ay pampubliko ay gagawin
ang default na nakatago at markahan ang mga bagay na pampubliko. Ito ang pamantayan sa mga DLL sa Windows at
sa -fvisibility=hidden at "__attribute__ ((visibility("default")))" sa halip na
"__declspec(dllexport)" nakakakuha ka ng halos magkaparehong semantika na may magkaparehong syntax.
Ito ay isang malaking pagpapala sa mga nagtatrabaho sa mga cross-platform na proyekto.

Para sa mga nagdaragdag ng suporta sa visibility sa umiiral na code, maaari mong mahanap #pragma GCC
pagiging tanaw ginagamit. Gumagana ito sa pamamagitan ng paglalagay mo ng mga deklarasyon na nais mong itakda
visibility para sa may (halimbawa) #pragma GCC pagiging tanaw itulak(nakatago) at #pragma GCC
pagiging tanaw pop. Tandaan na dapat tingnan ang visibility ng simbolo as bahagi of ang
API interface kontrata at sa gayon ang lahat ng bagong code ay dapat palaging tukuyin ang visibility kapag ito
ay hindi ang default; ibig sabihin, ang mga deklarasyon para lamang sa paggamit sa loob ng lokal na DSO ay dapat palagi
mamarkahan nang tahasan bilang nakatago upang maiwasan ang mga overhead ng PLT indirection---ginagawa ito
ang abundantly clear ay tumutulong din sa pagiging madaling mabasa at self-documentation ng code. Tandaan na
dahil sa mga kinakailangan sa ispesipikasyon ng ISO C++, dapat bago ang operator at tanggalin ng operator
palaging may default na visibility.

Magkaroon ng kamalayan na ang mga header mula sa labas ng iyong proyekto, sa partikular na mga header ng system at
ang mga header mula sa anumang iba pang library na iyong ginagamit, ay maaaring hindi inaasahan na maisama
visibility maliban sa default. Maaaring kailanganin mong tahasang sabihin #pragma GCC
pagiging tanaw push(default) bago isama ang anumang naturang mga header.

panlabas mga deklarasyon ay hindi apektado ng - kakayahang makita, kaya maraming code ang maaaring
muling pinagsama-sama sa -fvisibility=hidden na walang pagbabago. Gayunpaman, nangangahulugan ito na
mga tawag sa panlabas ang mga function na walang tahasang visibility ay gagamit ng PLT, kaya ito ay higit pa
epektibong gamitin __attribute ((visibility)) at / o #pragma GCC pagiging tanaw upang sabihin sa
compiler na panlabas ang mga deklarasyon ay dapat ituring na nakatago.

Tandaan na ang - kakayahang makita ay nakakaapekto sa C++ hindi malinaw na linkage entity. Nangangahulugan ito na, para sa
halimbawa, dapat na tahasan ang isang exception class na ihahagis sa pagitan ng mga DSO
minarkahan ng default na visibility upang ang type_info ang mga node ay pag-iisa sa pagitan ng
Mga DSO.

Ang isang pangkalahatang-ideya ng mga diskarteng ito, ang kanilang mga benepisyo at kung paano gamitin ang mga ito ay nasa
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Dapat gamitin ang opsyong ito kung uma-access sa pabagu-bago ng isip bit-fields (o iba pang istraktura
mga patlang, kahit na ang compiler ay karaniwang pinarangalan ang mga uri na iyon pa rin) ay dapat gumamit ng isang solong
access ng lapad ng uri ng field, na nakahanay sa natural na pagkakahanay kung maaari.
Halimbawa, ang mga target na may memory-mapped peripheral registers ay maaaring mangailangan ng lahat ng iyon
access sa 16 bits ang lapad; gamit ang watawat na ito ay maaaring ideklara ng user ang lahat ng peripheral bit-
field bilang "unsigned short" (ipagpalagay na ang maikli ay 16 bits sa mga target na ito) upang pilitin ang GCC
na gumamit ng 16-bit na pag-access sa halip na, marahil, ng isang mas mahusay na 32-bit na pag-access.

Kung ang opsyon na ito ay hindi pinagana, ang compiler ay gagamit ng pinaka mahusay na pagtuturo. Sa
ang nakaraang halimbawa, iyon ay maaaring isang 32-bit na pagtuturo sa pag-load, kahit na iyon ay
i-access ang mga byte na hindi naglalaman ng anumang bahagi ng bit-field, o memory-mapped
nagrerehistro na walang kaugnayan sa ina-update.

Kung ang target ay nangangailangan ng mahigpit na pagkakahanay, at ang paggalang sa uri ng field ay mangangailangan
lumalabag sa pagkakahanay na ito, may babala. Kung ang field ay may "naka-pack" na katangian,
ang pag-access ay ginagawa nang walang paggalang sa uri ng field. Kung ang patlang ay walang
"naka-pack" na katangian, ang pag-access ay tapos na para sa uri ng field. Sa parehong mga kaso, GCC
Ipinapalagay na may alam ang user tungkol sa target na hardware na hindi nito nalalaman.

Ang default na halaga ng opsyong ito ay tinutukoy ng binary interface ng application para sa
ang target na processor.

Kapaligiran


Inilalarawan ng seksyong ito ang ilang variable ng kapaligiran na nakakaapekto sa kung paano gumagana ang GCC. Ang ilan
gumagana ang mga ito sa pamamagitan ng pagtukoy ng mga direktoryo o prefix na gagamitin kapag naghahanap ng iba't ibang uri
ng mga file. Ang ilan ay ginagamit upang tukuyin ang iba pang mga aspeto ng kapaligiran ng compilation.

Tandaan na maaari mo ring tukuyin ang mga lugar na hahanapin gamit ang mga opsyon gaya ng -B, -I at -L.
Ang mga ito ay nangunguna sa mga lugar na tinukoy gamit ang mga variable ng kapaligiran, na siya namang
unahin ang mga tinukoy ng configuration ng GCC.

WIKA
LC_CTYPE
LC_MESSAGES
LC_ALL
Kinokontrol ng mga environment variable na ito ang paraan ng paggamit ng GCC ng impormasyon sa localization
na nagpapahintulot sa GCC na magtrabaho sa iba't ibang pambansang kumbensyon. Sinusuri ng GCC ang lokal
mga kategorya LC_CTYPE at LC_MESSAGES kung ito ay na-configure upang gawin ito. Ang mga lokal na ito
maaaring itakda ang mga kategorya sa anumang halaga na sinusuportahan ng iyong pag-install. Ang isang karaniwang halaga ay
en_GB.UTF-8 para sa English sa United Kingdom na naka-encode sa UTF-8.

Ang LC_CTYPE ang variable ng kapaligiran ay tumutukoy sa pag-uuri ng character. Ginagamit ito ng GCC
tukuyin ang mga hangganan ng character sa isang string; ito ay kinakailangan para sa ilang mga multibyte
mga encoding na naglalaman ng mga quote at escape character na kung hindi man ay mabibigyang-kahulugan
bilang isang taling dulo o pagtakas.

Ang LC_MESSAGES ang environment variable ay tumutukoy sa wikang gagamitin sa diagnostic
mga mensahe.

Kung ang LC_ALL ang variable ng kapaligiran ay nakatakda, pinalampas nito ang halaga ng LC_CTYPE at
LC_MESSAGES; kung hindi man, LC_CTYPE at LC_MESSAGES default sa halaga ng WIKA
variable ng kapaligiran. Kung wala sa mga variable na ito ang nakatakda, magde-default ang GCC sa tradisyonal
C ugali sa Ingles.

TMPDIR
If TMPDIR ay nakatakda, tinutukoy nito ang direktoryo na gagamitin para sa mga pansamantalang file. Ginagamit ng GCC
pansamantalang mga file upang hawakan ang output ng isang yugto ng compilation na gagamitin bilang
input sa susunod na yugto: halimbawa, ang output ng preprocessor, na kung saan ay ang
input sa compiler proper.

GCC_COMPARE_DEBUG
Pagtatakda ng GCC_COMPARE_DEBUG ay halos katumbas ng pagpasa -fcompare-debug sa
driver ng compiler. Tingnan ang dokumentasyon ng opsyong ito para sa higit pang mga detalye.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX ay nakatakda, ito ay tumutukoy ng prefix na gagamitin sa mga pangalan ng
mga subprogram na isinagawa ng compiler. Walang idinagdag na slash kapag pinagsama ang prefix na ito
na may pangalan ng isang subprogram, ngunit maaari mong tukuyin ang isang prefix na nagtatapos sa isang slash kung
gusto mo.

If GCC_EXEC_PREFIX ay hindi nakatakda, susubukan ng GCC na malaman ang isang naaangkop na prefix sa
gamitin batay sa pathname kung saan ito ginamit.

Kung hindi mahanap ng GCC ang subprogram gamit ang tinukoy na prefix, susubukan nitong maghanap sa
karaniwang mga lugar para sa subprogram.

Ang default na halaga ng GCC_EXEC_PREFIX is prefix/lib/gcc/ saan unlapi ay ang unlapi sa
ang naka-install na compiler. Sa maraming pagkakataon unlapi ay ang halaga ng "prefix" noong pinatakbo mo ang
i-configure ang script.

Iba pang mga prefix na tinukoy sa -B unahin ang prefix na ito.

Ginagamit din ang prefix na ito para sa paghahanap ng mga file gaya ng crt0.o na ginagamit para sa pag-uugnay.

Bilang karagdagan, ang prefix ay ginagamit sa isang hindi pangkaraniwang paraan sa paghahanap ng mga direktoryo na hahanapin
para sa mga file ng header. Para sa bawat isa sa mga karaniwang direktoryo na ang pangalan ay karaniwang nagsisimula
sa /usr/local/lib/gcc (mas tiyak, na may halaga ng GCC_INCLUDE_DIR), sinusubukan ng GCC
pinapalitan iyon simula sa tinukoy na prefix upang makabuo ng isang kahaliling direktoryo
pangalan. Kaya, kasama -Bfoo/, maghahanap ang GCC foo/bar kung saan ito ay karaniwang naghahanap
/usr/local/lib/bar. Ang mga kahaliling direktoryo na ito ay unang hinanap; ang pamantayan
susunod ang mga direktoryo. Kung ang isang karaniwang direktoryo ay nagsisimula sa naka-configure unlapi pagkatapos
ang halaga ng unlapi ay pinalitan ng GCC_EXEC_PREFIX kapag naghahanap ng mga file ng header.

COMPILER_PATH
Ang halaga ng mga COMPILER_PATH ay isang listahan ng mga direktoryo na pinaghihiwalay ng tutuldok, katulad ng PATH.
Sinusubukan ng GCC ang mga direktoryo na tinukoy kapag naghahanap ng mga subprogram, kung hindi nito magagawa
hanapin ang mga subprogram na ginagamit GCC_EXEC_PREFIX.

LIBRARY_PATH
Ang halaga ng mga LIBRARY_PATH ay isang listahan ng mga direktoryo na pinaghihiwalay ng tutuldok, katulad ng PATH.
Kapag na-configure bilang katutubong compiler, sinusubukan ng GCC ang mga direktoryo kaya tinukoy kung kailan
naghahanap ng mga espesyal na linker file, kung hindi nito mahanap ang mga ito gamit GCC_EXEC_PREFIX.
Ginagamit din ng pagli-link gamit ang GCC ang mga direktoryo na ito kapag naghahanap ng mga ordinaryong aklatan
para sa -l opsyon (ngunit tinukoy ang mga direktoryo sa -L mauna ka).

WIKA
Ang variable na ito ay ginagamit upang ipasa ang lokal na impormasyon sa compiler. Isang paraan kung saan
ang impormasyong ito ay ginagamit ay upang matukoy ang set ng character na gagamitin kapag character
Ang mga literal, string literal at komento ay na-parse sa C at C++. Kapag ang compiler ay
na-configure upang payagan ang mga multibyte na character, ang mga sumusunod na halaga para sa WIKA ay
kinikilala:

C-JIS
Kilalanin ang mga character ng JIS.

C-SJIS
Kilalanin ang mga character ng SJIS.

C-EUCJP
Kilalanin ang mga karakter ng EUCJP.

If WIKA ay hindi tinukoy, o kung mayroon itong ibang halaga, gagamitin ng compiler
mlen at mbtowc gaya ng tinukoy ng default na lokal upang makilala at isalin ang multibyte
character.

Ang ilang karagdagang mga variable ng kapaligiran ay nakakaapekto sa pag-uugali ng preprocessor.

CPATH
C_INCLUDE_PATH
CPLUS_INNCLUDE_PATH
OBJC_INNCLUDE_PATH
Ang halaga ng bawat variable ay isang listahan ng mga direktoryo na pinaghihiwalay ng isang espesyal na karakter, marami
gaya ng PATH, kung saan maghahanap ng mga file ng header. Ang natatanging karakter,
Ang "PATH_SEPARATOR", ay nakadepende sa target at tinutukoy sa oras ng pagbuo ng GCC. Para sa Microsoft
Ang mga target na nakabatay sa Windows ay isang semicolon, at para sa halos lahat ng iba pang mga target ito ay a
tutuldok

CPATH tumutukoy sa isang listahan ng mga direktoryo na hahanapin na parang tinukoy -I, Ngunit
pagkatapos ng anumang mga landas na ibinigay kasama -I mga opsyon sa command line. Ang variable ng kapaligiran na ito
ay ginagamit anuman ang wikang paunang pinoproseso.

Ang natitirang mga variable ng kapaligiran ay nalalapat lamang kapag preprocessing ang partikular
wikang ipinahiwatig. Ang bawat isa ay tumutukoy ng isang listahan ng mga direktoryo na hahanapin na parang
tinukoy na may -isystem, ngunit pagkatapos ng anumang mga landas na ibinigay sa -isystem mga pagpipilian sa
command line.

Sa lahat ng mga variable na ito, ang isang walang laman na elemento ay nagtuturo sa compiler na hanapin ang kasalukuyan nito
gumaganang direktoryo. Maaaring lumitaw ang mga walang laman na elemento sa simula o dulo ng isang landas. Para sa
halimbawa, kung ang halaga ng CPATH ay ":/special/include", na may parehong epekto sa
-NS. -Ako/espesyal/kasama.

DEPENDENCE_OUTPUT
Kung nakatakda ang variable na ito, tinutukoy ng value nito kung paano mag-output ng mga dependency para sa Make based
sa mga non-system header file na pinoproseso ng compiler. Ang mga file ng header ng system ay
hindi pinansin sa output ng dependency.

Ang halaga ng mga DEPENDENCE_OUTPUT ay maaaring isang file name lang, kung saan ang Make rules
ay nakasulat sa file na iyon, na hinuhulaan ang target na pangalan mula sa pangalan ng source file. O ang
ang halaga ay maaaring magkaroon ng anyo file target, kung saan ang mga patakaran ay isinulat sa file file
paggamit target bilang target na pangalan.

Sa madaling salita, ang environment variable na ito ay katumbas ng pagsasama-sama ng mga opsyon -MM
at -MF, na may opsyonal -MT lumipat din.

SUNPRO_DEPENDENCIES
Ang variable na ito ay kapareho ng DEPENDENCE_OUTPUT (tingnan sa itaas), maliban sa sistemang iyon
Ang mga file ng header ay hindi binabalewala, kaya ipinahihiwatig nito -M sa halip na -MM. Gayunpaman, ang
ang pag-asa sa pangunahing input file ay tinanggal.

Gumamit ng g++-4.7 online gamit ang mga serbisyo ng onworks.net


Mga Libreng Server at Workstation

Mag-download ng Windows at Linux apps

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Team
    Taraf?ndan desteklenmektedir..
    Mga Tampok:https://github.com/turkdevopshttps://turkdevops.g...
    I-download ang turkdevops
  • 2
    asammdf
    asammdf
    Ang *asammdf* ay isang mabilis na Python parser at
    editor para sa ASAM (Associtation for
    Standardisasyon ng Automation at
    Mga Sistema ng Pagsukat) MDF / MF4
    (Format ng Data ng Pagsukat...
    I-download ang asammdf
  • 3
    LAME (Ang Lame ay hindi isang MP3 Encoder)
    LAME (Ang Lame ay hindi isang MP3 Encoder)
    Ang LAME ay isang tool na pang-edukasyon na gagamitin
    para sa pag-aaral tungkol sa MP3 encoding. Ang
    layunin ng proyektong LAME ay mapabuti
    ang psycho acoustics, kalidad at bilis
    ng MP...
    I-download ang LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    Isang set ng Python extension modules na
    balutin ang cross-platform na mga klase ng GUI mula sa
    wxWidgets.. Audience: Mga Developer. Gumagamit
    interface: X Window System (X11), Win32 ...
    I-download ang wxPython
  • 5
    packfilemanager
    packfilemanager
    Ito ang Total War pack file manager
    proyekto, simula sa bersyon 1.7. A
    maikling pagpapakilala sa Warscape
    modding: ...
    I-download ang packfilemanager
  • 6
    IPef2
    IPef2
    Isang tool sa trapiko sa network para sa pagsukat
    TCP at UDP performance na may mga sukatan
    sa paligid ng parehong throughput at latency. Ang
    Kasama sa mga layunin ang pagpapanatiling aktibo
    iperf cod...
    I-download ang IPrf2
  • Marami pa »

Linux command

Ad